在日常运维或家庭网络环境中,我们经常遇到这样的需求:有一台带公网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 加载生效。
- 检查语法:
在终端执行nginx -t,如果显示successful则说明语法正确。 - 重载配置:
在终端执行nginx -s reload,或者在宝塔面板的 Nginx 管理页面点击“重载配置”。
五、 放行防火墙(至关重要!)
很多同学配置完连不上,99% 的原因都是因为端口没放行。你需要做两层放行:
- 宝塔面板侧:
进入宝塔菜单的 【安全】 -> 【添加端口规则】。
- 协议:TCP
- 端口:
33389和33390(根据你配置的 listen 端口填写) - 策略:放行
- 云服务商侧(安全组):
如果你使用的是阿里云、腾讯云、AWS 等云服务器,必须去网页控制台找到 【安全组】 或 【防火墙】 设置,同样放行TCP:33389和TCP:33390。
六、 连接测试
现在,打开你本地电脑的“远程桌面连接”(mstsc):
- 计算机:
你的公网IP:33389 - 用户名/密码: 内网那台 Windows 的账号密码
点击连接,你应该就能丝滑地看到内网机器的桌面了!
🛡️ 安全小贴士
RDP 协议直接暴露在公网存在一定风险,建议采取以下措施:
- 修改端口: 尽量不要直接使用公网的 3389 端口转发,使用高位冷门端口(如 30000+)。
- 设置白名单: 在宝塔的安全设置中,将该端口的“允许IP”限制为你公司或家里的固定 IP,而不是默认的“所有 IP”。
- 强密码: 确保内网 Windows 机器的管理员密码足够复杂。
希望这篇教程能帮你解决内网穿透的问题,如果有疑问欢迎在评论区留言!
版权属于:soarli
本文链接:https://blog.soarli.top/archives/812.html
转载时须注明出处及本声明。