Linux маршрутизатор с несколькими внешними интерфейсами
Настройка линукс маршрутизатора через iptables + iproute2 на два (и больше) внешних интерфейса. Предполагается: — то вы уже знакомы с понятием маршрутизации и ната. — теоретически понимаете как работает нат, что такое маршрутизация и файрвол, но не знаете как это реализовать на вашей системе. Имеется: — две входящие сетевые соски от двух разных провайдеров. — локальная сеть — три сетевых интерфейса на маршрутизаторе. Задача: Объеденить всех пользователей в одну локальную сеть и пускать одних пользователей в интернет через одного провайдера, других — через другого. В рассматриваемом примере, все пользователи в локальной сети будут находиться в сети 172.16.0.0/16, при этом пользователей из подсети 172.16.0.0/24 надо пропускать в интернет через первого провайдера, а пользователей 172.16.1.0/24 — через второго. Будем использовать iproute2 для таблиц маршуризации и iptables для ната. Обозначим:
Настраиваем статические адреса на сетевые карты. adidas homme Debian (ubuntu) хранит настройки в файле
тем самым мы сказали, что все сетвые у нас имеют статические адреса, и указали их. Настаиваем маршрутизацию с утилитой ip. Утилита route позволяет нам обратиться к таблице маршртизации. nike sb Сила утилиты ip в том, что она позволяет создать большое количество таблиц для самых разных потребностей, а так же, способна считывать флаги, которые расставляет файрвол iptables (об этом ниже) и на их основе тоже делать какие-то действия. Основа маршрутизации через разные таблицы — правила (rule) А сила различных таблиц в том, что мы можем хранить огромное количество различных таблиц маршрутизации, через которые и будем пропускать пакеты. Просмотреть список уже имеющихся таблиц можно командой
Мы видим, что у нас есть три правила: таблица 255, main и default. ugg femme france То, что выдает нам route — хранится в таблице main, что можно увидеть командой
В качестве номеров таблиц можно использовать цифры, ( пример: 0: from all lookup 255 ), а можно прописать на эти цифры какие-то более понятные простым смертным имена ( пример: 32766: from all lookup main ). Так что обозначим свои таблицы: Редактируем файл
Источник
Linux маршрутизатор с несколькими внешними интерфейсами
Не очень понимаю зачем нужно маркировать пакеты, если прямо в POSTROUTING можно задавать условие -d
еще раз — 1. изучение iptables — полностью на вашей совести. пусть люди сами изучают 2. если понять фишку с маркировкой пакетов, то потом можно ее использовать при создании других правил как маршрутизации, так и фильтрации. считаю, что этот момент полезен и не столь очевиден при самостоятельном изучении как SNAT и MASQUERADE
>В очередной раз повторюсь, что использование SNAT в данном случае лучше чем >MASQUERADE. >Использование MASQUERADE вообще оправданно только в случае динамического IP на внешнем интерфейсе. > > >Не очень понимаю зачем нужно маркировать пакеты, если прямо в POSTROUTING можно >задавать условие -d
Уважаемый demon не могли бы вы привести кусок примера ?? просто получилось у меня только с использованием меток.. но он мешают при написании скрипта с шейпеньем. кстати неукого не завалялся скриптик 🙂 Т.З. дано два канала 1)eth1-унлим 2)eth2-обычный ну и мега сеть 10.x.x.x с внутренней маршрутизацией OSPF(L3 коммутаторы) где дефолтный гетвей наш линукс сервер. билинг создает правило 10.1.1.1 на первый интерфейси ограничиваем его 128к, а на второй интерфейс 10.1.1.2 и на скорость наплевать. сделал пока только первое. а вот с двумя интерфейсами уже нет так как метка уже стоит.
1.3 , rusya ( ok ), 16:40, 22/04/2008 [ответить] [﹢﹢﹢] [ · · · ]
+ / –
а какой айпишник указать в качестве гейта во второй локальной подсети? Или поднимать виртуальный интерфейс? Или что?
Странный пример в статье. На мой взгляд SNAT превосходит по производительности MASQUERADE, метки тоже не очень оправданы в принципи. Любую маршрутизацию которую надо сделать можно загнать в соответсвующие таблицы и не напрягать ядро левой работой с разбором меток. год назад делал объединение 5 каналов из одной подсети. К стати если случайно забанится один ипшник, то часть конектов будет попадать в мертвое соединение.
хм! а если надо одну и туже сеть например 192.168.0.0/24 пускать в инет по разному например 80 8080 и т.д. порты через одного прова а фтп почту и т.д. через другого как быть? и как интересно резолвится днс в данном случае если дефолтный маршрут только один у него и днс свой соответственно а второго прова свой днс который уже не резолвится если есть основной маршрут
сразу после строки ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 table T1 пишет: RTNETLINK answers: Invalid argument и Error: an inet adress is expected rather than «table»
#все пакеты, которые попали в цепочку POSTROUTING таблицы nat обрабатываем по двум правилам: $IPT -t nat -A POTROUTING -m mark —mark 10 -j MASQUERADE # натим все пакеты которые имеют метку 10 $IPT -t nat -A POTROUTING -m mark —mark 11 -j MASQUERADE # натим все пакеты которые имеют метку 11
POTROUTING заменить на POsTROUTING
далее в файле роутинг GW1=»1.1.1.1″ # гейт первого провайдера. GW2=»2.2.2.1″ # гейт второго провайдера.
заменить GW на GW_INET
кажется по мелочевке всё, это глупые ошибки, остальные ошибки можно увидеть тут сравнив ваш оригинал с моей рабочей версией: http://www.opennet.ru/openforum/vsluhforumID6/19056.html#0
объясните дураку как сделать доступным сервер в локалке по 2 провайдерам? я уже с ума сошел данным способом описанном здесь, да и вариантом попроще, доступен только сервер для 2 провайдеров, но не сервер в локальной сети
ip route add $INET_GATE dev $INET_IF src $INET_IP table T1 ip route add default via $INET_GATE table T1 ip route add $INET_GATE dev $INET_IF src $INET_IP
ip route add 127.0.0.0/8 dev lo table T1
ip route add $INET_GATEE dev $INET_IFF src $INET_IPP table T2 ip route add default via $INET_GATEE table T2 ip route add $INET_GATEE dev $INET_IFF src $INET_IPP
ip route add 127.0.0.0/8 dev lo table T2
ip route add $INET_GATE dev $INET_IF src $INET_IP ip route add $INET_GATEE dev $INET_IFF src $INET_IPP
ip route add default via $INET_GATE
ip rule add fwmark 101 table T1 ip rule add fwmark 102 table T2
iptables -t nat -A PREROUTING -d $INET_IP -p tcp -m multiport —dports 80 -j MARK —set-mark 101 iptables -t nat -A PREROUTING -d $INET_IPP -p tcp -m multiport —dports 80 -j MARK —set-mark 102
ниже 2 правила судя по логам отрабатывают iptables -A PREROUTING -t nat -d $INET_IP -p tcp -m multiport —dports 80 -j DNAT —to-destination 192.168.0.2 iptables -A PREROUTING -t nat -d $INET_IPP -p tcp -m multiport —dports 80 -j DNAT —to-destination 192.168.0.10
робит: iptables -t filter -A FORWARD -i $INET_IF -o $LAN_IF -d 192.168.0.2 -j ACCEPT а это уже нет: iptables -t filter -A FORWARD -i $INET_IFF -o $LAN_IF -d 192.168.0.10 -j ACCEPT
хм.. навороченное решение, наверное есть какие то плюсы, я решил ту же проблему несколько иначе, возможно кому то пригодится. сначала все как в примере, добавляем таблицы в /etc/iproute2/rt_tables 100 vlan2 (или ваши имена) 200 vlan2 300 vlan2 #vlan2 — подсеть 1 #vlan3 — подсеть 2 #vlan4 — подсеть 3 ip rule add from 192.168.0.0/26 table vlan2 #добавляем подсети в таблицы ip rule add from 192.168.0.64/26 table vlan3 ip rule add from 192.168.0.128/26 table vlan4 ip route add from 192.168.0.0/26 default via 192.168.2.186 dev br0 table vlan2 #добавляем роутер по умолчанию для этих подсеток ip route add from 192.168.0.64/26 default via 192.168.2.6 dev br0 table vlan3 ip route add from 192.168.0.128/26 default via 192.168.2.6 dev br0 table vlan4
Linux маршрутизатор с несколькими внешними интерфейсами
Взято здесь, хорошая статья, но сервак помер, решил сохранить, а то мало ли что.
Содержание
Linux маршрутизатор с несколькими внешними интерфейсами
From: Трифонов Евгений aka ieroglif aka Sart
Subject: Linux маршрутизатор с несколькими внешними интерфейсами.
Настройка линукс маршрутизатора через iptables + iproute2 на два (и
больше) внешних интерфейса.
Предполагается:
то вы уже знакомы с понятием маршрутизации и ната.
теоретически понимаете как работает нат, что такое маршрутизация и файрвол, но не знаете как это реализовать на вашей системе.
Имеется:
две входящие сетевые соски от двух разных провайдеров.
локальная сеть
три сетевых интерфейса на маршрутизаторе.
Задача:
Объеденить всех пользователей в одну локальную сеть и пускать одних пользователей в интернет через одного провайдера, других — через другого.
В рассматриваемом примере, все пользователи в локальной сети будут находиться в сети 172.16.0.0/16, при этом пользователей из подсети 172.16.0.0/24 надо пропускать в интернет через первого провайдера, а пользователей 172.16.1.0/24 — через второго.
Будем использовать iproute2 для таблиц маршуризации и iptables для ната.
Обозначим:
Настраиваем статические адреса на сетевые карты.
Debian (ubuntu) хранит настройки в файле
тем самым мы сказали, что все сетвые у нас имеют статические адреса, и указали их.
Настаиваем маршрутизацию с утилитой ip.
Утилита route позволяет нам обратиться к таблице маршртизации.
Сила утилиты ip в том, что она позволяет создать большое количество таблиц для самых разных потребностей, а так же, способна считывать флаги, которые расставляет файрвол iptables (об этом ниже) и на их основе тоже делать какие-то действия.
Основа маршрутизации через разные таблицы — правила (rule)
А сила различных таблиц в том, что мы можем хранить огромное количество различных таблиц маршрутизации, через которые и будем пропускать пакеты.
Просмотреть список уже имеющихся таблиц можно командой
Мы видим, что у нас есть три правила: таблица 255, main и default. То, что выдает нам route — хранится в таблице main, что можно увидеть командой
В качестве номеров таблиц можно использовать цифры, ( пример: 0: from all lookup 255 ), а можно прописать на эти цифры какие-то более понятные простым смертным имена ( пример: 32766: from all lookup main ).
Так что обозначим свои таблицы:
и добавляем туда записи вида:
номер — это то самое число, которое мы можем использовать если не именовать таблицы, а строковое значение — то, что мы в действительности будем использовать. (кстати, тут же мы видим и уже встречавшиеся нам в списке правил таблицы)
Теперь создаем некий скрипт, который в последствии будет все нам прописывать при старте системы.
Понятное дело, что каждый использует свой любимый редактор =)
В целом, понятно все, за исключением одного вопроса — что же это за метка такая в последних строчках?
Тут мы обращаемся к утилите iptables.
Краткая теория. (полную и на русском языке можно, а вообще-то, даже нужно, читать тут http://www.opennet.ru/docs/RUS/iptables/ )
Утилита iptables так же основана на таблицах. только таблиц в ней фиксированно — три.
mangles — таблица используется для изменений заголовков пакетов.
filter — самая наша основаная таблица для файрвола — тут мы производим все блокировки, разрешения.
nat — таблица, как понятно из названия для ната.
Каждая таблица уже имеет некоторые предлопределенные цепочки, в которые можно добавлять правила, а так же поддерживает создание пользовательские цепочки.
Когда паркт попадает на интерфейс, и, его ловит iptables, то он проходит следующие таблицы и цепочки, важные для нас:
таблица mangle цепочка PREROUTING
обработка маршрутизации.
таблица nat цепочка POSTROUTING
(в действительно пакет проходит еще и через другие таблицы и цепочки, но, для планируемой маршрутизации они нафик не сдались — изучение этого вопроса уже полностью на вашей совести =) ).
Скрипт для маршрутизации:
И так, что же происходит.
Пусть адрес пользователя 172.16.0.2
У пользователя прописан дефолтный гейт 172.16.0.1 — т.е. все пакеты которые направлены не в локальную сеть пойдут туда.
На наш маршрутизатор приходит пакет от 172.16.0.2 и на адрес (к примеру) 4.4.4.4
пакет попадает в таблицу mangle в цепоку PREROUTING и там по правилу «все пакеты от $NET_SUB1 и не в $NET_LOCAL» маркируется меткой 10 и попускается дальше.
пакет попадает в правила маршрутизации и обрабатывается по правилу «все пакеты, которые имеют метку 10 маршрутизировать по таблице T1». попав в эту таблицу маршрутизатор отправляет пакет в дефолтный гейт для этой таблицы, т.к. адрес 4.4.4.4 не подходит ни под одну сеть, которые есть в этой таблице.
пакет попадает в таблицу nat в цепочку POSTROUTING и там по правилу «натим все пакеты которые имеют метку 10» натится наружу.
Важный момент: метка пакета существует только внутри нашего марщрутизатора. выходящий пакет уже не имеет меток.
Сам факт подобной реализации маршрутизации возможен только из-за того, что когда пакет обрабатывается правилами маршрутизации метка существует, так как после пакет возвращается на обработку в таблицы iptables.
Осталось только сделать наши скрипты исполняемыми и закинуть их на автозагрузку.
Важно обратить внимание, что данный маршрутизатор будет маршрутизировать пакеты в обе стороны, так что если кто-то из внешних сетей пропишет себе ip нашей локальной сети, и укажет в качестве маршрутизатора ip нашего маршрутизатора — он спокойно опадет к нам.
Но настройка файрвола — это уже второй вопрос, который в эту статью не входит.