Featured image of post Frp+Nginx反代RDP

Frp+Nginx反代RDP

首先用nginx来反代远程桌面的3389端口,再利用frp把nginx监听的端口暴露出来,以此来实现骚操作。

Frp+Nginx反代RDP

先说一下背景,因为现在住的地方的电信宽带有动态的公网IP,老家有一台常年不关机的Windows主机和一台Linux服务器,并且都开启了通电自启。但是连回去是一个问题,之前一直是用的tailscale来做异地组网来解决这个问题。但是现在用久了发现延时越来越大,可能是服务器不在国内的,导致连接质量极其的差。有时候甚至会连接不上。所以有了此文。

frps服务器的准备

frps的搭建教程在这里 Frp 内网穿透 或者这个回首frp搭建

不过这一次我是直接在路由器上自带的frps里面搭建的

image-20220917000356268

配置就不用多介绍了,懂得都懂主要就是下面的这几个需要配置一下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
绑定端口
UDP 绑定端口
KCP 绑定端口
Vhost HTTP端口
Vhost HTTPS 端口
仪表板端口
仪表板用户
仪表板密码
令牌
子域主机 

然后启动frps,用访问ip/domain:仪表板端口仪表板用户+仪表板密码登录就可以看到,frps的运行状态了。

image-20220917001924978

nginx准备及设置

我这里使用的系统是Ubuntu20.04所以可以直接安装nginx即可。还有哦!这个服务器是和我Windows主机一个局域网下面的。后面的nginx和frpc操作都是在这个Ubuntu主机上完成的。

1
sudo apt install nginx

这个版本的nginx在安装的时候会把stream模块也安装上,所以不需要再手动安装了,如果你是其他系统,请自行nginx -V查看有没有包括关键词:stream,或者下面这两个。

1
2
--with-stream
--with-stream_ssl_module

然后编辑 /etc/nginx/nginx.conf添加下面的一行配置。当然你也可以直接在stream里面写配置,但是我不喜欢修改主配置文件的这种方式。

1
2
3
stream {
  include /etc/nginx/tcp.d/*.lee;
}

然后就是在**/etc/nginx/**新建**tcp.d**目录,并在该目录下面新建配置文件:**tcp.lee**。

1
2
3
4
5
6
7
upstream rdp{
  server 192.168.1.3:3389;
}
server{
  listen 3389;
  proxy_pass rdp;
}

frpc设置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[common]
server_addr = xxx.com
server_port = 绑定端口
token = 令牌

[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 对外暴露的公网端口

然后用Windows自带的远程桌面访问:ip/domain:对外暴露的公网端口就可以连上家里面没有公网的Windows主机了。

适用情况

那你可能又要说了,为什么不直接在Windows上用frpc呢!其实我情况特殊,主要原因有二

第一个原因

我当时使用tailscale虽然设置了开机自启,但是那个自启需要用户登录才会启动。这就导致我重启电脑以后,tailscale直接没有启动,启动我就需要先登陆,但是我登陆就需要tailscale先启动。无解!虽然后来设置了run unattended来解决这个问题。但是因为延时问题。我还是放弃了tailscale。

第二个原因

我对Windows不熟悉,也不愿意学习Windows的那些dos或者powershell操作,更喜欢使用Linux完成这些功能。