因為 10M/2M 的網路 Gateway 我在 Firewall 中寫固定的,變更後造成無法連線!!
正常是不會 Default Gateway 只有一個! 就不用寫在 Firewall 設定裡面!
其實網路架構很簡單,只是又在 Gentoo Linux 上再以 PPPoE 播接取得一個固定 IP:
Internet <-[ 10M/2M ]-> Wireless AP <-[ Wireless ]-> Gentoo Linux Server (PPPoE)
原來的 wlan0 會有一個 default gateway,PPPoE 播接的又會有另外一個!
這樣的時候就要做 Multi Route 的設定,不然無法連線,我是用 Shorewall 來做 Firewall 的,其實也就是用 Shorewall 設定一些規則,他會產生 iptables 的條件,設定就比較簡單不用記 iptables 的指令,一般策略(policy)是設定都拒絕在一個一個服務的開,那在 Shrewall 有一些基本設定都設好後,只要在規則(rules)設定像:
HTTP/ACCEPT all fw
就可以開 80 port 從所有來源都可以到 Firewall(fw)也就是本機,他就會看你有幾個網路區域(Zones)自動產生 iptables 的指令如:
-A loc12fw -p tcp -m tcp --dport 80 -m comment --comment "HTTP" -j ACCEPT
-A loc2fw -p tcp -m tcp --dport 80 -m comment --comment "HTTP" -j ACCEPT
也可以利用 Shorewall 來幫忙設定多路由(multi route),不過這塊可能有點複雜,我也說不清楚!但怕 hinet 再改我的 Default Gateway,寫了一個 Shell 來檢查:
#!/bin/bash
FWPATH=/etc/shorewall
PPPGW=`ifconfig ppp0 | grep "P-t-P" | awk '{print $3}' | awk 'BEGIN {FS=":"} {print $2}'`
FWGW=`cat ${FWPATH}/providers | grep ppp0 | awk '{print $6}'`
# Debug need be mark cp ..
##FWGW="192.168.1.254"
if [ -n $PPPGW -a -n $FWGW -a $PPPGW != $FWGW ]
then
cat ${FWPATH}/masq | sed "s/${FWGW}/$PPPGW/" > /tmp/masq
/bin/cp -b /tmp/masq ${FWPATH}/
cat ${FWPATH}/providers | sed "s/${FWGW}/$PPPGW/" > /tmp/providers
/bin/cp -b /tmp/providers ${FWPATH}/
/etc/init.d/shorewall restart
fi
並以排程來執行,如果發現 Gateway 跟 Firewall Gateway 就取代 firewall 的 Gateway!!