Это для клиентов:
/sbin/ip route add 192.168.0.0/24 dev eth0 src 192.168.0.3 table T3
/sbin/ip route add IP1/IP1_MASK dev eth1 src IP1 table T3
/sbin/ip route add IP2/IP2_MASK dev eth2 src IP2 table T3
/sbin/ip route add 127.0.0.0/8 dev lo table T3
/sbin/ip route add default via GW1 table T3
/sbin/ip rule add from 192.168.0.0/24 table T3
в этой табличке будем переключать через какой канал их пускать.
Скрипт (пример, внимательно разбиратья с ипишниками и интерфейсами), также есть чуток лишнего, т.к. у меня разные пользователи сидят через разные каналы, а вслучае падения все перебрасываются на какой-нибудь из:
#!/bin/bash
ping -c 3 213.180.204.8 -I eth1 >> /dev/null
if [ $? -ne 0 ]; then
echo "Not ping from PROV2 ! Try switch channel to PROV1 !"
ping -c 3 213.180.204.8 -I eth2 >> /dev/null
if [ $? -ne 0 ]; then
echo "Not ping from PROV2 ! 3,14zdec!"
else
/sbin/ip route replace default via GW1 table T3
/sbin/ip route replace default via GW1
/sbin/ip route flush cache
/sbin/iptables-restore /etc/iptables.nat.PROV1
fi
else
ping -c 3 213.180.204.8 -I eth2 >> /dev/null
if [ $? -ne 0 ]; then
echo "Not ping from PROV1! Try switch channel to PROV2!"
/sbin/ip route replace default via GW2 table T3
/sbin/ip route replace default via GW2
/sbin/ip route flush cache
/sbin/iptables-restore /etc/iptables.nat.PROV2
else
GRP1=`/sbin/ip ro show table T4|grep -c 'default via GW2'`
GRP2=`/sbin/ip ro show table T5|grep -c 'default via GW1'`
if [ $GRP1 -eq 0 ] || [ $GRP2 -eq 0 ]; then
echo "Work normal!"
/sbin/ip route replace default via GW1 table T3
/sbin/ip route replace default via GW1
/sbin/ip route flush cache
/sbin/iptables-restore /etc/iptables.nat
fi
fi
fi
Пример /etc/iptables.nat.PROV1:
# Generated by iptables-save v1.2.7a on Sat Jun 4 19:25:57 2005
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to-source IP1
COMMIT
# Completed on Sat Jun 4 19:25:57 2005