发布于2026-07-14 阅读(0)
扫一扫,手机访问
iptables 是 Linux 系统里配置内核防火墙的老牌工具,简单说,它就是系统网络流量的守门员,让你能精准控制每个数据包的来去方向。今天咱们聊聊怎么用它做 IP 地址转换,包括源地址转换(SNAT)和目的地址转换(DNAT)——这两个操作几乎是局域网共享上网、端口转发场景里的标配。

下面直接进入操作流程,几个关键步骤走一遍,基本就能上手:
默认情况下,Linux 内核并不允许数据包跨网络接口转发——你得手动把开关打开,否则后面的 NAT 规则形同虚设。操作很简单:编辑 /etc/sysctl.conf 文件,找到下面这行:
net.ipv4.ip_forward=1
如果文件里没有,直接添上。然后运行这条命令让配置立刻生效:
sysctl -p
值得注意的是,这一步很容易被忘记,但它偏偏是所有 NAT 操作的前提,千万别跳过去。
SNAT 要解决的是「数据包从内网出去时,把源 IP 改成公网 IP」的问题。举个例子,你想让局域网 192.168.1.0/24 内所有设备的对外访问,看起来都像是来自同一个公网地址 203.0.113.5,一条规则就能搞定:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.5
拆开来看:-t nat 是操作 nat 表;-A POSTROUTING 表示这条规则在路由器做出转发决策之后、数据包真正发出去之前生效;-s 192.168.1.0/24 匹配源地址为该网段的数据包;-o eth0 指定出口网卡;最后的 --to-source 203.0.113.5 就是要把源 IP 换成这个公网地址。一句话:数据包从内网钻出来时,披上了公网的外衣。
DNAT 恰好相反——它改变的是数据包的目的地址。典型场景是:你的服务器在公网上有一个 IP,但真实服务跑在局域网的一台机器上,你需要把访问公网 IP 的流量“偷偷”转到内网那台机器。比如想把打到 203.0.113.5:80 的流量转给内网 192.168.1.10:80:
iptables -t nat -A PREROUTING -d 203.0.113.5 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
注意这里用的是 PREROUTING 链——它在路由器做路由决策之前先截住数据包,直接把目的地址和端口改了。参数 -d 203.0.113.5 匹配目的地址,-p tcp --dport 80 限定 TCP 协议和 80 端口,--to-destination 192.168.1.10:80 就是你要转到的内网目标。这样当外网用户访问你的公网 IP 时,流量会静静地被引导到内网服务器上,用户察觉不到任何区别。
规则配置好之后,如果不主动保存,系统一重启就全丢了——这一点吃过亏的老手都深有体会。保存方式因发行版而异:
在 Debian/Ubuntu 等基于 Debian 的系统上,通常用:
iptables-sa ve > /etc/iptables/rules.v4
在 CentOS/RHEL 等基于 Red Hat 的系统上,可以直接用服务命令:
service iptables sa ve
或者手动保存到标准位置:
iptables-sa ve > /etc/sysconfig/iptables
不管用哪种方式,核心思路是一致的:把当前的内存中的规则集导出成一个文件,下次开机时自动加载。如果你的发行版没有自带持久化机制,可以装一个 iptables-persistent 工具,或者把恢复命令写进启动脚本里。具体命令以你实际系统为准,但原理就这么简单。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8