天天看點

雙網卡機器配置說明

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

<code>iptables -A INPUT -i eth0 -d 223.5.20.36 -j CONNMARK --set-mark 1</code>

注:實際上隻需要對一次連接配接的第一個包打标記就行,即下面這樣也行:

<code>iptables -A INPUT -i eth0 -d 223.5.20.36 -m state --state NEW -j CONNMARK --set-mark 1</code>

b.當響應資料包傳回時,利用connmark的連接配接追蹤功能給響應包也打上相同的标記。

<code>iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark</code>

注:必需在 mangle 表執行 connmark 标記恢複。因為在mangle表之後會進行一次 reroute check 重新路由,這使得下一步得以發生。

c.配置政策路由,讓打了标記(fwmark 1)的包全部走 eth0 接口。

<code>echo 200 public &gt;&gt; /etc/iproute2/rt_tables</code>

<code>ip rule add table public</code>

<code>ip route add table public default via 223.5.20.1 dev eth0                               本文轉自 Bruceweien 51CTO部落格,原文連結:http://blog.51cto.com/bruceweien/1932409</code>