По-долу можете да видите скрипт за 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
Аз мога да ви отговоря—машината не ще по никакъв начин да препраща пакети от един интерфейс на друг и си пълни логовете със съобщения от вида:
Apr 15 11:33:17 mincho kernel: Neighbour table overflow.
Apr 15 11:33:22 mincho kernel: printk: 8516 messages suppressed.
Като се има предвид, че лично аз съм писал въпросния скрипт (макар и преди повече от 2 години), ми отне около 15 минути, докато разбера какво става, и, което е по-важното, да го оправя. ![]()