Как распредилить трафик по сет. интерфейсам bce0/tun0 (ipfw)

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
adw0rd
проходил мимо
Сообщения: 3
Зарегистрирован: 2013-03-10 17:45:10
Откуда: Saint-Petersburg
Контактная информация:

Как распредилить трафик по сет. интерфейсам bce0/tun0 (ipfw)

Непрочитанное сообщение adw0rd » 2013-03-10 18:04:51

Есть веб-сервер, на который ходят http-клиенты, ssh.
На сервере существуют 2 сетевых карты, одна bce0 (внешняя), а вторая это openvpn-тунель tun0.

Необходимо чтобы клиенты могли продолжать ходить на сервер (http, ssh и т.д.). А весь траффик, который генерируется веб-сервером (приложения веб-сервера ходят по API на внешние сайты и т.п.) ходил через tun0.

Конфигурация: FreeBSD 9.0, ipfw. Ядро отнаследовано от GENERIC и имеет следующие дополнения для IPFIREWALL:

Код: Выделить всё

options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_NAT
options         LIBALIAS
options         ROUTETABLES=2
options         DUMMYNET
options         HZ="1000"
Наcкольно я понял, "ipfw forward" поддерживает только статичный IP, а tun0 предоставляет динамичный gw и ip-адрес. Или я что-то не понял?
Вложения
ipfw_fwd_tun0.jpg
Желаемая схема распределения трафика
ipfw_fwd_tun0.jpg (16.15 КБ) 1796 просмотров

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Fast_Deer
мл. сержант
Сообщения: 126
Зарегистрирован: 2013-01-09 10:56:34

Re: Как распредилить трафик по сет. интерфейсам bce0/tun0 (i

Непрочитанное сообщение Fast_Deer » 2013-03-13 21:15:12

Здравствуй.
Только недавно решал похожую задачу в теме про IPTABLES http://forum.lissyara.su/viewtopic.php?f=47&t=38818 для своего домашнего роутера (на линуксе). Судя по Вашему описанию, то Вам нужно "зарулить" весь исходящий трафик с сервака на другой маршрут. С точки зрения логики данная схема реализуется через
- или изменение дефолтного маршрута на сервере, тогда
"весь траффик, который генерируется веб-сервером"
будет заруливаться на tun0, а все что приходит с другого шлюза туда же должно и отправляться.
- или как в моем случае через маркировку исходящих пакетов
Первый вариант, думаю, не вызовет особых сложностей, а во втором случае могу выложить мои скрипты по настройке, которые я делал (не без помощи умных людей) для своего домашнего роутера (Линукс MIPS). Думаю что по аналогии можно заточить и под ipfw

Аватара пользователя
adw0rd
проходил мимо
Сообщения: 3
Зарегистрирован: 2013-03-10 17:45:10
Откуда: Saint-Petersburg
Контактная информация:

Re: Как распредилить трафик по сет. интерфейсам bce0/tun0 (i

Непрочитанное сообщение adw0rd » 2013-03-13 23:11:46

Первый вариант, думаю, не вызовет особых сложностей
Да, я так и сделал, уже работает три дня. Сделал через fwd. Статью допишу утром и ссылку выложу сюда, спасибо за ваш ответ!
Только недавно решал похожую задачу в теме про IPTABLES http://forum.lissyara.su/viewtopic.php?f=47&t=38818 для своего домашнего роутера (на линуксе).
Ваш пост пригодится на днях, надо будет в роутере Keenetic giga настроить OpenVPN, почитаю, спасибо!

Аватара пользователя
adw0rd
проходил мимо
Сообщения: 3
Зарегистрирован: 2013-03-10 17:45:10
Откуда: Saint-Petersburg
Контактная информация:

Re: Как распредилить трафик по сет. интерфейсам bce0/tun0 (i

Непрочитанное сообщение adw0rd » 2013-03-14 10:43:40

Вот мой развернутый ответ http://adw0rd.com/2013/3/14/ipfw-forward-vpn/, который я обещал тут привести

Аватара пользователя
Fast_Deer
мл. сержант
Сообщения: 126
Зарегистрирован: 2013-01-09 10:56:34

Re: Как распредилить трафик по сет. интерфейсам bce0/tun0 (i

Непрочитанное сообщение Fast_Deer » 2013-03-17 21:59:38

Привожу решение своего поста, так сказать для ознакомления. Все делалось для домашного роутера ASUS WL500W на базе Linux MIPS на "прошивке от Олега". Исходные данные:
- основной и старейший ( у меня дома) провайдер на базе ADSL модема (модем в режиме Bridge). Настройки WAN порта: PPPoE (провайдерский DHCP+внешний статический адрес также выдаваемый провайдером). Шлюз по умолчанию
- скорости ADSL модема стало мало и поэтому был докуплен еще 16МБ канал на витой паре со внутренним статическим IP адресом. Под WAN порт был выделен свободный LAN порт (прошивка и "железо" это позволяет) и ему "задано" имя vlan1
Задача: - необходимо 2 компа в домашней сети завернуть на нового провайдера оставив старый канал для сервисов, не требующих контроля.
Исходные данные: используем переменные (чтоб не давать конкретики)
- IP1_source - адрес первого компа который должен ходить через нового провайдера
- IP2_source - адрес второго компа который должен ходить через нового провайдера
- IP1_gateway - адрес шлюза выдаваемого основным провайдером (внешний статический адрес)
- IP2_gateway - адрес шлюза выдаваемого дополнительным провайдером (внутренний статический адрес)
в обоих случаях шлюз заранее известен!
далее основные источники информации:
1) умные люди, которые знают IPTABLE (я не знаю этого вопроса - только на стадии изучения)
2) страничка на сайте http://www.opennet.ru/base/net/iproute2.txt.html
3) страничка на сайте http://www.dd-wrt.com/wiki/index.php/Du ... ualization
мои текущие настройки на роутере (я не стал для маркировки пакетов в дальнейшем использовать таблицу /etc/iproute2/rt_tables как рекомендовали 1 и 2, а заюзал триггеры (по варианту 3), так как это мне кажется более красивым решением):
#маркируем трафик идущий со шлюзов. Данные скрипты просто скопированы и подогнаны под свои нужды с источника 3

Код: Выделить всё

ip rule flush
ip rule add lookup main prio 32766
ip rule add lookup default prio 32767
ip rule add from $IP1_gateway table 100 prio 100
ip rule add fwmark 0x100 table 100 prio 101
ip rule add from $IP2_gateway table 200 prio 200
ip rule add fwmark 0x200 table 200 prio 201
ip route flush table 100
ip route flush table 200
for TABLE in 100 200
do
  ip route | grep link | while read ROUTE
  do
    ip route add table $TABLE to $ROUTE
  done
done
ip route add table 100 default via $IP1_gateway
ip route add table 200 default via $IP2_gateway
маркируем трафик идущий от нужных компов

Код: Выделить всё

ip rule add from $IP1_source table 200 prio 200
ip rule add from $IP2_source table 200 prio 200
# Чистим кеш
ip route flush cache
настройка IPTABLES. без комментов
iptables -A INPUT -i vlan1 -m state --state NEW -j SECURITY
iptables -A FORWARD -i vlan1 -m state --state NEW -j SECURITY
iptables -t nat -A POSTROUTING -o vlan1 ! -s $IP2_gateway -j MASQUERADE
# перенаправление трафика на другой шлюз для некоторых клиентов
# Для правильной обратной связи
iptables -t mangle -N PROV
iptables -t mangle -A PROV -i vlan1 -j CONNMARK --set-mark 2
iptables -t mangle -A PREROUTING -i eth1 -m state --state ESTABLISHED -j CONNMARK --restore-mark
iptables -t mangle -A FORWARD -i vlan1 -m state --state NEW -j PROV
Вот как то так. И главное что оно работает!