You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使iptables 80转8080的端口转发规则重启后持久生效?

解决iptables端口转发重启后失效的问题

问题回顾

你已经成功设置了端口转发,把80端口的请求转到8080:

sudo iptables -A PREROUTING -t nat -i enp0s25 -p tcp --dport 80 -j REDIRECT --to-port 8080

现在能正常通过webapp/访问,但重启系统后就失效了——这是因为iptables的规则默认是临时存储在内存里的,系统重启后会被自动清空。下面是几种稳定可靠的解决方式:


方法一:用iptables-persistent保存并自动加载规则(推荐)

这是Debian/Ubuntu系最常用的方式,专门用来持久化iptables规则:

  1. 先把当前生效的规则保存到配置文件:
    sudo mkdir -p /etc/iptables  # 如果目录不存在就创建
    sudo iptables-save > /etc/iptables/rules.v4
    
  2. 安装iptables-persistent工具:
    sudo apt update && sudo apt install iptables-persistent
    
    安装过程中会弹出提示,问你是否保存当前的IPv4/IPv6规则,直接选Yes就好。以后每次修改iptables规则后,记得重新执行iptables-save命令更新配置文件,这样重启后就能自动加载最新规则了。

方法二:自定义systemd服务加载规则

如果不想安装额外工具,可以自己写一个systemd服务来实现开机加载:

  1. 创建服务配置文件:
    sudo nano /etc/systemd/system/iptables-restore.service
    
  2. 粘贴以下内容进去:
    [Unit]
    Description=Restore Persistent iptables Rules
    Before=network.target  # 确保在网络启动前加载规则
    
    [Service]
    Type=oneshot
    ExecStart=/sbin/iptables-restore < /etc/iptables/rules.v4
    RemainAfterExit=yes
    
    [Install]
    WantedBy=multi-user.target
    
  3. 保存退出后,先把当前规则保存到文件:
    sudo iptables-save > /etc/iptables/rules.v4
    
  4. 启用并启动服务:
    sudo systemctl enable iptables-restore.service
    sudo systemctl start iptables-restore.service
    
    这样每次开机时,systemd就会自动帮你加载保存的iptables规则。

方法三:添加到rc.local(适合老旧系统)

如果你的系统还在使用rc.local(比如一些CentOS 7之前的版本或自定义系统),可以把规则命令直接加到里面:

  1. 编辑rc.local文件:
    sudo nano /etc/rc.local
    
  2. exit 0这一行之前添加你的iptables命令:
    iptables -A PREROUTING -t nat -i enp0s25 -p tcp --dport 80 -j REDIRECT --to-port 8080
    
  3. 确保rc.local有执行权限:
    sudo chmod +x /etc/rc.local
    
    这样系统开机时会自动执行rc.local里的命令,重新添加端口转发规则。

小提醒

  • 如果你同时在用ufw或者firewalld这类防火墙管理工具,它们可能会覆盖直接设置的iptables规则,建议统一用一种方式管理防火墙,避免冲突。
  • 不管用哪种方法,设置完后最好重启一下系统测试一下,确认端口转发能正常工作,避免影响用户访问。

内容的提问来源于stack exchange,提问作者Aravind S

火山引擎 最新活动