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无痕网关

Linux iptables 端口转发简易教程
Linux UDP端口转发从零到一:游戏、DNS、VoIP场景全解析
Java做端口转发性能怎么样?原生Socket vs Netty对比分析
手把手配置Linux内网转发:端口转发、网段互通、共享上网三种场景
TCP端口转发不生效?IP转发、防火墙、SELinux排查手册
手把手配置Linux DNS转发:全局转发+条件转发完整步骤
服务器设置转发:实现高效数据传输的实用指南
解析流媒体转发服务器:支撑影音流畅传输的核心力量
Windows 截图怎么转发?超全实用转发方法汇总
查找网站隐藏ip,如何快速查找网站隐藏ip