内网有多台主机有远程桌面需求,但是目前只能在网关上开放多个端口来实现访问。我想只在网关上开放 3389 或者其他指定端口,使用反向代理解析转发 rdp1.exmple.com 、rdp2.exmple.com 等二级域名来区分内网不同主机。开头我是想用 nginx 来实现,结果发现不支持 rdp 协议的域名解析。各位高人,我想请教下有何种方式可以实现我的需求?谢谢!
1
fuzzsh 48 天前 1
layer 4 都是一个 IP 一个端口,和早期 HTTPS 协议一样,后面出现 SNI 才支持单 IP 多域名
在 host 增加多个 IP ,nginx 每个 listen 用不同 IP ,转发到不同 upstream ,域名解析到 listen IP 上 |
2
povsister 48 天前 2
首先,rdp 是 L7 协议,运行于 tcp 、udp 之上。
所以,nginx 只有 stream module 可以处理,且一般只能处理 sni 和 ALPN ,rdp 并不运行在标准 TLS 协议下,所以,应该没啥用。 其次,域名,在这个 case 下,只负责解析实际 IP 地址,rdp 客户端会直接使用解析后 ip+3389 端口访问,此访问中,理论不携带任何域名信息。nginx stream module 自然无用。 综上,仅通过不同域名+同一个 IP ,不可能做到根据域名分流至不同 rdp 目标。 提示,研究 RDP gateway ,用于解决你 rdp 分流问题 |
4
ysc3839 46 天前
之前我以为 RDP 是基于 TLS 的,但是实际上不是标准 TLS ,连接时会有其他握手包,之后才使用 TLS 加密,所以不能用 nginx 反代。
不过也许可以预先处理前面的握手包,再反向代理。不确定有没有现成的项目。 |
5
ysc3839 46 天前
刚才简单抓包看了下,连接后会先握手,服务端会返回要求输入密码,客户端输入密码后确定才会建立 TLS 连接,此时是有 SNI 信息的。所以理论上是能实现 RDP 的 SNI 反向代理。
|