По-долу можете да видите скрипт за policy маршрутизиране по source адрес към два шлюза. Познайте какво се случва, когато се изпълни скрипт на GNU/Linux маршрутизатор със само един шлюз.
#!/bin/sh
ip="/sbin/ip"
DTABLE1=101 DTABLE2=102
STABLE="main"
fw1="192.168.100.1"
fw1_nets="10.10.128.0/22 \
10.10.132.0/22 \
10.10.136.0/21 \
10.10.156.0/22 \
10.10.188.0/22"
fw2="192.168.100.8"
fw2_nets="10.10.144.0/22 \10.10.148.0/22 \ 10.10.152.0/22 \ 10.10.185.0/22 \ 10.10.186.0/22 \ 10.10.187.0/22"
$ip route flush table $DTABLE1 $ip route show table $STABLE | grep -Ev
'^default' | grep '10.10' \ | while read ROUTE ; do $ip route add table
$DTABLE1 $ROUTE done
$ip route flush table $DTABLE2 $ip route show table $STABLE | grep -Ev
'^default' | grep '10.10'\ | while read ROUTE ; do $ip route add table $DTABLE2
$ROUTE done
# CMTS1,5
$ip route add table $DTABLE1 default via $fw1 for net in $fw1_nets; do $ip rule
add from $net table $DTABLE1; done
# CMTS2,3,4
$ip route add table $DTABLE2 default via $fw2; for net in $fw2_nets; do $ip
rule add from $net table $DTABLE2; done
$ip route flush cache
Аз мога да ви отговоря - машината не ще по никакъв начин да препраща пакети от един интерфейс на друг и си пълни логовете със съобщения от вида:
mincho kernel: printk: 8516 messages suppressed.
Като се има предвид, че лично аз съм писал въпросния скрипт (макар и преди повече от 2 години), ми отне около 15 минути, докато разбера какво става, и, което е по-важното, да го оправя. :)