В системе есть 2 интерфейса. Пытаюсь настроить iptables & ip route так, чтобы основной трафик (от локальных приложений) ходил через один интерфейс, а трафик некого класса (пусть пока ICMP) — через другой с помощью этого скрипта:
IF_INET1="interface 1"
IP_INET1="ip address 1"
IF_INET2="interface 2" # default
# iptables clean
iptables -F
iptables -F -t nat
iptables -F -t raw
iptables -F -t mangle
iptables -F -t filter
iptables -X
# create ip route table T1 (if it's not created yet)
RT_TABLES=/etc/iproute2/rt_tables
if ! cat $RT_TABLES | grep '101 T1' 1>/dev/null 2>&1; then
echo 101 T1 >> $RT_TABLES
fi
# ip route clean
ip route flush table T1
while ip rule list | grep 'lookup T1' 1>/dev/null 2>&1; do
ip rule del table T1
done
# iptables
iptables -t mangle -A OUTPUT -p icmp -j MARK --set-mark 10
iptables -t nat -A POSTROUTING -o $IF_INET1 -j SNAT --to-source $IP_INET1
# ip route
ip route add default dev $IF_INET1 table T1
ip rule add fwmark 10 table T1
ip route add default dev $IF_INET2
ip route flush cache
Запускаю пинг. Пинги не идут. Сниффер показывает нормальный обмен пинг-запросами и пинг-ответами. Пинг-ответы не доходят до локальных приложений, они дропаются между таблицами mangle и nat в PREROUTING. Возможно SNAT не хочет нормально работать, но почему? Или проблема в чём-то ещё?