出於安全考慮公網IP僅暴露了內網跳板機的22端口,想借用ssh端口轉發實現簡易內網穿透。html
以前的文章經過ssh隧道實現tcp端口轉發介紹了ssh正向轉發(local port forward)
比較適合在外網訪問內網資源,如內網http服務
假設跳板機的22端口經過端口映射暴露在公網123.45.67.89:2222ubuntu
ssh -L 8080:192.168.1.4:80 jump@123.45.67.89 -p 2222
可經過ssh將內網的192.168.1.4:80轉發至本機的8080
對於明文傳輸http也起到了加密做用,適用於不安全的網絡環境
而此次的目的是將本地端口轉發至內網,實現內網對本地的遠程訪問後端
使用ssh自帶的反向轉發(remote port forward)安全
ssh -R 80:localhost:8080 jump@123.45.67.89 -p 2222
上述命令經過ssh將本地的80端口轉發至跳板機的8080端口
但默認狀況下轉發端口僅容許本地訪問,不對局域網開放,須要修改GatewayPorts
參數位於/etc/ssh/sshd_config
網絡
GatewayPorts - "Specifies whether remote hosts are allowed to connect to ports forwarded for the client. By default, sshd(8) binds remote port forwardings to the loopback address. This prevents other remote hosts from connecting to forwarded ports. GatewayPorts can be used to specify that sshd should allow remote port forwardings to bind to non-loopback addresses, thus allowing other hosts to connect."session
取消註釋GatewayPorts
並修改默認值no爲yes後重啓sshd服務便可生效。該設置容許轉發後的端口綁定在0.0.0.0上,確保從每一個網卡的ip上都能訪問到8080服務。有關0.0.0.0和127.0.0.1的區別參考文末連接併發
即便經過ssh -Nf
參數後臺執行,上述方法缺點依然明顯,session斷開後端口轉發隨之消失。
想要實現相似商用內網穿透的開機自動鏈接能夠使用autossh進行自動鏈接併發送心跳包ssh
security - How to create a restricted SSH user for port forwarding? - Ask Ubuntu
SSH Tunneling (Port Forwarding) 詳解 · John Engineering Stuff
127.0.0.1和0.0.0.0地址的區別 | 程式前沿tcp