内网机器:192.168.1.2 外网vps地址;122.114.250.153
内网机器192.168.1.2执行:
ssh -fCNR 7280:127.0.0.1:8882 root@122.114.250.153
将内网机器的127.0.0.1的8882端口,通过主动连接外网的122.114.250.153的ssh,映射到外网vps的122.114.250.153的7280端口,实现网络穿透.这样访问122.114.250.153的7280就可以相当于直接访问内网的8882端口了.
注意ssh只能够将内网的端口转发到外网,不能够动态的自动内网代理.如果你需要通过互联网代理直接穿透到内网,一般来说有两个方法:
在内网机器可以建立一个透明代理(如Tinyproxy)8882端口,然后再将这个8882端口映射到外网vps的7280.本地浏览器直接将代理服务器设置为122.114.250.153:7280就可以访问到内网的资源了.
ssh -fCNR 7280:127.0.0.1:22 root@122.114.250.153
通过ssh主动反向链接外网并将ssh端口映射到122.114.250.153,
这样你链接122.114.250.153的7280就相当于链接到了内网的22(ssh)
执行:
ssh -qTfnN -D 7070 root@122.114.250.153 -p 1080
这时候在浏览器中设置代理122.114.250.153:1080.就可以直接输入地址访问内网中的资源了
vps一般情况下ssh默认转发只会映射到本地的127.0.0.1的端口.如果你需要映射到0.0.0.0让外网访问.修改配置 /etc/ssh/sshd_config中设置GatewayPorts为yes,然后重启ssh服务,再次进行转发即可
因为ssh时间未操作会自动断开,所以需要搭建稳定的ssh工具,autossh就是用来解决这个问题的。
apt-get install autossh
在内网客户端机器执行:
autossh -M 5555 -NR 7280:127.0.0.1:8882 root@122.114.250.153
vps端口:内网监听地址:tinproxy端口 远程vps用户名:vpsIP
//输入密码后会站住当前终端
注意-M 5555是指定本地5555来链接到外网的ssh 如果你需要运行多条通道需要指定别的端口,如果占用则autissh无法成功建立连接!
例如本机使用autossh和server1和server2建立通道
autossh -M 5555 -NR 7280:127.0.0.1:8882 root@server2
autossh -M 4444 -NR 7280:127.0.0.1:8882 root@server1
这时候你来到外网的vps上面就可以看到,vps监听了7280端口
注意,如果和外网通信的内网机器的ip地址改变,会导致整条通道断开。这时候autossh还在后台运行,重新链接需要重新进行建立一条通道,需要在内网机器上杀死autossh进程,然后外网杀掉7280端口。