中小企業常見到申請兩條以上的 WAN 線路(Wide Area Network),而在這種情形下,為整合應用多條線路,會採用多 WAN 埠防火牆主機,本文主要介紹如何使用 Linux 實做「 2 WAN 1 LAN 之 NAT 主機」(進階部份可以再延伸加入 DMZ 網路)。
測試主機一台有著三張或四張網路介面卡,規劃如下表:
| 介面 | 用途 | IP / 遮罩 | 閘道 | 註解 |
| eth0 | WAN 1 | 59.124.89.128/24 | 59.124.89.254 | 59.124.89.254 是 NAT 主機預設閘道 此閘道供大部分客戶端電腦上網使用 |
| eth1 | WAN 2 | 61.222.192.171/29 | 61.222.192.169 | 61.222.192.169 提供特定客戶端 (IP 介於 172.16.2.0~172.16.2.255) 上網使用線路 |
| eth2 | DMZ | 192.168.2.254/24 | 暫時沒用到 | |
| eth3 | LAN | 172.16.10.1/16 | 客戶端介面 |
其中「 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 來上網。

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

接下來以 Fedora Core 4 為例,實做 2 WAN 路由主機。
第一步■設定各個網路介面 IP 位址,並重新啟動網路
設定 IP 後可使用指令「 ip addr show 」看到設定結果
使用「 service network restart 」指令來重新啟動網路


第二步■設定主機預設閘道,並重新啟動網路
設定預設閘道後可使用指令「 ip route show 」看到設定結果
其中 default 那一行即是預設閘道

第三步■設定主機允許封包轉送,並重新啟動網路
要成為 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 」顯示方才設定好的結果

第五步■設定 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 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 」觀察設定後情形

第七步■客戶端分別使用 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 上網情形

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

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