文章首發於www.litreily.tophtml
有時候須要在公司使用家裏我的PC的一些資源,此時能夠選擇Teamvieawer
進行遠程,可是略微麻煩並且訪問速率較慢,此時經過vps
實現內網穿透就是個不錯的想法。ubuntu
本文講述的內網穿透方法是經過autossh
實現vps對內網的反向代理,在vps與內網之間創建一條長鏈接,使得外網PC經過vps的反向代理訪問內網PC。整個實現所需的條件以下:服務器
222.222.222.222
)的vps修改vps的文件/etc/ssh/sshd_config
, 取消如下參數的註釋或是修改其值ssh
GetewayPorts yes
TCPKeepAlive yes
ClientAliveInterval 60
ClientAliveCountMax 3
複製代碼
爲了保證內網PC能夠免密碼訪問vps,須要在vps添加內網PC的公鑰學習
$ ssh-keygen
# ... enter ...
$ ssh-copy-id -i ~/.ssh/id_rsa.pub -p 27000 root@222.222.222.222
# 27000是訪問vps的端口號,root是vps的用戶名,222.222.222.222是vps的公網IP
複製代碼
配置好後,在內網PC安裝autossh
spa
sudo apt-get install -y autossh
複製代碼
安裝好之後,經過以上指令即可實現反向代理:代理
autossh -p 27000 -M 27400 -NR '*:27401:localhost:27402' root@222.222.222.222
複製代碼
其中的參數:code
-p 27000
: vps ssh 端口,默認值22-M 27440
: 中繼服務器(vps)的代理服務監聽端口,需保證不被vps其它進程佔用-NR '*:27401:localhost:27402'
: 端口映射,vps的27401
端口映射到內網PC的27402
端口root@222.222.222.222
: vps的用戶名及IP這裏涉及到4個端口,27000
是vps ssh的監聽端口,27400
是vps代理服務的監聽端口,27401
和27402
是vps與內網PC之間的一對端口映射,外網PC須要經過vps的27401
端口訪問內網。cdn
使用以上指令已經能夠完成所需的功能了,可是每次開機都得從新輸一遍,很不方便,因此能夠把指令封裝成一個服務,而後設置爲開機啓動。在ubuntu
中,能夠在lib/systemd/system
目錄下新建一個autossh.service
的文件,並輸入如下內容:htm
[Unit]
Description=Auto SSH Tunnel
After=network-online.target
[Service]
User=autossh
Type=simple
ExecStart=/usr/bin/autossh -p 27000 -M 27400 -NR '*:27401:localhost:27402' root@222.222.222.222 -i ~/.ssh/id_rsa
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
StartLimitIntervalSec=5
StartLimitBurst=12
Restart=always
[Install]
WantedBy=multi-user.target
WantedBy=graphical.target
複製代碼
配置好後,經過如下指令完成啓動、查詢和自啓動。
sudo systemctl autossh start
sudo service autossh status
sudo systemctl enable autossh.service
最後就是如何經過外網訪問內網了,其實和訪問vps自己相似,僅僅是改一下鏈接端口便可。
sudo ssh root@222.222.222.222 -p 27401
複製代碼
本文介紹的是經過vps實現反向代理,若是沒有vps的話就沒法使用了,此時能夠學習下frp
或Ngrok
,使用公共的服務器實現代理.