SSH隧道
分享一篇很棒的SSH手冊中文翻譯
https://www.cnblogs.com/f-ck-need-u/archive/2017/07/05/7120669.html-N 選項表示登錄到遠程主機后不執行命令,只做流量轉發。
我有兩臺Linux服務器,我會演示如何創建SSH隧道在不同的場景中解決問題。
第一臺服務器 47.107.86.165我將它稱為 A。另一臺是 120.79.52.36 我叫它 B. 我在兩臺服務器的7000端口上均運行了一個簡陋的web頁面。
一、正向隧道 (參數 -L)
我想訪問 B:7000, 但不希望直接訪問,而是通過A來中轉,我可以在 A 上執行這個命令:
ssh -N -L 0.0.0.0:7070:120.79.52.36:7000 gg@120.79.52.36
這意味著訪問 A:7070 實際上是間接訪問 B:7000
二、反向隧道 (參數 -R)
還是在A服務器上操作,我現在想讓 B 監聽一個端口,使得 B 訪問該端口的時候跳轉到另一個 [地址:端口],我可以在 A 上執行這個命令:
ssh -N -R 120.79.52.36:7800:0.0.0.0:7000 gg@120.79.52.36
上面這個命令的意思是在 120.79.52.36 上監聽 7800,訪問該端口會跳轉到 A 的7000端口。
用 netstat 查看 B 是不是監聽了 7800 端口
在 B 上訪問本地 7800 端口,可以看到的確跳轉到了 A 的 7000 端口。
這個功能有什么有趣的用途呢?我說一個我自己的例子。我所在的學校組了一個巨大的局域網,宿舍插上網線后獲得了一個內網ip,不撥號是不能上網的。我發現實驗樓的機器可以主動連接到我宿舍的ip,反過來我宿舍卻不能連實驗樓。那么我可以用ssh隧道+socks5來代理上網了。具體做法在第四個場景介紹,下面先介紹如何用SSH建立socks5代理。
三、socks5代理 (參數 -D)
我希望把 A 變成 socks5 服務器,通過 A 訪問網站,可以在 A 上執行這個命令:
ssh -N -D 0.0.0.0:9000 root@0.0.0.0
這樣 A 就監聽了 9000 端口,A 成為了 socks5 服務器,在瀏覽器中設置代理后就通過 A 訪問網頁了。
這條命令還可以稍作修改,仍然用 A 作socks5 服務器,但是流量用另一臺機器轉發。
瀏覽器代理不用修改,仍然是 A:9000 ,打開 ip.cn 看看效果
四、反向隧道 + socks5 代理 (參數 -D -R)
最后一個場景,結合 -D 和 -R 參數,讓 A 成為 socks5 服務器,然后建立反向隧道到 B 使得 B 在本地監聽端口, B 通過該端口提供的 socks5 服務聯網。
在 A 上執行兩條命令:
ssh -N -D 0.0.0.0:9000 root@0.0.0.0 ssh -N -R 120.79.52.36:9090:0.0.0.0:9000 gg@120.79.52.36此時 B 的 9090 端口已經成為了一個 “socks5代理“。
在 B 上安裝 proxychains,設置代理后訪問 ifconfig.me
配置 proxychains(這一步也可以用之前在瀏覽器內設置代理的方式替換)
可以看到 B 通過 A 的代理訪問了外部網站。
總結
- 上一篇: windows修改mac地址表
- 下一篇: autossh端口映射