URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 75976
[ Назад ]

Исходное сообщение
"Разделить почту и инет по разным каналам"

Отправлено Fedor , 30-Авг-07 21:00 
Нужно почту пустить по одному каналу (eth2), а инет по другому (eth0).
eth1 - локальная сеть, eth0 - интернет канал №1, eth2 IP 172.17.17.2 - интернет канал №2

echo 200 post >> /etc/iproute2/rt_tables
/sbin/iptables -I FORWARD -j ACCEPT -i eth1  
/sbin/iptables -I FORWARD -j ACCEPT -o eth1 -m state --state RELATED,ESTABLISHED
/sbin/iptables -t mangle -I PREROUTING -i eth1 -p tcp -m multiport --dports 25,110 -j MARK --set-mark 25
/sbin/ip route add default via 172.17.17.2 table post
/sbin/ip rule add fwmark 25 table post
/sbin/ip route flush cache

Пробовал сделать так как написано. Всеравно почта и инет уходят в один канал (eth0).
[root@w conf]# iptables -L FORWARD -vxn
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts      bytes target     prot opt in     out     source               destination
0        0 ACCEPT     all  --  eth2   *       0.0.0.0/0            0.0.0.0/0
59     8117 ACCEPT     all  --  *      eth1    0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
46     3232 ACCEPT     all  --  eth1   *       0.0.0.0/0            0.0.0.0/0
0        0 tcp_outbound  tcp  --  eth1   *       0.0.0.0/0            0.0.0.0/0
0        0 udp_outbound  udp  --  eth1   *       0.0.0.0/0            0.0.0.0/0
0        0 ACCEPT     all  --  eth1   *       0.0.0.0/0            0.0.0.0/0
0        0 ACCEPT     all  --  eth0   *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
0        0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           limit: avg 3/min burst 3 LOG flags 0 level 4 prefix `FORWARD packet died: '

[root@w conf]# iptables -t mangle -L -vxn
Chain PREROUTING (policy ACCEPT 35054 packets, 6175996 bytes)
pkts      bytes target     prot opt in     out     source               destination
1334    58953 MARK       tcp  --  eth1   *       0.0.0.0/0            0.0.0.0/0           multiport dports 25,110 MARK set 0x19
Chain INPUT (policy ACCEPT 19391010 packets, 10575974159 bytes)
pkts      bytes target     prot opt in     out     source               destination
Chain FORWARD (policy ACCEPT 1540575 packets, 563988042 bytes)
pkts      bytes target     prot opt in     out     source               destination
Chain OUTPUT (policy ACCEPT 41076 packets, 9796077 bytes)
pkts      bytes target     prot opt in     out     source               destination
Chain POSTROUTING (policy ACCEPT 24088277 packets, 12226257240 bytes)
pkts      bytes target     prot opt in     out     source               destination

Вроде пакеты маркируются, но что-то не разруливаются


Содержание

Сообщения в этом обсуждении
"Разделить почту и инет по разным каналам"
Отправлено Oyyo , 30-Авг-07 22:39 
Все вроде правильно, должно работать
как вы определили что всё идёт через eth0

проверьте присутствие маршрута в таблице post
ip route list table post

присутствет ли правило для маркированых пакетов
ip rule list

идут ли через eth2 пакеты
tcpdump -n -i eth2


"Разделить почту и инет по разным каналам"
Отправлено Fedor , 31-Авг-07 12:55 
>как вы определили что всё идёт через eth0

Второй канал, куда должна идти почта, сейчас отключен (временно нет модема). Отправляю почту из локалки и она уходит без проблем. Я так понимаю, что если сработает фильтрация по маркировке, то у меня почта просто не уйдет. Отсюда такой вывод.

>проверьте присутствие маршрута в таблице post
>ip route list table post

[root@ conf]# ip route list table post
default via 172.17.17.2 dev eth2

>присутствет ли правило для маркированых пакетов
>ip rule list

[root@balance conf]# ip rule list
0:      from all lookup local
32765:  from all fwmark       25 lookup post
32766:  from all lookup main
32767:  from all lookup 253

>идут ли через eth2 пакеты
>tcpdump -n -i eth2

[root@balance conf]# tcpdump -n -i eth2
tcpdump: listening on eth2

0 packets received by filter
0 packets dropped by kernel


"Разделить почту и инет по разным каналам"
Отправлено Oyyo , 31-Авг-07 17:54 
если вы выполните
iptables -t mangle -L PREROUTING -vn

то увидите примерно такую запись
42 10767 MARK  all  --  *   *   0.0.0.0/0    0.0.0.0/0   MARK set 0x19
обратите внимание на "0х19"

>[root@balance conf]# ip rule list
>0:      from all lookup local
>32765:  from all fwmark 25 lookup post
>32766:  from all lookup main
>32767:  from all lookup 253

у вас в таблице post - from all fwmark 25 lookup post
обратите внимание "25"
эти числа должны выглядеть одинаково, я тоже наблюдал у себя такой глюк

попробовал ставить маркер 100 и он пошёл нормально
# iptables -t mangle -L PREROUTING -vn
Chain PREROUTING (policy ACCEPT 6989K packets, 3519M bytes)
pkts bytes target     prot opt in     out     source    destination
32  7001 MARK  all  --  *  *  10.100.238.12   0.0.0.0/0   MARK set 0x64


# ip rule list
0:      from all lookup local
32765:  from all fwmark 0x64 lookup post
32766:  from all lookup main
32767:  from all lookup default



"Разделить почту и инет по разным каналам"
Отправлено miroslav , 31-Авг-07 00:38 
>/sbin/iptables -I FORWARD -j ACCEPT -i eth1
>/sbin/iptables -I FORWARD -j ACCEPT -o eth1 -m state --state RELATED,ESTABLISHED
>/sbin/iptables -t mangle -I PREROUTING -i eth1 -p tcp -m multiport --dports 25,110 -j MARK --set-mark 25
>/sbin/ip route add default via 172.17.17.2 table post
>/sbin/ip rule add fwmark 25 table post
>/sbin/ip route flush cache

Необходимо сделать SNAT для промаркированных пакетов, иначе дефолтным исходяшим он будет долбится в 172.17.17.2:
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 25 -j SNAT --to-source 172.17.17.xx

(где 172.17.17.xx интерфейс, смотрящий на шлюз 172.17.17.2)

+
Нужно включить ip_forward и отключить rp_filter, иначе пакеты вернувшиеся с недефолтного маршрута будут игнорированы:
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/conf/*/rp_filter

+
Проверь чтобы номер маркировки в iptables и ip rule совпал, как видно 25 превратилось в 0x19, проверь в ip rule чтоб было тоже 0x19.