侧边栏壁纸
  • 累计撰写 27 篇文章
  • 累计创建 4 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

一文搞懂 Ubuntu NAT 转换:从原理到实战配置

陳小航
2025-10-26 / 0 评论 / 0 点赞 / 2 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

扫码_搜索联合传播样式-标准色版.png
一、什么是 NAT 转换

NAT(Network Address Translation,网络地址转换) 是一种常用的网络技术,用于在不同网络之间进行地址映射。
它常用于:

  • 让内网主机共享公网 IP 上网

  • 实现内外网流量中转

  • 用于 VPN、ZeroTier 等虚拟网卡的转发通信

在 Ubuntu 系统中,常通过 iptablesnftables 实现 NAT 转换。


二、实验环境说明

本教程以如下场景为例:

网络接口

网络类型

说明

ens3

外网网卡

可访问互联网

zt27y2ad66

内网/虚拟网卡

ZeroTier 或内网接口

目标:
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

这些规则的含义如下:

命令

功能

POSTROUTING -j MASQUERADE

启用 NAT 源地址伪装

--state RELATED,ESTABLISHED

允许已建立的连接返回流量

FORWARD

启用转发功能,让两网卡之间互通

💡 提示:
如果你的外网网卡名称不是 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

九、总结

项目

配置说明

NAT 作用

让内网共享公网访问

关键命令

iptables -t nat -A POSTROUTING -j MASQUERADE

转发开关

net.ipv4.ip_forward=1

永久保存

iptables-persistentiptables-save

验证方法

pingtcpdumpiptables -L


📘 拓展阅读:

  • iptables 官方文档

  • nftables 官方迁移指南

  • Ubuntu 22.04 开始默认支持 nftables,可通过 sudo update-alternatives --config iptables 切换。

0

评论区