Нужно почту пустить по одному каналу (eth2), а инет по другому (eth0).
eth1 - локальная сеть, eth0 - интернет канал №1, eth2 IP 172.17.17.2 - интернет канал №2echo 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Вроде пакеты маркируются, но что-то не разруливаются
Все вроде правильно, должно работать
как вы определили что всё идёт через eth0проверьте присутствие маршрута в таблице post
ip route list table postприсутствет ли правило для маркированых пакетов
ip rule listидут ли через eth2 пакеты
tcpdump -n -i eth2
>как вы определили что всё идёт через 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 eth20 packets received by filter
0 packets dropped by kernel
если вы выполните
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
>/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.