在 Ubuntu 22.04 中,由于系统默认使用 systemd 且 iptables 规则重启后会丢失,要实现开机自动执行这条 NAT 转发规则,最可靠的方式是通过 systemd 服务来实现。以下是详细步骤:
新建一个文件 /usr/local/bin/iptables-nat.sh ,内容:
#!/bin/bash
# 检查是否为 root 用户执行
if [ "$(id -u)" != "0" ]; then
echo "该脚本需要 root 权限执行" >&2
exit 1
fi
# 执行 NAT 转发规则
iptables -t nat -A POSTROUTING -j MASQUERADE
# 可选:如果需要覆盖旧规则(避免重复添加),可以先清空再添加
# iptables -t nat -F POSTROUTING
# iptables -t nat -A POSTROUTING -j MASQUERADE
chmod +x /usr/local/bin/iptables-nat.sh
再新建一个启动文件:/etc/systemd/system/iptables-nat.service
[Unit]
Description=Set iptables NAT masquerade rule
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/iptables-nat.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable iptables-nat.service
systemctl start iptables-nat.service
以下是验证:
# iptables -t nat -L POSTROUTING -n -v
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
4 304 MASQUERADE all -- * * 0.0.0.0/0 0.0.0.0/0
