Для меня давно уже возникала необходимость подружить сервер с двумя провайдерами и локальной сетью. И вот вчера проблема стала весьма актуальной.
Итак, имеем:
eth0 – 192.168.0.0/24 – LAN
eth1 – 13.13.13.13/24 – ISP#1
eth2 – 6.6.6.6/24 – ISP#2
ISP#2 отдает IP через DHCP
ISP#1 – статика (на самом деле DHCP но удалось договориться на статику)
LAN – его надо NAT’ить в мир через ISP#1 (кое-что можно отправлять и через ISP#2, это будет показано).
Так как при использовании dhclient сетевые настройки не заменялись получеными мы это запретим в файле /etc/dhcp3/dhclient.conf:
Отлично. Теперь мы получим лишь IP и шлюз. Теперь в файле /etc/iproute2/rt_tables добавим таблицу маршрутизации ISP2:
Теперь надо заносить получаемые значения шлюза в эту таблицу, и определить маршрут, по которому пакеты будут попадать в эту таблицу. Для этого напишем два скрипта:
/etc/dhcp3/dhclient-enter-hooks.d/duallink
/sbin/ip route flush table ISP2
/sbin/iptables -F PREROUTING -t mangle
/sbin/ip route flush cache
ip rule show | grep ISP2 | while read -r line ; do
ip rule del `echo $line | cut -d ':' -f2`
done
prefix=`echo $new_ip_address | cut -d . -f 1-2`
if [ x$prefix == 'x192.168' ]; then
exit
fi
#ISP1
/sbin/ip route add 13.13.13.13/24 dev eth1 table ISP2
/sbin/ip route add 172.16.0.0/16 dev eth1 table ISP2
#LAN
/sbin/ip route add 192.168.0.0/24 dev eth0 table ISP2
#ISP2
/sbin/ip rule add from $new_ip_address table ISP2
/sbin/ip rule add fwmark 0x2 table ISP2
#А тут можно пометить пакеты, которые уйдут через ISP2
/sbin/iptables -I PREROUTING -t mangle -i eth0 -p tcp --dport 443 -j MARK --set-mark 2
/sbin/iptables -I PREROUTING -t mangle -i eth0 -p tcp --dport 80 -j MARK --set-mark 2
fi
isp2_gateway=$new_routers
new_routers=""
/etc/dhcp3/dhclient-exit-hooks.d/duallink
my_new_network=`ipcalc -n $new_ip_address/$new_subnet_mask | grep Network | cut -b 12-32`
/sbin/ip route add $my_new_network dev $interface table ISP2
/sbin/ip route add default via $isp2_gateway table ISP2
fi
Да, не забудьте установить ipcalc!
Собственно, все. Теперь осталось воткнуть ISP#2 и посмотреть на получившуюся картину командами
ip route show
ip route show table ISP2
статья собрана по материалам
Configuring several Internet connections on the same Computer
Rules – routing policy database
Appendix D. IP Route Management
и других перелистаных в процессе отладки.
На убунтовской вики упоминается /usr/local/sbin/flush_rules.pl, но что внутри этого скрипта – автор умолчал.
Все замечания приветствуются!