autossh反向代理實現內網穿透

文章首發於www.litreily.tophtml

有時候須要在公司使用家裏我的PC的一些資源,此時能夠選擇Teamvieawer進行遠程,可是略微麻煩並且訪問速率較慢,此時經過vps實現內網穿透就是個不錯的想法。ubuntu

vps proxy

本文講述的內網穿透方法是經過autossh實現vps對內網的反向代理,在vps與內網之間創建一條長鏈接,使得外網PC經過vps的反向代理訪問內網PC。整個實現所需的條件以下:服務器

  1. 帶有公網IP(222.222.222.222)的vps
  2. 保持開機且聯網的內網PC
  3. 任一聯網的外網PC

vps配置

修改vps的文件/etc/ssh/sshd_config, 取消如下參數的註釋或是修改其值ssh

GetewayPorts yes
TCPKeepAlive yes
ClientAliveInterval 60
ClientAliveCountMax 3
複製代碼

內網PC配置

爲了保證內網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安裝autosshspa

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代理服務的監聽端口,2740127402是vps與內網PC之間的一對端口映射,外網PC須要經過vps的27401端口訪問內網。cdn

配置autossh服務

使用以上指令已經能夠完成所需的功能了,可是每次開機都得從新輸一遍,很不方便,因此能夠把指令封裝成一個服務,而後設置爲開機啓動。在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的話就沒法使用了,此時能夠學習下frpNgrok,使用公共的服務器實現代理.

參考

相關文章
相關標籤/搜索