Wednesday, August 23rd, 2017

Linux маршрутизатор с несколькими внешними интерфейсами

Published on Март 30, 2009 by   ·   Комментариев нет

Настройка линукс маршрутизатора через iptables + iproute2 на два (и
больше) внешних интерфейса.

Предполагается:

— то вы уже знакомы с понятием маршрутизации и ната.
— теоретически понимаете как работает нат, что такое маршрутизация и
файрвол, но не знаете как это реализовать на вашей системе.

Имеется:

— две входящие сетевые соски от двух разных провайдеров.
— локальная сеть
— три сетевых интерфейса на маршрутизаторе.

Задача:

Объеденить всех пользователей в одну локальную сеть и пускать одних
пользователей в интернет через одного провайдера, других — через
другого.

В рассматриваемом примере, все пользователи в локальной сети будут
находиться в сети 172.16.0.0/16, при этом пользователей из подсети
172.16.0.0/24 надо пропускать в интернет через первого провайдера, а
пользователей 172.16.1.0/24 — через второго.

Будем использовать iproute2 для таблиц маршуризации и iptables для ната.

Обозначим:

    $IP_LOCAL="172.16.0.1" - адрес нашего маршрутизатора в локальной сети.
        $IP_INET1="1.1.1.2" - адрес нашего маршрутизатора в сети первого провайдера.
        $IP_INET2="2.2.2.2" - адрес нашего марщрутизатора в сети второго провайдера.

        $IF_LOCAL="eth0" - имя интерфейса на локальную сеть
        $IF_INET1="eth1" - имя интерфейса на первого провайдера.
        $IF_INET2="eth2" - имя интерфейса на второго провайдера.

        $NET_LOCAL="172.16.0.0/16" - локальная сеть.
        $NET_INET1="1.1.1.0/24" - адрес сети в которой гейт нашего первого провайдера.
        $NET_INET2="2.2.2.0/24" - адрес сети в которой гейт нашего второго провайдера.
        $NET_SUB1="172.16.0.0/24" - подсеть пользователей на первого провайдера
        $NET_SUB2="172.16.1.0/24" - подсеть пользователей на второго провайдера

        $GW1="1.1.1.1" - гейт первого провайдера.
        $GW2="2.2.2.1" - гейт второго провайдера.

Настраиваем статические адреса на сетевые карты.

Debian (ubuntu) хранит настройки в файле

   /etc/network/interfaces.

пишем:

    auto lo
        iface lo inet loopback

        #local
        auto eth0
        iface eth0 inet static
                address 172.16.0.1
                netmask 255.255.0.0
                network 172.15.0.0
                broadcast 172.16.255.255
       
        #inet 1
        auto eth1
        iface eth1 inet static
                address 1.1.1.2
                netmask 255.255.255.0
                gateway 1.1.1.1
                network 1.1.1.0
                broadcast 1.1.1.255
       
        #inet 2
        auto eth2
        iface eth2 inet static
        #если надо - меняем мак адреса
        #        pre-up ifconfig eth2 hw ether aa:bb:cc:cc:bb:aa
                address 2.2.2.2
                netmask 2.2.2.0
        # себе я второй гейт не прописываю, в следствии чего сам маршрутизатор ходит в инет через первый инет
        #       gateway 2.2.2.1
                network 2.2.2.0
                broadcast 2.2.2.255

тем самым мы сказали, что все сетвые у нас имеют статические адреса, и
указали их.

Настаиваем маршрутизацию с утилитой ip.

Утилита route позволяет нам обратиться к таблице маршртизации.

Сила утилиты ip в том, что она позволяет создать большое количество
таблиц для самых разных потребностей, а так же, способна считывать
флаги, которые расставляет файрвол iptables (об этом ниже) и на их
основе тоже делать какие-то действия.

Основа маршрутизации через разные таблицы — правила (rule)

А сила различных таблиц в том, что мы можем хранить огромное количество
различных таблиц маршрутизации, через которые и будем пропускать пакеты.

Просмотреть список уже имеющихся таблиц можно командой

     ip rule list

        0:      from all lookup 255
        32766:  from all lookup main
        32767:  from all lookup default

Мы видим, что у нас есть три правила: таблица 255, main и default.
То, что выдает нам route — хранится в таблице main, что можно увидеть командой

     ip route list table main

В качестве номеров таблиц можно использовать цифры, ( пример: 0: from
all lookup 255 ), а можно прописать на эти цифры какие-то более понятные
простым смертным имена ( пример: 32766: from all lookup main ).

Так что обозначим свои таблицы:

Редактируем файл

    /etc/iproute2/rt_tables

и добавляем туда записи вида:

        #
        # reserved values
        #
        255     local
        254     main
        253     default
        0       unspec
        #
        # local
        #
        #1      inr.ruhep
       
        10      T1
        20      T2

номер — это то самое число, которое мы можем использовать если не
именовать таблицы, а строковое значение — то, что мы в действительности
будем использовать. (кстати, тут же мы видим и уже встречавшиеся нам в
списке правил таблицы)

Теперь создаем некий скрипт, который в последствии будет все нам
прописывать при старте системы.

Понятное дело, что каждый использует свой любимый редактор =)

/etc/init.d/route

[cc lang=»bash» tab_size=»2″ lines=»-1″]
#!/bin/sh

IP_LOCAL=»172.16.0.1″ # адрес нашего маршрутизатора в локальной сети.
IP_INET1=»1.1.1.2″ # адрес нашего маршрутизатора в сети первого провайдера.
IP_INET2=»2.2.2.2″ # адрес нашего марщрутизатора в сети второго провайдера.

IF_LOCAL=»eth0″ # имя интерфейса на локальную сеть
IF_INET1=»eth1″ # имя интерфейса на первого провайдера.
IF_INET2=»eth2″ # имя интерфейса на второго провайдера.

NET_LOCAL=»172.16.0.0/16″ # локальная сеть.
NET_INET1=»1.1.1.0/24″ # адрес сети в которой гейт нашего первого провайдера.
NET_INET2=»2.2.2.0/24″ # адрес сети в которой гейт нашего второго провайдера.

GW1=»1.1.1.1″ # гейт первого провайдера.
GW2=»2.2.2.1″ # гейт второго провайдера.

ip route flush table T1 #обнуляем первую таблицу маршрутов
ip route flush table T2 #обнуляем вторую таблицу маршрутов

ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 table T1 #закидываем в первую таблицу инфу о сети первого провайдера
ip route add $NET_LOCAL dev $IF_LOCAL table T1 #закидываем в первую таблицу инфу о том, что у нас существует локальная сеть
ip route add $NET_INET2 dev $IF_INET2 table T1 #закидываем в первую таблицу инфу о том, что у нас существует еще одна сеть
ip route add 127.0.0.0/8 dev lo table T1 #закидываем в первую таблицу инфу о существовании лупбека
ip route add default via $GW_INET1 table T1 #закидываем в первую таблицу дефолтный гейт на первого провайдера

best online casino usa

ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2 table T2 #закидываем во вторую таблицу инфу о сети второг

zp8497586rq




































Смотрите также:

Tags: , , , , ,

Readers Comments (Комментариев нет)

Comments are closed.

Exchange 2007

Проведение мониторинга Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 3)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Проведение мониторинга Exchange 2007 с помощью диспетчера System ... [+]

Практическое рассмотрение перехода с Exchange 2003 на Exchange 2007 (часть 1)

Введение В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 2)

Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ... [+]

Мониторинг Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 2)

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ... [+]

Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 5)

Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам: Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1) ... [+]

Установка и настройка Exchange 2007 из командной строки (Часть 3)

If you missed the previous parts in this article series please read: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 1)

Инструмент ExRCA Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями: Тест подключения Outlook 2007 Autodiscover Тест подключения Outlook 2003 RPC ... [+]

Развертывание сервера Exchange 2007 Edge Transport (часть 5)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Развертывание сервера Exchange 2007 Edge Transport (часть 1) Развертывание ... [+]

Установка и настройка Exchange 2007 из командной строки (часть 2)

Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование интегрированных сценариев Using Exchange Server 2007 – часть 2: генерирование отчетов агента Transport AntiSpam Agent

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ... [+]