HOME | linux | SSH 反向隧道與proxy

SSH 反向隧道與proxy

2019/04/03/10:29 , Post in linux , 評論(0) , 引用(0) , 閱讀(3474) , Via 本站原創
當家裡有一台linux 主機,而家中又是使用NAT,而分享器也不是你能夠控制的時候

當你人在外面,要連回去既不能設定DMZ也不能設定port forward,那要怎麼連回家中呢?

這時候就可以使用ssh的反向隧道

假設家中的伺服器A,這時候我們需要一台中繼用的伺服器B

B必須讓A能夠ssh連線,同時也要讓我們在想要控制A的地方能夠連線

連線方式是從A發起ssh連線到B,並設定反向隧道

ssh -fN -R 反向隧道的port:localhost:22 username@B_ip

接著當我們想要連回A的時候,先ssh登陸B,接著走這條反向隧道

ssh username@localhost:反向隧道的port

就可以連線回A了。

當要中斷這個服務的時候,因為是B在LISTEN這個PORT

所以在B上用netstat找到這個PORT的PID,kill掉就可以了。

這種方式是需要先登錄到B主機,也有另一種方式直接在B主機上開一個PORT LISTEN,做到直接轉發

首先修改SSHD的設定

vim /etc/ssh/sshd_config

找到GatewayPorts,把註解拿掉並加上clientspecified,重啟sshd

service sshd restart

從A建立反向連線

ssh -fN -R B_IP:B轉發PORT:localhost:22 B_user@B_IP

如果是RDP的話要改成localhost:3389

這樣以後只要ssh B_user@B_IP:B_PORT就可以直接連線回A了。

另外我們還可以利用這條連線讓其他服務進行存取,原理是這樣的

首先在使用自己電腦連上B的轉發PORT,在windows上你可以使用putty

或是有支援ssh的話(windows 10應該有支援)直接這樣下

ssh -D 8080 user@B_IP -p B轉發port  # 8080是自訂的一個隨意的PORT

如果不支援ssh的話就下載putty或是pietty用putty mode

在host跟port的地方設定你要當作跳板的server資訊,接著點左方ssh的tunnel

點擊在新視窗中瀏覽此圖片

接著再source那邊填入你要當作跳板的port,選擇dynamic->add

點擊在新視窗中瀏覽此圖片

open之後打入帳號密碼登入就可以了

等等我們要讓其他服務的流量通過8080這個PORT到B再到A

保持這個連線的視窗不要關掉,接著到IE的工具->網際網路選項

選擇連線->lan設定,勾起自動偵測設定,以及為您的LAN使用PROXY

進入進階Socks,位址打上localhost,連接埠打上剛剛的8080

確定後測試一下,你連線網頁是不是先到B再到A再到你要瀏覽的網頁

直接用瀏覽器連http://ifconfig.me,如果看到自己的IP是A的IP那就表示成功了。

另外一種情境是防火牆內有一台windows的機器以及一台linux的機器

但是你只能夠連的到linux,需要透過linux對windows進行遠端,若是windows10本身內建ssh client

可以用以下的指令到linux建立tunnel讓你遠端windows

ssh -L 3390:windows_ip:3389 -l username linux_ip

然後再用windows內建的rdp軟體去連線localhost:3390就走tunnel到linux的3390

再繞到windows的3389 port,完成遠端桌面作業。

發表評論

暱稱

網址

電郵

開啟HTML 開啟UBB 開啟表情 隱藏 記住我 [登入] [註冊]