多層跳板機的部署(基於SSH隧道)


參考文章:
https://www.cnblogs.com/oxspirt/p/10260053.html(借用例子徹底明白原理)

核心命令解釋貼在了最后(直接借用的第三篇文章的內容

實操:
通過命令行ssh轉發流量,實現 一層跳板
這一步要注意端口的占用可能會造成拉閘
ssh -p 22 -Nf -L 0.0.0.0:7777:阿里雲IP:22 root@阿里雲IP 訪問本地7777相當於訪問阿里雲服務器的22端口
ssh -p 7777 -Nf -D 127.0.0.1:9999 root@127.0.0.1 本地9999開啟S5監聽,把流量發送到本地7777,因為做了ssh本地轉發,相當於發送到阿里雲服務器的22端口

Proxifier設置代理服務器為本地9999端口,檢測發現代理可用,代理上火狐瀏覽器,去測試IP

火狐瀏覽器的IP地址檢測如下,是跳板機(阿里雲)的IP,代理成功:


中間再過一個虛擬機,實現 兩層跳板

ssh -p 22 -Nf -L 0.0.0.0:7777: 192.168.177.128 :7777 kali@192.168.177.128 訪問本地7777相當於訪問虛擬機 192.168.177.128的7777(我的虛擬機是kali,默認把root關了,懶得調,直接連接普通賬戶kali了)

ssh -p 22 -Nf -L 0.0.0.0:7777:阿里雲IP:22 root@阿里雲IP 在虛擬機上執行這條命令,訪問虛擬機本地的7777相當於訪問阿里雲服務器的22端口

ssh -p 7777 -Nf -D 127.0.0.1:9999 kali@127.0.0.1 本地9999開啟S5監聽,把流量發送到本地7777,一通映射下去,就把流量扔到了阿里雲服務器的22端口,所以這里的密碼填寫的是阿里雲服務器的密碼

注意
要先做完端口轉發,再做S5代理轉發,不然你的隧道的出口如果不是跳板機(阿里雲主機)的22端口的話,S5轉發的流量是出不去的,會出現下列報錯:

報錯內容——連接失敗 我的理解是是這條隧道是ssh隧道,你隧道的盡頭咋也得是個ssh的接收端口才行,不能太離譜
測試通過:

火狐瀏覽器走代理,IP地址正確:


繼續加VPS,實現更 多層跳板

ssh -p 22 -Nf -L 0.0.0.0:7777:下一跳IP地址 :7777 用戶名@下一跳IP地址 跳板間建立起端口轉發
ssh -p 22 -Nf -L 0.0.0.0:7777:最后的出口IP:22 root@ 最后的出口 IP 最后的出口處,把流量塞到22端口,建立起ssh隧道
ssh -p 7777 -Nf -D 127.0.0.1:9999 root@127.0.0.1 在本地建立S5的流量轉發
最終實現,流量從本地9999走S5代理進來,層層轉發到ssh隧道的出口,一套流量代理下來,“我在本地做操作”就變成了經過層層跳板后“登錄到出口跳板做操作”




核心命令解釋

本地轉發(端口轉發)

本地監聽指定端口,該端口收到的請求會通過遠程服務器轉發到另一台機器的指定端口上
  • 語法:
ssh [-p ssh_port] -L [bind_address:]port:host:hostport user@remote_host

解釋:
port:本地監聽的端口
bind_address:監聽端口使用的本地地址(如:192.168.1.2,127.0.0.1,0.0.0.0), 不設置默認為回環地址 127.0.0.1
host:轉發的目標IP
hostport:轉發的目標端口
注意:
host:hostport 是遠程主機 user@remote_host:ssh_port 所能訪問到的地址(包括 user@remote_host自己),本地主機不一定能訪問該地址
  • 示例:
ssh -p 23 -Nf -L 0.0.0.0:3000:123.123.123.124:3001 root@123.123.123.123

說明:
1. 通過 23 端口 ssh 遠程服務器 123.123.123.123,使用帳號 root 登錄
2. 本地監聽端口 0.0.0.0:3000
3. 123.123.123.124 和 123.123.123.123 在一個局域網下,而本地不能直接訪問 123.123.123.124
4. 123.123.123.124 主機通過 3001 端口開放服務
5. 調用鏈路:本地訪問 --> 127.0.0.1:3000 -- ssh 隧道 --> 123.123.123.123 -- 轉發 --> 123.123.123.124:3001
上面示例中相當於將遠程主機 123.123.123.124 的 3001 端口映射為本地的 3000 端口,這樣就可以通過局域網訪問被限制的公網服務了。

遠程轉發(反向代理)

遠程服務器上監聽指定端口,該端口收到的請求會通過本地轉發到另一台機器的指定端口上
  • 語法:
ssh [-p ssh_port] -R [bind_address:]port:host:hostport user@remote_host

解釋:
語法和 -L 一樣,只不過監聽側和目標側的網絡對換而已
port:在遠程主機 user@remote_host 上監聽的端口
bind_address:遠程主機 user@remote_host 監聽端口使用的地址(如:remote_host,127.0.0.1,0.0.0.0)。
和 -L 有點區別,指定IP需要在遠程主機上修改 /etc/ssh/sshd_config 中的配置:GatewayPorts。"yes" 表示 強制為 0.0.0.0; 默認為 "no" 表示強制為回環地址 127.0.0.1;"clientspecified" 表示由客戶端決定
host:轉發的目標IP
hostport:轉發的目標端口
注意:
host:hostport 是本地主機所能訪問到的地址(包括本機),遠程主機 user@remote_host:ssh_port 不一定能訪問該地址
  • 示例:
ssh -p 23 -Nf -R 172.17.0.1:3000:192.168.1.100:3001 root@123.123.123.123

說明:
1. 通過 23 端口 ssh 遠程服務器 123.123.123.123,使用帳號 root 登錄
2. 123.123.123.123 監聽端口 172.17.0.1:3000 (遠程服務器運行 docker , 多了一個虛擬網絡 172.17.0.0)
3. 192.168.1.100 和 本地主機 在一個局域網下,而 123.123.123.123(外網) 不能直接訪問 192.168.1.100(內網)
4. 192.168.1.100 主機通過 3001 端口開放服務
5. 調用鏈路:遠程服務器中訪問 --> 172.17.0.1:3000 -- ssh 隧道 --> 本地 -- 轉發 --> 192.168.1.100:3001
上面示例中相當於將局域網主機 192.168.1.100 的 3001 端口映射為遠程服務器 123.123.123.123 的 3000 端口,這樣就可以通過公網來訪問局域網中的服務了。

動態轉發(S5代理)

監聽本地的指定端口,本機將作為 SOCKS5 服務器使用
  • 語法:
ssh [-p ssh_port] -D [bind_address:]port user@remote_host

解釋:
port:本地監聽的端口
bind_address:監聽端口使用的本地地址(如:192.168.1.2,127.0.0.1,0.0.0.0), 不設置默認為回環地址127.0.0.1
注意:
啟動 socks5 代理
代理使用示例:
curl --socks5 bind_address:port baidu.com
  • 示例
ssh -p 23 -Nf -D 127.0.0.1:3000 root@123.123.123.123

說明:
1. 通過 23 端口 ssh 遠程服務器 123.123.123.123,使用帳號 root 登錄
2. 本地監聽端口 127.0.0.1:3000
3. 調用鏈路:本地局域網中訪問任意http服務 -- 使用代理 --> 172.17.0.1:3000 -- ssh 隧道 --> 123.123.123.123 -- 轉發 --> 目標http服務
上面示例中相當於開啟了一個代理服務器,比起 本地轉發 需要指定具體端口來說更加方便。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM