ssh
ssh tunnel實現(xiàn)反向代理
假設(shè)在內(nèi)網(wǎng)有一個自己的電腦IN腰根,希望在外網(wǎng)訪問內(nèi)網(wǎng)資源。由于內(nèi)網(wǎng)電腦沒有公網(wǎng)IP拓型,所以外網(wǎng)無法直接向內(nèi)網(wǎng)電腦發(fā)起連接额嘿。為實現(xiàn)我們的目標(biāo),需要從內(nèi)網(wǎng)電腦主動向一個外網(wǎng)服務(wù)器(具有公網(wǎng)IP即可)發(fā)起一個連接劣挫,外網(wǎng)通過這個服務(wù)器使用這一連接册养,再通過內(nèi)網(wǎng)電腦訪問內(nèi)網(wǎng)資源。
外網(wǎng) -> 服務(wù)器(S) <-> 內(nèi)網(wǎng)主機(jī)(I) -> 內(nèi)網(wǎng)
在內(nèi)網(wǎng)電腦上操作压固,將外網(wǎng)服務(wù)器的localhost地址和內(nèi)網(wǎng)主機(jī)映射起來球拦,外網(wǎng)服務(wù)器localhost的222端口映射到內(nèi)網(wǎng)主機(jī)的22端口帐我。同時坎炼,外網(wǎng)服務(wù)器SERVER_IP的PORT端口映射到localhost的222端口。222和22可以替換為其他端口號拦键。
SERVER_IP:PORT <-> localhost:222 <-> 內(nèi)網(wǎng)主機(jī):22
# Add -v to the ssh command to get some debugging information
$ ssh -CR 222:localhost:22 SERVER_USER@SERVER_IP
# 輸入root密碼登陸外網(wǎng)服務(wù)器
# -4 use ipv4谣光,server_ip=0.0.0.0/192.168.0.1/localhost
ssh -CfND SERVER_IP:PORT -p 222 LOCAL_USER@localhost
# 輸入LOCAL_USER密碼完成與內(nèi)網(wǎng)主機(jī)的連接
# 測試
curl --socks5 SERVER_IP:PORT LOCAL_SITE
其中:
-
SERVER_USER
為外網(wǎng)服務(wù)器的用戶名 -
SERVER_IP
為外網(wǎng)服務(wù)器的公網(wǎng)IP或域名 -
LOCAL_USER
為內(nèi)網(wǎng)主機(jī)的用戶名 -
LOCAL_SITE
為內(nèi)網(wǎng)站點
參考資料
- Proxy Using SSH Tunnel
- SSH Port Forwarding on Linux
- What does the Broken pipe message mean in an SSH session?
- 怎樣從外網(wǎng)訪問內(nèi)網(wǎng)服務(wù)器
- ssh tunnel - bind: Cannot assign requested address
如果配置未成功,檢查sshd的配置芬为,確保ssh配置如下
vi /etc/ssh/sshd_config
GatewayPorts yes
PermitTunnel yes
TCPKeepAlive yes
AllowTCPForwarding yes
PermitOpen any