在Ubuntu系统中配置端口映射
在Ubuntu系统中配置端口映射(端口转发)通常可以通过 iptables、nftables 或 UFW 工具实现。以下是具体步骤:
一、启用IP转发
端口映射需要系统支持IP转发功能。
临时启用(重启失效):
bash
sudo sysctl -w net.ipv4.ip_forward=1
永久启用:
编辑 /etc/sysctl.conf 文件,取消注释或添加以下行:bash
net.ipv4.ip_forward=1
保存后生效:
bash
sudo sysctl -p
二、使用 iptables 配置端口映射
1. 基本命令(临时生效)
假设将 外部端口 8080 转发到 目标IP 192.168.1.100 的 80 端口:
bash
# 添加NAT规则(端口转发)
sudo iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT –to-destination 192.168.1.100:80
# 允许数据包转发到目标地址
sudo iptables -A FORWARD -p tcp -d 192.168.1.100 –dport 80 -j ACCEPT
# 启用源地址转换(MASQUERADE)
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
2. 保存规则(永久生效)
安装 iptables-persistent 工具保存规则:
bash
sudo apt update
sudo apt install iptables-persistent
# 保存当前规则
sudo netfilter-persistent save
3. 查看现有规则
bash
sudo iptables -t nat -L -n -v
4. 删除规则
bash
# 列出所有规则并找到要删除的规则编号
sudo iptables -t nat -L PREROUTING –line-numbers
# 删除指定编号的规则(例如编号1)
sudo iptables -t nat -D PREROUTING 1
三、使用 nftables(推荐,替代iptables)
Ubuntu 22.04+ 默认使用 nftables,配置更简洁:
bash
# 创建新表
sudo nft add table ip nat
# 添加链和规则(示例:将8080转发到192.168.1.100:80)
sudo nft add chain ip nat prerouting { type nat hook prerouting priority 0 \; }
sudo nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; }
sudo nft add rule ip nat prerouting tcp dport 8080 dnat to 192.168.1.100:80
sudo nft add rule ip nat postrouting masquerade
# 保存规则
sudo nft list ruleset > /etc/nftables.conf
四、使用 UFW 配置端口转发
若已使用 UFW 管理防火墙,可编辑UFW规则文件:
修改UFW配置文件:
bash
sudo nano /etc/ufw/before.rules
在文件末尾添加以下内容(示例转发8080到80):
bash
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp –dport 8080 -j DNAT –to-destination 192.168.1.100:80
COMMIT
重启UFW生效:
bash
sudo ufw disable && sudo ufw enable
允许外部访问端口:
bash
sudo ufw allow 8080/tcp
五、验证端口映射
本地测试:
bash
curl http://localhost:8080 # 本地访问
telnet 192.168.1.100 80 # 直接测试目标端口
远程测试:
bash
telnet <你的公网IP> 8080
检查端口监听状态:
bash
sudo ss -tuln | grep 8080
六、注意事项
- 防火墙放行:确保本地防火墙(UFW/iptables)和云服务器安全组放行外部端口。
- 目标服务可达:确保目标IP和端口的服务已启动且可访问。
- NAT配置:若目标设备与Ubuntu不在同一子网,需正确配置路由或网关。
- IPv6转发:如需支持IPv6,需额外配置 net.ipv6.conf.all.forwarding=1。
通过以上方法,可灵活实现单机或跨网络的端口映射,适用于Web服务转发、内网穿透等场景。