因為有特殊需求需跑10.x.x.x的網段,而又需要連internet,因公司有2台gateway,其中一台連internet,另一台連10.x.x.x網段,正常情況是設定是一張網卡綁2個ip,gateway設定為連internet的那台,然後加上static route連10.x.x.x就丟到另一台gateway,現在問題來了,有幾台電腦是用無線上網的,而無線基地台無法設定2組ip,所以也就無法把10.x.x.x丟到另一個gateway,而對外的那台gateway是linux,是否可以在linux底下用iptables設定2組NAT,就是原本跑internet還是跑intetnet,但是只要目的地是10.x.x.x的就在丟到另一台gateway上跑去10.x.x.x嘛?還是有其他更好的方式可供參考,謝謝。
iproute2 多重路由
iptables 防火牆
shell script 腳本程式設計
**************************************
假設閘道主機 3片網卡
eth0 對外網卡
eth1 對內網卡,192.168.0.0/24
eth2 對內網卡, 10.0.0.0/8
腳本範例參考:
註:
這個只是提供:語法、思路的參考,照貼一定行不通,要修改。
因為論壇貼程式碼會湖成一團,所以用貼圖的:


要複製的話,上面圖片的內容為以下:
複製到能語法高亮顯示的文字編輯器,去看,會比較清楚。
語言:shell scirpt
# 定義變數
LAN_1_IF=eth1
LAN_1_NET=192.168.0.0/24
LAN_2_IF=eth2
LAN_2_IP=10.0.0.254
LAN_2_NET=10.0.0.0/8
# 由 LAN_1 網卡進入封包,目的為 10.0.0.0/8,在路由前就貼上標籤 1010
iptables -t mangle -A PREROUTING -i $LAN_1_IF -d $LAN_2_NET -j MARK --set-mark 1010
# 刪除雙 LAN 用的 table 10 路由(初始化)
ip rule del table 10 2>/dev/null
# 設定 iproute2 多重路由,使用 table 10
# 貼有標籤 1010 的封包,使用此表處理路由
# 要往 LAN_1 網段發送的封包,走 LAN_1 網卡送出去
ip rule add fwmark 1010 table 10
ip route replace $LAN_1_NET dev $LAN_1_IF table 10
# 從 LAN_2 網段進入的封包,使用此表處理路由
# 要往 LAN_2 網段發送的封包,走 LAN_2 網卡送出去
ip rule add from $LAN_2_NET table 10
ip route replace $LAN__2_NET dev $LAN_2_IF table 10
# 路由表 10,預設閘道 LAN_2 網卡
ip route replace default via $LAN_2_IP dev $LAN_2_IF table 10
# 刪除 main(254號)路由表中,對內雙網卡多餘的路由規則,以避免路由錯亂
ip route del $LAN_2_NET dev $LAN_2_IF table 254 2>/dev/null
# 更新路由表快取,使新路由立刻生效
ip route flush cache
#####################################
# 另外你可能需要開放 iptable 防火牆,讓封包通過
# 允許已建立連線和回應的封包通過
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#設定哪些 port(service 服務)封包,可以通過 LAN_2 網卡
LAN_2_TCP="22 25 53 80 443 123 110 143 137 138 139 3128 10000"
LAN_2_UDP="53 123 137 138 139"
LAN_2_ICMP="0 3 8 11"
# 允許特定 TCP 埠號的新連線
for port in $LAN_2_TCP ; do
iptables -A INPUT -i $LAN_2_IF -p tcp --dport $port -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o $LAN_2_IF -p tcp --sport $port -m state --state NEW -j ACCEPT
done
# 允許特定 UDP 埠號的連出新連線
for port in $LAN_2_UDP ; do
iptables -A INPUT -i $LAN_2_IF -p udp --dport $port -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o $LAN_2_IF -p udp --sport $port -m state --state NEW -j ACCEPT
done
# 允特特定 ICMP TYPE 新連線
for type in $LAN_2_ICMP ; do
iptables -A INPUT -i $LAN_2_IF -p icmp -s $LAN_1_NET --icmp-type $type -j ACCEPT
iptables -A OUTPUT -o $LAN_2_IF -p icmp -d $LAN_1_NET --icmp-type $type -j ACCEPT
iptables -A INPUT -i $LAN_2_IF -p icmp -s $LAN_2_NET --icmp-type $type -j ACCEPT
iptables -A OUTPUT -o $LAN_2_IF -p icmp -d $LAN_2_NET --icmp-type $type -j ACCEPT
done