2026-04-03
教程
0

目录

Ubuntu UFW 端口转发教程:38080 ↔ 8080 内外映射
适用场景
一、环境说明
二、前置检查与基础配置
1. 查看防火墙状态
2. 开启内核 IP 转发(必须)
三、配置端口转发规则
1. 清空现有混乱/重复 NAT 规则
2. 添加两条核心转发规则
3. 防火墙放行 38080 端口
四、验证配置是否生效
1. 查看 NAT 转发规则
2. 检查 8080 端口是否有服务监听
3. 连通性测试
五、规则持久化(防止重启失效)
1. 安装持久化工具
2. 保存当前 iptables 规则
六、最终实现效果
七、常见问题排查
1. curl: (7) Failed to connect
2. 规则重复、多余
3. 外部浏览器无法访问
4. 重启服务器后失效

Ubuntu UFW 端口转发教程:38080 ↔ 8080 内外映射

适用场景

服务器厂商限制 8080 端口不可对外暴露,需实现:

  1. 外部用户通过 38080 端口访问服务
  2. 实际服务运行在本机 8080 端口
  3. 内部访问 8080 时自动走 38080 出口
  4. 8080 不对外暴露,满足安全合规要求

一、环境说明

  • 系统:Ubuntu / Debian(使用 UFW 防火墙)
  • 内部服务端口:8080
  • 对外映射端口:38080
  • 依赖:需要 sudo 或 root 权限

二、前置检查与基础配置

1. 查看防火墙状态

bash
sudo ufw status

若出现 ERROR: problem running ip6tables,关闭 IPv6:

bash
sudo sed -i 's/IPV6=yes/IPV6=no/' /etc/default/ufw sudo ufw reload

2. 开启内核 IP 转发(必须)

bash
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p

三、配置端口转发规则

1. 清空现有混乱/重复 NAT 规则

bash
sudo iptables -t nat -F sudo iptables -t nat -X sudo ufw reload

2. 添加两条核心转发规则

bash
# 外部访问 38080 → 转发到内部 8080 sudo iptables -t nat -A PREROUTING -p tcp --dport 38080 -j REDIRECT --to-port 8080 # 内部访问 8080 → 转发到 38080 出口 sudo iptables -t nat -A OUTPUT -p tcp --dport 8080 -j REDIRECT --to-port 38080

3. 防火墙放行 38080 端口

bash
sudo ufw allow 38080/tcp sudo ufw reload

四、验证配置是否生效

1. 查看 NAT 转发规则

bash
sudo iptables -t nat -L -n

正常输出示例

bash
Chain PREROUTING (policy ACCEPT) REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:38080 redir ports 8080 Chain OUTPUT (policy ACCEPT) REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 redir ports 38080

2. 检查 8080 端口是否有服务监听

bash
sudo ss -tulpn | grep 8080

有输出表示服务正常运行,无输出则需先启动服务。

3. 连通性测试

bash
# 测试内部 8080 → 38080 转发 curl localhost:8080 # 测试外部映射 38080 → 8080 curl localhost:38080

两条命令均能正常返回内容,说明转发生效。

五、规则持久化(防止重启失效)

1. 安装持久化工具

bash
sudo apt update sudo apt install -y iptables-persistent

2. 保存当前 iptables 规则

bash
sudo netfilter-persistent save

规则将自动在开机时加载。

六、最终实现效果

  1. 外部访问服务器公网IP:38080 → 自动转发到内部 8080 服务
  2. 内部访问:访问 localhost:8080 → 自动走 38080 端口
  3. 安全合规:8080 端口不对外暴露,符合厂商限制
  4. 内外互通:内部、外部均可正常使用服务

七、常见问题排查

1. curl: (7) Failed to connect

原因:8080 端口没有服务在运行。

解决:先启动你的 Web/AI/应用服务,再测试端口。

2. 规则重复、多余

解决:重新清空规则并添加:

bash
sudo iptables -t nat -F PREROUTING OUTPUT

3. 外部浏览器无法访问

原因:云服务器安全组 / 厂商上层防火墙未放行 38080。

解决:去控制台安全组开放 TCP 38080 入方向。

4. 重启服务器后失效

解决:执行第五章规则持久化步骤,保存 iptables 规则。

本文作者:苏皓明

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!