插件窝 干货文章 Linux 或 Windows 上实现端口映射

Linux 或 Windows 上实现端口映射

端口 8080 iptables 498    来源:    2025-04-13

在 Linux 和 Windows 系统中实现端口映射(端口转发)的方法有所不同,以下是两种系统的详细实现方案:


一、Linux 系统实现端口映射

1. 使用 iptables(传统方法)

# 开启IP转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward

# 将本地端口 8080 转发到 192.168.1.100:80(本地到远程)
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.100 --dport 80 -j SNAT --to-source 本地IP

# 保存规则(根据发行版选择)
service iptables save  # CentOS 6
iptables-save > /etc/iptables.rules  # Debian/Ubuntu

2. 使用 firewalld(CentOS/RHEL 7+)

# 启用IP伪装(NAT)
firewall-cmd --add-masquerade --permanent

# 端口转发(将本地8080转到192.168.1.100:80)
firewall-cmd --add-forward-port=port=8080:proto=tcp:toaddr=192.168.1.100:toport=80 --permanent

# 重载配置
firewall-cmd --reload

3. 使用 nftables(新一代替代工具)

nft add table nat
nft add chain nat prerouting { type nat hook prerouting priority 0 \; }
nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
nft add rule nat prerouting tcp dport 8080 dnat to 192.168.1.100:80
nft add rule nat postrouting oif eth0 masquerade

4. 使用 socat(临时测试)

socat TCP-LISTEN:8080,fork TCP:192.168.1.100:80

二、Windows 系统实现端口映射

1. 使用 netsh(内置工具)

# 添加端口转发(需管理员权限)
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=192.168.1.100

# 查看现有规则
netsh interface portproxy show all

# 删除规则
netsh interface portproxy delete v4tov4 listenport=8080 listenaddress=0.0.0.0

2. 使用 PowerShell(Windows 8+)

# 临时端口转发(需管理员权限)
New-NetFirewallRule -DisplayName "Port Forward 8080 to 80" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=192.168.1.100

3. 第三方工具

  • PortMaster(图形化工具)
  • rinetd(轻量级转发工具)

三、注意事项

  1. 防火墙配置:确保放行转发的端口(如 8080)。

    • Linux:iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
    • Windows:在防火墙高级设置中添加入站规则。
  2. 权限要求

    • Linux:需 root 权限或 sudo
    • Windows:需以管理员身份运行命令提示符/PowerShell。
  3. 持久化配置

    • Linux:将规则写入 /etc/rc.local 或对应服务配置文件。
    • Windows:netsh 规则默认持久化。
  4. IPv6支持

    • 替换 v4tov4v6tov6v4tov6(Windows)。
    • Linux 使用 ip6tablesnftables 的 IPv6 规则。

四、典型场景示例

场景1:将公网IP的8080端口映射到内网Web服务器

  • Linux

    iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
    iptables -t nat -A POSTROUTING -j MASQUERADE
    
  • Windows

    netsh interface portproxy add v4tov4 listenport=8080 listenaddress=公网IP connectport=80 connectaddress=192.168.1.100
    

场景2:本地调试远程数据库

# 将本地3306端口转发到远程MySQL(Linux)
ssh -L 3306:localhost:3306 user@remote_db_server

通过上述方法,可以灵活实现跨网络或本地的端口映射需求。根据实际环境选择工具,并注意安全风险(如暴露敏感端口)。