1. 程式人生 > >Linux 系統雙網絡卡實現內網埠轉發

Linux 系統雙網絡卡實現內網埠轉發

1. 環境:
(1) 一臺 Linux 系統主機,此機器有雙網絡卡:eth0 連線外網,eth1 連線內網。假定通向外網的 eth0 的連線資訊如下(可以是靜態 IP,也可以是 DHCP):
inet addr: 192.168.3.100
Gateway: 192.168.3.1
Nameserver: 192.168.3.2
通向內網的 eth1 的資訊如下(此處只需要設定 IP 地址):
inet addr: 192.168.0.100
(2) 一臺內網客戶端主機,Windows/Linux/MacOSX 都可以。以下示例中,假定其網路連線資訊為:
inet addr: 192.168.0.11
Gateway: 192.168.0.100
Nameserver: 192.168.3.2 (此處必須是作為 NAT 伺服器的 Linux 主機的外網 DNS 伺服器地址)
(3) 一臺交換機或者路由器,用於構建內網。


2. Linux系統啟用埠轉發(NAT)功能:
(a) 一般的方法:執行命令
echo 1 > /proc/sys/net/ipv4/ip_forward
(b) 對於 SuSE,可以使用 yast 來設定,方法是啟用 yast -> Network Devices -> Network Settings -> Routing -> Enable IPv4 Forwarding
(c) 檢查埠轉發是否正確啟用,可以執行命令
cat /proc/sys/net/ipv4/ip_forward
如果返回結果為 1,則代表埠轉發已經啟用;若返回 0,則表示埠轉發未啟用。


3. 配置 NAT 規則:
(1) 配置 NAT 伺服器,執行命令
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
其中 192.168.0.0 表示 192.168.0.x 的整個網路。MASQUERADE 則表示從 NAT 伺服器的網絡卡上自動獲取當前的 IP 地址來做埠轉發。否則,基於目標的網路地址轉換模式(即 DNAT)需要在每次 NAT 伺服器連線外網的 IP 地址變更的時候重新配置埠轉發。也可以使用源地址目標轉換模式(即 SNAT),命令是
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source 192.168.3.100
顯然這種方式也會依賴命令中指定的通向外網的 IP 地址,所以仍然不夠靈活。推薦使用第一種方式。
關於 SNAT 和 DNAT 的更多內容,可以參考
http://server.zdnet.com.cn/server/2008/0317/772069.shtml

(2) 允許埠轉發,執行命令
iptables -A FORWARD -i eth1 -j ACCEPT
此命令將允許經過 eth1 網絡卡(連線內網)的所有資料包通向外網的轉發。


4. 對於SuSE(如果作為 NAT 伺服器的 Linux 主機是 SuSE 系統的話),還需要配置防火牆:
進入 yast -> Security and Users -> Firewall -> Interfaces 中連線外網的 eth0 網絡卡配置為 External Zone,而連線內網的 eth1 網絡卡配置為 Internal Zone。然後在 Masquerading 中啟用 Masquerade Networks


5. 一些需要用到的命令:
(1) 檢視當前網路連線的 IP 地址以及 MAC 地址等等,但是無法顯示閘道器以及 DNS 伺服器地址:
ifconfig
(2) 檢視當前網路連線的 DNS 伺服器地址:
cat /etc/resolv.conf
(3) 檢視當前網路連線的閘道器:
route
或者
netstat -nr