雙網卡機器配置說明
在杭州機房裏有一部分機器擁有雙網卡,雙IP,這種機器的網絡需要特殊配置。
例如:客服工作臺有一臺機器有兩塊網卡,分別是 公網ip 223.5.20.36(eth0) 和 內網ip 192.168.220.41(eth1)。
需要註意的是,這臺機器的網關是 192.168.0.1。這會導致一個問題,當一個外部請求訪問它的公網地址 223.5.20.36 時,響應數據包會從內部網絡接口 eth1 出去。請求端接受到的包的源 ip 就不再是 223.5.20.36 了,這種情況響應包通常會被直接丟棄,導致通信失敗。
解決這個問題有兩種方法:
1. 簡單直接的方式:把網關設置為公網ip的網關, 如 223.5.20.1。
2. 但假如處於某些原因,不想更改網關。還有一種比較麻煩一些的方式:iptables的CONNMARK模塊 + 策略路由。具體實現如下:
a.首先是給 所有 從公網接口eth0進來的包都打上一個標記(fwmark)。
iptables -A INPUT -i eth0 -d 223.5.20.36 -j CONNMARK --set-mark 1
註:實際上只需要對一次連接的第一個包打標記就行,即下面這樣也行:
iptables -A INPUT -i eth0 -d 223.5.20.36 -m state --state NEW -j CONNMARK --set-mark 1
b.當響應數據包返回時,利用connmark的連接追蹤功能給響應包也打上相同的標記。
iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark
註:必需在 mangle 表執行 connmark 標記恢復。因為在mangle表之後會進行一次 reroute check 重新路由,這使得下一步得以發生。
c.配置策略路由,讓打了標記(fwmark 1)的包全部走 eth0 接口。
echo 200 public >> /etc/iproute2/rt_tables
ip rule add table public
ip route add table public default via 223.5.20.1 dev eth0
雙網卡機器配置說明