雙網卡 Linux 機器作為 NAT 閘道,讓內網 Windows 共享外網連線,是經典的網路實驗與中小企業低成本上網方案。本文以 Ubuntu 11.04(eth0 外網、eth1 內網)為例,完整記錄網卡配置、IP 轉發啟用、NAT 規則、開機自動化全流程。
| 角色 | 介面 | IP 設定 | 說明 |
|---|---|---|---|
| Ubuntu 閘道器 | eth0 (外網) | DHCP / 靜態公網 IP | 連接 Internet |
| Ubuntu 閘道器 | eth1 (內網) | 192.168.2.102/24 | 內網閘道 IP,無需閘道 |
| Win7 客戶端 | 單網卡 | 192.168.2.103/24 Gateway: 192.168.2.102 | 指向 Ubuntu eth1 |
/etc/network/interfacesauto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
# 或靜態:
# iface eth0 inet static
# address 203.0.113.10
# netmask 255.255.255.0
# gateway 203.0.113.1
auto eth1
iface eth1 inet static
address 192.168.2.102
netmask 255.255.255.0
# 內網介面不設 gateway!
套用:service networking restart 或 ifdown eth1 && ifup eth1。
控制台 → 網路連線 → 區域連線 → 內容 → IPv4:
IP: 192.168.2.103
遮罩: 255.255.255.0
閘道: 192.168.2.102
DNS: 8.8.8.8 / 114.114.114.114(或指向 Ubuntu 再由 Ubuntu 轉發)
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
eth0 為**外網介面**,內網封包經此介面出站時做來源位址偽裝。
# 1. 核心參數持久化
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
# 2. iptables 規則持久化(Ubuntu/Debian)
iptables-save > /etc/iptables.rules
# 編輯 /etc/network/if-pre-up.d/iptables
#!/bin/sh
iptables-restore < /etc/iptables.rules
chmod +x /etc/network/if-pre-up.d/iptables
# 或使用 iptables-persistent 套件
apt-get install iptables-persistent
# 安裝過程會詢問是否儲存當前規則
# Ubuntu 上測試
ping 8.8.8.8
# Win7 上測試
ping 192.168.2.102 # 內網閘道
ping 8.8.8.8 # 外網
nslookup www.google.com
在 Ubuntu 安裝 dnsmasq 或 bind9 提供內網 DNS 快取/轉發,Win7 DNS 指向 192.168.2.102,提升解析速度並可過濾廣告/惡意域名。
雙網卡 NAT 閘道三部曲:**網卡分工(一外一內) → 核心轉發開啟 → iptables MASQUERADE**。理解 POSTROUTING 鏈與 -o 外網介面 的對應關係,是避免「內網能 Ping 閘道卻上不了網」的關鍵。現代生產環境建議改用專用路由器/防火牆(OpenWrt、pfSense、MikroTik),但理解 Linux 核心網路轉發原理,仍是網路工程師的基本功。