ubuntu小技巧

ubuntu22.04开机自动执行iptables -t nat -A POSTROUTING -j MASQUERADE

在 Ubuntu 22.04 中,由于系统默认使用 systemdiptables 规则重启后会丢失,要实现开机自动执行这条 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