Решено: iptables + ip route + ip rule

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Валентин
Сообщения: 18
ОС: openSUSE

Решено: iptables + ip route + ip rule

Сообщение Валентин »

Есть два канала в интернет. По умолчанию всё уходит через первого провайдера, хочу завернуть на второго неприоритетный трафик (smtp, http, imap, pop3, icq и т.д.)

Входные данные:
eth0 - локалка
eth1 - подключение к главному каналу (приоритетный https)
eth2 - 192.168.1.2 (шлюз 192.168.1.1, ADSL модем) подключение ко второму каналу (резервный, он же должен обслуживать неприоритетный трафик)

Пытаюсь сначала завернуть 25 порт на eth2:

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

cat 100 norior >>/etc/iproute2/rt_tables
iptables -A PREROUTING -s 192.168.0.0/24 -t mangle -p tcp --dport 25 -j MARK --set-mark 100
ip route add default via 192.168.1.1 dev eth2 table noprior
ip rule add fwmark 100 table noprior


Проверяем:

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

router:/etc/iproute2 # cat /etc/iproute2/rt_tables
#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
#36 GAZINTER
#37 BALTNET
100 noprior


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

router:/etc/iproute2 # ip route show table all
default via 192.168.1.1 dev eth2  table noprior
212.44.83.180/30 dev eth1  proto kernel  scope link  src 212.44.83.182
192.168.1.0/24 dev eth2  proto kernel  scope link  src 192.168.1.2
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.1
169.254.0.0/16 dev eth0  scope link
127.0.0.0/8 dev lo  scope link
default via 212.44.83.181 dev eth1
broadcast 192.168.1.0 dev eth2  table local  proto kernel  scope link  src 192.168.1.2
broadcast 192.168.0.255 dev eth0  table local  proto kernel  scope link  src 192.168.0.1
broadcast 127.255.255.255 dev lo  table local  proto kernel  scope link  src 127.0.0.1
local 192.168.1.2 dev eth2  table local  proto kernel  scope host  src 192.168.1.2
local 192.168.0.1 dev eth0  table local  proto kernel  scope host  src 192.168.0.1
broadcast 192.168.1.255 dev eth2  table local  proto kernel  scope link  src 192.168.1.2
broadcast 192.168.0.0 dev eth0  table local  proto kernel  scope link  src 192.168.0.1
local 212.44.83.182 dev eth1  table local  proto kernel  scope host  src 212.44.83.182
local 127.0.0.2 dev lo  table local  proto kernel  scope host  src 127.0.0.1
broadcast 212.44.83.183 dev eth1  table local  proto kernel  scope link  src 212.44.83.182
broadcast 212.44.83.180 dev eth1  table local  proto kernel  scope link  src 212.44.83.182
broadcast 127.0.0.0 dev lo  table local  proto kernel  scope link  src 127.0.0.1
local 127.0.0.1 dev lo  table local  proto kernel  scope host  src 127.0.0.1
local 127.0.0.0/8 dev lo  table local  proto kernel  scope host  src 127.0.0.1


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

router:/etc/iproute2 # iptables -L -t mangle
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
MARK       tcp  --  192.168.0.0/24       anywhere            tcp dpt:smtp MARK xset 0x64/0xffffffff

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination


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

router:/etc/iproute2 # ip rule show
0:      from all lookup local
32765:  from all fwmark 0x64 lookup noprior
32766:  from all lookup main
32767:  from all lookup default


Пробуем подключиться:

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

snake@balt:~> telnet 217.168.77.140 25
Trying 217.168.77.140...


и висит. Опускаем интерфейс eth1 - та же песня, т.е. коннекти типа вроде как идёт...
Поднимаем eth1, убираем правило - всё нормально, коннектится...

В чём моя ошибка? Пока не могу понять...
Спасибо сказали:
Валентин
Сообщения: 18
ОС: openSUSE

Re: Решено: iptables + ip route + ip rule

Сообщение Валентин »

tcpdump ом вижу, что пакеты уходят на eth2, возвращаются на него из интернета и всё. Конец. Тут и погибают.
Почему дальше не проваливаютс в сеть, не понимаю...

Очень нужна помощь!
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Решено: iptables + ip route + ip rule

Сообщение Ленивая Бестолочь »

tcpdump ом вижу, что пакеты уходят на eth2, возвращаются на него из интернета и всё. Конец. Тут и погибают.

очень похоже на проблемы с nat-ом. покажите все правила iptables.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Валентин
Сообщения: 18
ОС: openSUSE

Re: Решено: iptables + ip route + ip rule

Сообщение Валентин »

Проблема решена. Оказалось, что надо запретить фильтрацию обратного адреса.

Итого все команды маршрутизации:

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

/usr/sbin/iptables -t mangle -A PREROUTING -i eth0 -p tcp -m multiport --dports 25,110,80,21,143,5190 -s 192.168.0.0/24 -d ! 192.168.0.0/24 -j MARK --set-mark 25
/bin/ip route add default via 192.168.1.1 dev eth2 table vbt
/bin/ip rule add fwmark 25 table vbt
echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter


Пускаем неприоритетный трафик на другого провайдера.
Спасибо сказали: