Ubuntu 端口转发到 Windows 简易教程

时间:2026-05-11 14:05

一、适用场景

  • Windows 没有公网 IP,Ubuntu 有公网 IP

  • 想要远程访问 Windows 的远程桌面 (3389) 或其他服务

  • Ubuntu 作为中转网关,把流量转给内网 Windows


二、核心步骤

1. 开启 Ubuntu IP 转发

bash
# 临时开启
echo 1 > /proc/sys/net/ipv4/ip_forward

# 永久开启
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

2. 配置 iptables 转发(以远程桌面 3389 为例)

假设:

  • Ubuntu 外网 IP:1.2.3.4

  • Windows 内网 IP:192.168.1.100

bash
# DNAT:把发往 Ubuntu 3389 端口的流量转给 Windows
iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination 192.168.1.100:3389

# SNAT:确保回程流量能回来(重要!)
iptables -t nat -A POSTROUTING -d 192.168.1.100 -p tcp --dport 3389 -j MASQUERADE

# FORWARD 放行
iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 3389 -j ACCEPT

3. 查看与保存规则

bash
# 查看规则
iptables -t nat -L -n -v --line-numbers

# 保存规则(Ubuntu)
iptables-save > /etc/iptables/rules.v4

4. Windows 防火墙设置

在 Windows 上允许远程桌面连接,或添加入站规则放行 3389 端口-9


三、完整示例:转发远程桌面

 
 
项目
Ubuntu 公网 IP 1.2.3.4
Windows 内网 IP 192.168.1.100
转发的端口 3389(远程桌面)

配置完成后,在任何地方使用远程桌面连接 1.2.3.4:3389,即可访问 Windows。


四、避坑指南

 
 
问题 原因 解决
连接不上 IP 转发未开启 sysctl net.ipv4.ip_forward 检查
连上就断 缺 SNAT 规则 加上 -j MASQUERADE
Ubuntu 重启失效 规则没保存 执行 iptables-save 持久化

五、替代工具:80km无痕网关

如果不想记 iptables 语法,可以用 80km无痕网关(曾用名:80KM端口流量转发程序),JSON 配置即可完成转发。

配置示例

forwarder.json

json
{
    "listen": "0.0.0.0:3389",
    "routers": [
        {"from": "0.0.0.0/0", "to": "192.168.1.100:3389"}
    ]
}

启动

bash
80km-forwarder -config forwarder.json

优势:无需记忆 iptables、热加载、自带监控界面。


一句话总结sysctl -w net.ipv4.ip_forward=1 → iptables DNAT + MASQUERADE → 搞定。或者直接用 80km无痕网关

内网穿透工具自托管 vs 云端中转:穿云箭和花生壳优缺点深度分析
内网ip远程控制,借助内网IP实现远程控制的完整指南
远程访问内网IP:打破网络边界的连接艺术
理解Windows系统中的NAT转发功能
内网穿透工具自托管 vs 云端中转:穿云箭和花生壳优缺点分析
手把手配置SSR端口转发:UDP协议支持与高级设置详解
什么是nat123?nat123的核心功能
nat123端口映射:轻松实现外网访问内网
nat123下载:轻松获取内网穿透工具
nat123官网:老牌内网穿透工具