配置前的环境准备
在正式配置NAT网关之前,需要确认Linux服务器满足以下条件:服务器至少有两个网络接口,一个连接公网(通常称为外网网卡,比如eth0),一个连接内网(通常称为内网网卡,比如eth1);服务器已经可以正常访问公网,内网网段的IP规划已经完成,比如内网使用192.168.10.0/24网段。同时需要确认系统已经安装了iptables工具,大部分主流Linux发行版默认会预装该工具,如果没有安装可以通过系统包管理器进行安装。

开启Linux内核IP转发功能
NAT网关的核心依赖Linux内核的IP转发功能,默认情况下该功能是关闭的,需要手动开启。可以通过临时开启和永久开启两种方式配置。
临时开启IP转发
执行以下命令可以临时开启IP转发,重启后会失效:
# 临时开启IPv4转发 echo 1 > /proc/sys/net/ipv4/ip_forward # 验证是否开启成功,输出1表示已开启 cat /proc/sys/net/ipv4/ip_forward
永久开启IP转发
如果需要配置永久生效,需要修改系统内核参数配置文件:
# 编辑sysctl配置文件 vim /etc/sysctl.conf # 在文件末尾添加以下内容,如果已有该配置则修改为1 net.ipv4.ip_forward = 1 # 使配置生效 sysctl -p
配置iptables的NAT规则
开启IP转发后,需要通过iptables配置NAT转换规则,让内网流量经过服务器时转换为公网IP发出。
确认网卡名称
先通过命令确认外网网卡和内网网卡的名称,避免配置错误:
# 查看所有网卡信息 ip addr
添加SNAT规则
假设外网网卡为eth0,内网网段为192.168.10.0/24,外网网卡的公网IP为服务器实际获取的公网地址,执行以下命令添加SNAT规则:
# 清空现有的NAT表规则(首次配置可选,生产环境谨慎操作) iptables -t nat -F # 添加POSTROUTING链的SNAT规则,将内网网段流量转换为eth0的IP发出 iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j SNAT --to-source 外网网卡公网IP # 如果外网IP是动态获取的,可以使用MASQUERADE代替SNAT,无需指定具体IP # iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
配置FORWARD链规则
需要允许内网和外网之间的转发流量通过,执行以下命令:
# 允许内网到外网的转发 iptables -A FORWARD -s 192.168.10.0/24 -o eth0 -j ACCEPT # 允许外网到内网的已建立连接和相关连接转发 iptables -A FORWARD -d 192.168.10.0/24 -m state --state ESTABLISHED,RELATED -i eth0 -j ACCEPT
验证规则是否生效
执行以下命令查看已配置的NAT规则:
# 查看NAT表的所有规则 iptables -t nat -L -n -v # 查看FILTER表的FORWARD链规则 iptables -L FORWARD -n -v
规则持久化配置
iptables的规则默认重启后会丢失,需要配置持久化保存,不同发行版的持久化方式略有区别。
CentOS/RHEL系统
# 安装iptables-services工具 yum install -y iptables-services # 保存当前规则 service iptables save # 设置iptables开机自启 systemctl enable iptables
Ubuntu/Debian系统
# 安装iptables-persistent工具 apt-get install -y iptables-persistent # 安装过程中会提示是否保存当前规则,选择是即可 # 后续更新规则后执行以下命令保存 iptables-save > /etc/iptables/rules.v4
内网客户端配置
NAT网关配置完成后,内网设备需要配置正确的网络参数才能通过网关上网:将内网设备的默认网关设置为Linux服务器的内网网卡IP,DNS设置为公共DNS或者内网可用的DNS服务器。比如内网网卡IP为192.168.10.1,内网设备的网关就配置为192.168.10.1,配置完成后可以测试访问公网地址验证是否生效。
# 内网设备测试连通性 ping -c 4 ipipp.com # 测试网页访问 curl ipipp.com
常见问题说明
- 如果内网设备无法上网,先检查服务器的ip_forward是否开启,再检查iptables规则是否配置正确,网卡名称是否匹配。
- 如果服务器重启后规则丢失,检查持久化配置是否成功,对应服务是否开机自启。
- 如果内网有部分端口无法访问,检查FORWARD链的规则是否限制了对应流量,或者是否需要添加端口相关的放行规则。
- 配置MASQUERADE的场景更适合外网IP动态变化的网络环境,避免外网IP变更后需要手动修改SNAT规则。
LinuxNAT网关iptables网络配置ip_forward修改时间:2026-07-04 23:45:12