
一、什么是 NAT 转换
NAT(Network Address Translation,网络地址转换) 是一种常用的网络技术,用于在不同网络之间进行地址映射。
它常用于:
让内网主机共享公网 IP 上网;
实现内外网流量中转;
用于 VPN、ZeroTier 等虚拟网卡的转发通信。
在 Ubuntu 系统中,常通过 iptables 或 nftables 实现 NAT 转换。
二、实验环境说明
本教程以如下场景为例:
目标:
让 zt27y2ad66 网段的主机 能通过 Ubuntu 的 ens3 网卡 访问外网。
三、安装 iptables
在 Ubuntu 18.04~24.04 全系列中,都可以使用以下命令安装:
sudo apt update
sudo apt install iptables -y
安装完成后,可以使用以下命令查看版本和当前规则:
sudo iptables -V
sudo iptables -L -n
四、启用 NAT 转换功能
执行以下命令添加 NAT 规则:
# 1️⃣ 启用源地址伪装(MASQUERADE),允许内网主机通过 ens3 出口访问外网
sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
# 2️⃣ 允许外网返回流量(RELATED, ESTABLISHED)通过
sudo iptables -A FORWARD -i ens3 -o zt27y2ad66 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 3️⃣ 允许内网数据通过 NAT 转发到外网
sudo iptables -A FORWARD -i zt27y2ad66 -o ens3 -j ACCEPT
这些规则的含义如下:
💡 提示:
如果你的外网网卡名称不是ens3,可以使用ip a命令查看并修改对应网卡名。
五、启用 IP 转发功能
Linux 默认不允许内核进行路由转发,需要手动开启:
sudo vim /etc/sysctl.conf
找到或添加如下行:
net.ipv4.ip_forward=1
立即生效:
sudo sysctl -p
验证:
cat /proc/sys/net/ipv4/ip_forward
如果输出 1,说明转发功能已开启。
六、保存 iptables 规则(开机自动加载)
默认情况下,iptables 规则在系统重启后会丢失。
为让规则永久生效,可使用以下命令保存:
sudo apt install iptables-persistent -y
sudo netfilter-persistent save
sudo netfilter-persistent reload
或使用手动方式:
sudo iptables-save | sudo tee /etc/iptables/rules.v4
⚠️ 注意:
规则文件路径
/etc/iptables/rules.v4必须存在;若使用 systemd 服务,可在
/etc/systemd/system/iptables.service中设置开机加载。
七、验证 NAT 是否生效
1️⃣ 查看 NAT 规则是否存在:
sudo iptables -t nat -L -n
2️⃣ 查看内网主机是否能 ping 通外网:
ping 8.8.8.8
3️⃣ 使用 tcpdump 抓包验证:
sudo tcpdump -i ens3 icmp
可以看到内网主机的 ICMP 请求已通过 NAT 转换为外网流量。
八、可选:删除 NAT 规则
如果需要移除刚才的规则,可执行:
sudo iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
sudo iptables -D FORWARD -i ens3 -o zt27y2ad66 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -D FORWARD -i zt27y2ad66 -o ens3 -j ACCEPT
九、总结
📘 拓展阅读:
iptables 官方文档
nftables 官方迁移指南
Ubuntu 22.04 开始默认支持 nftables,可通过
sudo update-alternatives --config iptables切换。
评论区