内网机器:192.168.1.2外网vps地址;122.114.250.153
内网机器192.168.1.2执行:
ssh-fCNR7280 :127.0.0.1:8882root@ 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只能够将内网的端口转发到外网,不能够动态的自动内网代理.如果你需要通过互联网代理直接穿透到内网,一般来说有两个方法:
如果你可以在内网的机器上创建一个透明代理端口且可以内网机器使用ssh:
在内网机器可以建立一个透明代理(如Tinyproxy)8882端口,然后再将这个8882端口映射到外网vps的7280.本地浏览器直接将代理服务器设置为122.114.250.153:7280就可以访问到内网的资源了.
如果你不能创建一个代理端口,只可以使用ssh,且知道内网主机的ss用户密码(后面使用的都是root) 先将内网的ssh映射到外网
ssh-fCNR7280 :127.0.0.1:22root@ 122. 114. 250. 153通过ssh主动反向链接外网并将ssh端口映射到122.114.250.153,
这样你链接122.114.250.153的7280就相当于链接到了内网的22(ssh)
客户端主动链接vps的7280(内网的ssh)来创建代理隧道
执行:
ssh-qTfnN-D7070 root@ 122. 114. 250. 153-p 1080这时候在浏览器中设置代理122.114.250.153:1080.就可以直接输入地址访问内网中的资源了
注意ssh绑定地址到0.0.0.0
vps一般情况下ssh默认转发只会映射到本地的127.0.0.1的端口.如果你需要映射到0.0.0.0让外网访问.修改配置/etc/ssh/sshd_config中设置GatewayPorts为yes,然后重启ssh服务,再次进行转发即可
关于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:8882root @server2autossh -M 4444-NR 7280: 127.0.0.1:8882root @server1
这时候你来到外网的vps上面就可以看到,vps监听了7280端口
IP地址切换导致断网
注意,如果和外网通信的内网机器的ip地址改变,会导致整条通道断开。这时候autossh还在后台运行,重新链接需要重新进行建立一条通道,需要在内网机器上杀死autossh进程,然后外网杀掉7280端口。