ssh端口反向代理與內網穿透

背景

出於安全考慮公網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

相關文章
相關標籤/搜索