soarli

利用宝塔面板+Nginx实现内网RDP远程桌面转发
在日常运维或家庭网络环境中,我们经常遇到这样的需求:有一台带公网IP的Linux服务器(已安装宝塔面板),想通过它...
扫描右侧二维码阅读全文
11
2026/02

利用宝塔面板+Nginx实现内网RDP远程桌面转发

在日常运维或家庭网络环境中,我们经常遇到这样的需求:有一台带公网IP的Linux服务器(已安装宝塔面板),想通过它访问位于同一内网下的 Windows 机器的远程桌面(RDP)。

通常我们会想到 FRP 或各类内网穿透工具,但其实如果你已经安装了 Nginx,利用其自带的 Stream 模块进行 TCP 转发,是最稳定、最干净且无需安装额外软件的方案。

本文将手把手教你如何通过修改 Nginx 配置,实现多台内网机器的远程桌面转发。

一、 环境准备

  • 公网服务器: Ubuntu/CentOS 等(已安装宝塔面板)
  • 内网机器: 开启了远程桌面的 Windows(例如 IP 为 172.16.12.12
  • 软件要求: Nginx(宝塔默认安装的 Nginx 通常已包含 Stream 模块)

二、 检查 Nginx 配置环境

首先,我们需要确认 Nginx 是否开启了 TCP 转发功能的配置引用。
打开宝塔面板,查看 Nginx 的主配置文件(nginx.conf),通常在 http {} 块的外面,你会看到类似如下的配置:

stream {
    log_format tcp_format '$time_local|$remote_addr|$protocol|$status|$bytes_sent|$bytes_received|$session_time|$upstream_addr|$upstream_bytes_sent|$upstream_bytes_received|$upstream_connect_time';
  
    access_log /www/wwwlogs/tcp-access.log tcp_format;
    error_log /www/wwwlogs/tcp-error.log;
    
    # 关键是下面这一行,它允许我们把配置写在单独的文件里
    include /www/server/panel/vhost/nginx/tcp/*.conf;
}

如果你的配置文件里有 include /www/server/panel/vhost/nginx/tcp/*.conf;,那么恭喜你,我们完全不需要动主配置文件,只需要在指定目录下新建文件即可。这样做的好处是配置解耦,互不干扰,且不会因为升级 Nginx 而丢失配置

三、 配置单台/多台机器转发

1. 创建配置文件

在宝塔文件管理中,进入目录:
/www/server/panel/vhost/nginx/tcp/

新建一个文件,命名为 rdp.conf(或者你喜欢的任何名字,只要以 .conf 结尾)。

2. 编写转发规则

将以下内容复制到 rdp.conf 中。这里演示了如何同时配置两台内网机器,核心原理是利用不同的公网端口区分不同的内网机器

# =========================================
# 机器 A (内网IP: 172.16.12.12)
# =========================================
upstream rdp_machine_A {
    server 172.16.12.12:3389;
}

server {
    # 公网监听端口(建议改为非3389,如33389,增加安全性)
    listen 33389;
    
    # 转发给对应的 upstream
    proxy_pass rdp_machine_A;
    
    # 【重要】RDP是长连接,必须设置较长的超时时间,否则几分钟不动就会断开
    proxy_connect_timeout 1h;
    proxy_timeout 1h;
}

# =========================================
# 机器 B (内网IP: 172.16.12.13) - 如果有第二台
# =========================================
upstream rdp_machine_B {
    server 172.16.12.13:3389;
}

server {
    # 不同的机器必须使用不同的公网端口!
    listen 33390;
    
    proxy_pass rdp_machine_B;
    proxy_connect_timeout 1h;
    proxy_timeout 1h;
}

配置详解:

  • upstream: 定义后端的内网机器地址,名称(如 rdp_machine_A)不能重复。
  • listen: 公网服务器对外暴露的端口。
  • proxy_pass: 将流量转发给哪个 upstream。
  • proxy_timeout: 设置为 1h (1小时),防止远程桌面闲置时意外断开。

四、 重载服务与验证

配置写好后,需要让 Nginx 加载生效。

  1. 检查语法:
    在终端执行 nginx -t,如果显示 successful 则说明语法正确。
  2. 重载配置:
    在终端执行 nginx -s reload,或者在宝塔面板的 Nginx 管理页面点击“重载配置”。

五、 放行防火墙(至关重要!)

很多同学配置完连不上,99% 的原因都是因为端口没放行。你需要做两层放行:

  1. 宝塔面板侧:
    进入宝塔菜单的 【安全】 -> 【添加端口规则】
  • 协议:TCP
  • 端口:3338933390 (根据你配置的 listen 端口填写)
  • 策略:放行
  1. 云服务商侧(安全组):
    如果你使用的是阿里云、腾讯云、AWS 等云服务器,必须去网页控制台找到 【安全组】【防火墙】 设置,同样放行 TCP:33389TCP:33390

六、 连接测试

现在,打开你本地电脑的“远程桌面连接”(mstsc):

  • 计算机: 你的公网IP:33389
  • 用户名/密码: 内网那台 Windows 的账号密码

点击连接,你应该就能丝滑地看到内网机器的桌面了!

🛡️ 安全小贴士

RDP 协议直接暴露在公网存在一定风险,建议采取以下措施:

  1. 修改端口: 尽量不要直接使用公网的 3389 端口转发,使用高位冷门端口(如 30000+)。
  2. 设置白名单: 在宝塔的安全设置中,将该端口的“允许IP”限制为你公司或家里的固定 IP,而不是默认的“所有 IP”。
  3. 强密码: 确保内网 Windows 机器的管理员密码足够复杂。

希望这篇教程能帮你解决内网穿透的问题,如果有疑问欢迎在评论区留言!

最后修改:2026 年 02 月 11 日 04 : 08 AM

发表评论