當家裡有一台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,完成遠端桌面作業。
當你人在外面,要連回去既不能設定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,完成遠端桌面作業。