前言
說下背景吧,現在疫情很嚴重,所以呢,公司讓我們遠程辦公。公司給我們開了vpn,利用vpn,我們可以連接到公司的內網服務器上,但是,不能連接到自己的工作pc上,不知道其他公司有沒有這個問題,反正我們有這個問題。
現在一般來說,連接到公司里的個人pc上,有下面幾種方式:
- teamviewer
- 向日葵
上面兩種都是內網直接穿透的。但我這邊感覺還是有點卡。
在我的琢磨下,有了下面的第三種方式:
因為開了vpn時,家里pc --》 公司服務器 是通的;公司服務器上--》工作pc,也是通的。
假設我想通過家里pc,通過windows遠程桌面的方式去連接工作pc,要怎么做?
正常遠程桌面時,是通過下面的方式:
圖里的ip,就是我工作pc的ip,但是很遺憾,我家里pc和工作pc網絡不通。
在使用遠程桌面進行連接時,
此時會進行如下的網絡通信(向要遠程的主機的3389端口發起通信):
但是我們也看到了,ip不通,3389端口根本上不去,怎么辦呢?
解決方案
從前面我們知道,站在家里pc的角度,工作pc的ip是不通的,但是公司里的內網服務器卻是通的。
而且,公司內網服務器,到工作pc的網絡也是通的。
那么,我們的辦法就是,在內網服務器上,安裝一個代理軟件,對3389端口進行監聽,同時,將該端口的流量,轉發到 工作pc的3389端口上。不就解決了嗎?
最后呢,我用來完成這個功能的軟件是nginx,nginx可以進行tcp流量轉發。
可參考:
https://blog.csdn.net/yjyd54430/article/details/84888914
操作步驟
- nginx的該項功能,需要啟用stream模塊,操作步驟可以參考:
-
配置nginx.conf
參考 : https://blog.csdn.net/yjyd54430/article/details/84888914
我這邊給一下我的配置文件的大概樣子(注意,stream和http之類是平行的):
http {
...
}
stream {
upstream 482{
hash $remote_addr consistent;
server 10.15.4.82:3389 max_fails=3 fail_timeout=30s;
}
server {
listen 9981 so_keepalive=on;
proxy_pass 482;
}
upstream 472{
hash $remote_addr consistent;
server 10.15.4.72:3389 max_fails=3 fail_timeout=30s;
}
server {
listen 9982 so_keepalive=on;
proxy_pass 472;
}
}
值得注意的是,大家看到我的配置文件里配了兩個端口,9981,9982,分別轉發流量到不同的工作pc。
因為我這是給組里的小伙伴配置的,實際不止這兩個,配了大概十多個端口吧,每個小伙伴一個。
遠程桌面連接的時候,直接就使用(打開遠程桌面:win + R輸入mstsc):
展示下效果吧:
大家看,我已經連接進去了,速度嘛,比向日葵快,大家有興趣,可以試試。
通信過程中,抓包如下:
總結
利用技術解決生活中的問題,是不是還比較有意思呢,哈哈。大家有疑問請和我聯系。