1. 程式人生 > >雙網卡機器配置說明

雙網卡機器配置說明

network

在杭州機房裏有一部分機器擁有雙網卡,雙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


雙網卡機器配置說明