前言

为什么会需要使用Nginx代理本地TCP端口呢?

是因为有时候DDNS-GO域名更新比较慢,导致我的Windows设备即使启动了,也要在几分钟后等它更新IPv6地址后才能访问。中间可能也就几分钟时间,但是就是不想等。

因为家里有Ubuntu服务器是24小时开机的,就让它负责起转发本地Windows远程桌面的任务,这样只要Windows电脑启动,直接就可以进行访问。

这篇文章介绍一下具体操作。

前提

进行以下操作前,需要确保:

  1. 局域网可以正常进行连接

  2. 服务器安装DDNS-GO并正确解析IPv6

此时,现有环境为:

ubuntu server的ddns-go服务正确解析至:rdp.xxx.com

操作

  1. 安装Nginx

    根据自己设备进行安装,ubuntu server只需使用以下命令即可:

    1
    2
    apt install nginx
    apt install libnginx-mod-stream #stream模块,必须安装
  2. 配置 /etc/nginx/nginx.conf 文件

    在上述文件中添加以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #在http内容前加载
    load_module modules/ngx_stream_module.so;

    #添加stream代理设置,与http是平级的,不要放错位置
    stream {
    server {
    listen [::]:3389; #外部端口
    proxy_pass 10.0.0.50:3389; #需要代理的端口
    }
    }

    注意:由于访问是通过IPv6进行访问的,因此代理的协议也就必须是ipv6:listen [::]:3389

  3. 应用

    通过命令 nginx -t 确保配置正确并重新加载 systemctl restart nginx

测试

然后就可以通过 rdp.xxx.com:3389 来进行远程连接了。

写文章前体验了一下,使用Nginx进行代理对比直接在Windows上使用DDNS-GO解析直连稍微有一点点延迟,可以说是忽略不计。

最后

这两天其实尝试了好几次,很多网上的方式已经过时,而且增加一些额外的配置就会导致无法连接,目前是不加任何配置最原始的就已经可以了。

最大的问题就是代理的是IPv6的地址,当时忘记考虑这一部分,导致走了点弯路。

会了这种方法,代理其他的端口,或者说UDP协议等都不成问题,可玩性也会大大提升。