實做多條 WAN 線路 NAT 主機

作者:徐秉義(Albert Hsu)

中小企業常見到申請兩條以上的 WAN 線路(Wide Area Network),而在這種情形下,為整合應用多條線路,會採用多 WAN 埠防火牆主機,本文主要介紹如何使用 Linux 實做「 2 WAN 1 LAN 之 NAT 主機」(進階部份可以再延伸加入 DMZ 網路)。

測試環境介紹

測試主機一台有著三張或四張網路介面卡,規劃如下表:

 

介面用途IP / 遮罩閘道註解
eth0WAN 159.124.89.128/2459.124.89.25459.124.89.254 是 NAT 主機預設閘道
此閘道供大部分客戶端電腦上網使用
eth1WAN 261.222.192.171/2961.222.192.16961.222.192.169 提供特定客戶端
(IP 介於 172.16.2.0~172.16.2.255)
上網使用線路
eth2DMZ192.168.2.254/24 暫時沒用到
eth3LAN172.16.10.1/16 客戶端介面

Note:遮罩(Netmask) 24 代表 255.255.255.0、 29 代表 255.255.255.248 、16 代表 255.255.0.0 與一般網路表示方法無異。

其中「 DMZ 介面」在本文中沒有使用到,若讀者環境只有三張網路介面卡,就不需理會 DMZ 介面。

另外主機預設閘道為「 59.124.89.254 」( eth0 介面),是給客戶端 IP 為 172.16.0.0/16 上網所使用 WAN 1 線路,較特別部份若客戶端 IP 介於 172.16.2.0~172.16.2.255,則使其經由閘道「 61.222.192.169 」( eth1 介面) WAN 2 來上網。

2 wan 網路圖檔

Note:務必測試各張網路卡是否正確運作正常,以避免硬體問題而影響運作。

在 Linux 下使用「 ifconfig 」指令『查詢 IP 』與『觀察網路介面運作』是常見用法,另外介紹「 mii-tool 」指令,用來觀察『線路是否有接上』、『跑的是 10 / 100 / 1000 Mbit 』與『全雙工(FD)還是半雙工(HD)運作』等等。

Tips:FD 是 Full Duplex (全雙工)、HD 是 Half Duplex (半雙工)。

mii-tool 命令圖檔

實做開始

接下來以 Fedora Core 4 為例,實做 2 WAN 路由主機。

第一步■設定各個網路介面 IP 位址,並重新啟動網路

設定 IP 後可使用指令「 ip addr show 」看到設定結果

使用「 service network restart 」指令來重新啟動網路

Note:Fedora Core 4 網路相關設定檔案位於「 /etc/sysconfig/network-scripts/ 」目錄下,若以 eth0 來說,設定檔案名稱為 ifcfg-eth0 依此類推

ip addr show 圖檔

ethX restart 圖檔

第二步■設定主機預設閘道,並重新啟動網路

設定預設閘道後可使用指令「 ip route show 」看到設定結果
其中 default 那一行即是預設閘道

ip route show 圖檔

第三步■設定主機允許封包轉送,並重新啟動網路

要成為 NAT 主機,必須啟用封包轉送功能,設定封包轉送在 Fedora 需編輯「 /etc/sysctl.conf 」找到「 net.ipv4.ip_forward 」將 0 (不轉送)改成 1 (轉送)並重新啟動網路即可,可使用「 cat /proc/sys/net/ipv4/ip_forward 」指令來檢查是否已經設定成轉送

允許封包轉送圖檔

第四步■規劃客制 route table ,並將原來路由表設定過去(除了預設閘道外)

可使用第二步驟指令「 ip route show 」顯示原來路由表,再使用以下指令將路由資訊寫入 table 7

ip route add 61.222.192.168/29 dev eth1 proto kernel scope link src 61.222.192.171 table 7
ip route add 59.124.89.0/24 dev eth0  proto kernel  scope link  src 59.124.89.128 table 7
ip route add 192.168.2.0/24 dev eth2  proto kernel  scope link  src 192.168.2.254 table 7
ip route add 172.16.0.0/16 dev eth3  proto kernel  scope link  src 172.16.10.1 table 7
ip route add default via 61.222.192.169 table 7

最後一行指令的閘道為 61.222.192.169 是不同於之前預設閘道 59.124.89.254

可使用指令「 ip route show table 7 」顯示方才設定好的結果

ip route add 圖檔

Note:169.254.0.0/16 網段可以不用加入,因為那是 Windows 在無 dhcp Server 發配 IP 下,所使用網段。

Tips:指令中 table 後面的『 7 』只是一個號碼,也可以使用名稱方式,可參考設定檔「 /etc/iproute2/rt_tables 」看到『編號對應到 table 名稱』的預設值

第五步■設定 iptables NAT 部份

使用指令
「 iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 59.124.89.128 」
「 iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 61.222.192.171 」
封包若從 eth0 出去則改寫來源位址(Source NAT)成 59.124.89.128
封包若從 eth1 出去則改寫來源位址成 61.222.192.171
可使用指令
「 iptables -t nat -L 」、「 iptables -t nat -L -v 」觀察設定後情形

iptables NAT 圖檔

第六步■設定 iptables Mangle 部份

使用指令
「 iptables -t mangle -A PREROUTING -s 172.16.2.0/24 -j MARK --set-mark 7 」
將客戶端來源 IP 位址為 172.16.2.0~172.16.2.255 上網路由規則給 table 7 管理(走閘道 61.222.192.169)
同樣可使用指令
「 iptables -t mangle -L 」、「 iptables -t mangle -L -v 」觀察設定後情形

iptables Mangle 圖檔

第七步■客戶端分別使用 172.16.2.0~172.16.2.255 與 172.16.0.0/16 的其他 IP 來測試

使用指令
「 traceroute -n 168.95.1.1 」來追蹤到 168.95.1.1 一路上的路由器 IP,並發現 IP 若是介於 172.16.2.0~172.16.2.255 會使用 WAN 2 上網,其他 172.16.0.0/16 的 IP 則使用 WAN 1 上網。

客戶端主機 IP 為 172.16.2.101 上網情形

172.16.2.101 上網圖檔

客戶端主機 IP 為 172.16.9.101 上網情形

172.16.9.101 上網圖檔

進階學習:iptables 預設有 3 個 tables(filter、nat 與 mangle)共 11 個 chain ,其中 filter table 主司『過濾』、nat table 主司 NAT 而 mangle 照字面上解釋就不容易翻譯,但這次範本就有用到 mangle table,另外關於 chain 的名稱有 PRE(之前)與 POST(之後)意思分別為 PREROUTING(路由之前)與 POSTROUTING(路由之後)

結語

Linux 一直以來在 embedded 市場(嵌入式設備)上有著極高的佔有率,尤其又以網路設備更是琳瑯滿目,本文中介紹 Linux 成為 2 WAN 的 NAT 只是冰山一角,其實 Linux 也可以做負載平衡設備、802.1q VLan 與 RADIUS 認證 Server 等等,期待各位讀者細細研究,將 Linux 功能發揮到淋漓盡致。

Valid XHTML 1.0! Valid CSS! Get Firefox

Creative Commons License
This site is licensed under a Creative Commons Attribution 2.5 Taiwan License.