友链提交
请认真填写以下信息,谢谢!

博客信息

(请填写完整的网址,例如:https://www.example.com)
(贵站展示本站链接的页面地址,一般是友链页面,填写后将自动验证友链关系有效性)
(用于抓取文章)
(用于接收通知)

解决1Panel端口转发"服务内部错误: exit status 1"问题

问题现象

在1Panel面板操作路径 系统 > 防火墙 > 端口转发 时,界面出现飘字报错:

服务内部错误: exit status 1

错误日志分析

在面板日志审计(系统日志)中发现关键错误条目:

[2025-07-27 15:34:01] [ERROR] iptables failed, err: stderr: iptables v1.8.9 (nf_tables): chain `1PANEL_PREROUTING' in table `nat' is incompatible, use 'nft' tool.

问题根源

此错误由底层防火墙框架冲突导致:

  1. 系统环境:Debian 10+ 及 Ubuntu 20.04+ 默认使用 nftables 作为防火墙后端
  2. 软件依赖:1Panel 当前版本仍使用 iptables 命令集
  3. 冲突本质:当尝试在 nat 表中操作 1PANEL_PREROUTING 链时,nftables 框架拒绝执行 iptables 语法规则

解决方案

通过以下三步解决兼容性问题:

步骤1:切换iptables到legacy模式

sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

技术作用

  • 将系统的iptables实现从nftables后端切换回legacy模式
  • 解决命令语法兼容性问题
  • 确保1Panel的防火墙操作可正常执行

步骤2:创建并挂接专用规则链

# 在nat表中创建专用链
sudo iptables-legacy -t nat -N 1PANEL_PREROUTING
sudo iptables-legacy -t nat -N 1PANEL_POSTROUTING

# 将专用链挂载到PREROUTING和POSTROUTING钩子
sudo iptables-legacy -t nat -A PREROUTING -j 1PANEL_PREROUTING
sudo iptables-legacy -t nat -A POSTROUTING -j 1PANEL_POSTROUTING

链功能说明

链名称 表类型 流量阶段 功能
1PANEL_PREROUTING nat 入站预处理 处理DNAT端口转发规则
1PANEL_POSTROUTING nat 出站后处理 处理SNAT地址转换规则

此时其实已经可以正常使用了,但是如果设备重启的话,上述配置都会失效,需要重新配置一遍,这会相当的麻烦,于是我们使用配置持久化让其重启也可以正常生效

步骤3:配置规则持久化

# 安装持久化工具包
sudo apt install iptables-persistent -y

# 保存当前规则集
sudo netfilter-persistent save

# 创建systemd服务单元
sudo tee /etc/systemd/system/1panel-firewall.service > /dev/null <<'EOF'
[Unit]
Description=1Panel Firewall Rules Loader
After=network.target
Requires=netfilter-persistent.service

[Service]
Type=oneshot
ExecStart=/usr/sbin/netfilter-persistent reload

[Install]
WantedBy=multi-user.target
EOF

# 启用并激活服务
sudo systemctl daemon-reload
sudo systemctl enable --now 1panel-firewall.service

持久化机制

  1. netfilter-persistent save 将规则写入 /etc/iptables/rules.v4
  2. systemd服务确保在系统启动阶段(网络就绪后)自动加载规则
  3. 服务依赖关系保证在基础网络服务启动后执行

解决方案验证

验证1:检查链挂接状态

# 确认PREROUTING链包含跳转规则
sudo iptables-legacy -t nat -L PREROUTING --line-numbers

# 预期输出示例:
# Chain PREROUTING (policy ACCEPT)
# num  target                 prot opt source    destination
# 1    1PANEL_PREROUTING      all  --  anywhere  anywhere

验证2:重启持久性测试

sudo reboot
sudo iptables-legacy -t nat -L 1PANEL_PREROUTING  # 链应保持存在

验证3:功能测试

# 在目标主机启动测试监听
nc -lkp 8080

# 通过转发端口访问(假设配置80→8080转发)
curl -v http://服务器公网IP:80

# 检查nc端是否收到连接请求

管理命令参考

# 查看当前iptables模式
update-alternatives --list iptables

# 检查规则详细定义
sudo iptables-legacy -t nat -S 1PANEL_PREROUTING

# 监控服务运行状态
sudo journalctl -u 1panel-firewall -f -n 20

注意事项

  1. 权限要求:所有操作需通过sudo提权执行
  2. 规则备份:操作前建议备份当前规则集
    sudo iptables-legacy-save > ~/iptables-backup-$(date +%Y%m%d).rules
    
  3. 模式回退:如需恢复nftables模式(不推荐):
    sudo update-alternatives --set iptables /usr/sbin/iptables-nft
    

用键盘敲击出的不只是字符,更是一段段生活的剪影、一个个心底的梦想。希望我的文字能像一束光,在您阅读的瞬间,照亮某个角落,带来一丝温暖与共鸣。

浮生闲记

intj 建筑师

站长

具有版权性

请您在转载、复制时注明本文 作者、链接及内容来源信息。 若涉及转载第三方内容,还需一同注明。

具有时效性

目录

欢迎来到webjing的站点,为您导航全站动态

20 文章数
3 分类数
0 评论数
30标签数
最近评论