ssh tunnel 反向代理(內網穿透)
- 通過外網主機的特定端口訪問內網主機特定端口的網絡服務
設備信息
- 47.93.199.97 外網代理主機,用來代理內網主機的網絡服務。不能訪問192.168.10.2內網主機
- 192.168.10.2 內網主機,可以通過ssh客戶端登錄外網47.93.199.97主機
示例場景
- 通過ssh [email protected] -p 2222的方式登錄192.168.10.2主機(通過47.93.199.97的2222端口,訪問192.168.10.2的22端口的ssh服務)
- 通過47.93.199.97的23306端口訪問192.168.102主機的3306端口的mysql服務
環境準備
- 使用root分別能夠登錄 47.93.199.97, 192.168.10.2(非root請使用sudo切換root權限)
外網代理主機(47.93.199.97)
- 允許代理的服務綁定到0.0.0.0地址,允許其他主機遠程訪問服務端口
- 編輯/etc/ssh/sshd_config, 增加或者設置GatewayPorts配置
- 需要重啓ssh服務
GatewayPorts yes
- 保持代理服務端與客戶端長時間有效
- 編輯/etc/ssh/sshd_config, 增加或者設置ClientAliveInterval,ClientAliveCountMax 配置
- 需要重啓ssh服務
ClientAliveInterval 60 #服務端主動向客戶端請求響應的間隔 ClientAliveCountMax 10 #服務器發出請求後客戶端沒有響應的次數達到一定值就自動斷開
- 重啓ssh服務
service ssh restart
內網被代理主機(192.168.10.2)
- 保持客戶端與代理服務端長時間有效
- 編輯/etc/ssh/ssh_config(服務端的配置文件sshd_config,注意區別),增加或設置TCPKeepAlive,ServerAliveInterval 配置
TCPKeepAlive yes #保持與服務端的tcp連接
ServerAliveInterval 60 #客戶端主動向服務端請求響應的間隔
代理搭建
ssh代理服務
- 在內網主機執行下面的指令,然後輸入密碼,即可完成代理服務搭建
ssh -NfR <remote binding host>:<remote bing port>:<local host>:<local port> <remote login user>@<remote host>
- 在192.168.10.2內網主機執行以下指令,搭建ssh代理服務
ssh -NfR *:2222:127.0.0.1:22 [email protected]
mysql代理服務
- 在192.168.10.2內網主機執行以下指令,搭建mysql代理服務。通過47.93.199.97的23306端口即可訪問內網主機192.168.10.2的3306端口的mysql服務
ssh -NfR *:23306:127.0.0.1:3306 [email protected]