Казалось бы классика, котора везде описана, но не арбайтен.
Подскажите, плз, если кто ошибку найдет
3 интерфейса.
eth0 в свою локалку сеть 192.168.1.0/24 адрес на интерфейсе 192.168.1.1
eth1 прямой в инет с реальным адресом 212.69.1.0/27 адрес на интерфейсе 212.69.1.2 шлюз 212.69.1.1
eth2 в соседнюю локалку, но с выходом в инет 10.0.0.0/8 адрес на интерфейсе 10.103.2.111 шлюз 10.103.2.2По умолчанию со всех адресов выход через eth1, но хочу вытащить один адрес 192.168.1.10 через второй канал, eth2.
/sbin/ip route add 10.0.0.0/8 via 10.103.2.2 table main
/sbin/ip route add default via 212.69.1.1 dev eth1 table main/sbin/ip rule add from 192.168.1.10 table 200
/sbin/ip route add default via 10.103.2.2 dev eth2 table 200/sbin/ip route flush cache
Все Ок, но адрес 192.168.1.10 не хочет через 10.0.0.0 в инет идти, хоть тресни. Как токо rule добавляю - вообще в инет ходить отказывается. Правило убираю - само собой ходит со всеми. Стоит стандартный MonMotha's Firewall 2.3.8 на базе iptables. ПРавила по маскарадингу в нем формируются так:
INET_IFACE="eth1 eth2"
MASQ_LAN="\
192.168.1.0/24\
"
for inetdev in ${INET_IFACE} ; do
for subnet in ${MASQ_LAN} ; do
iptables -t nat -A POSTROUTING -s ${subnet} -o ${inetdev} -j MASQUERADE
done
done
Вроде все.
Вместо MASQUERADE попробуй SNAT (-o ${inetdev} обязательно) и в table 200 добавь все маршруты к соседним сетям (локалки, выделенные провайдером сети).