SSH做Sock代理

开源软件openssh提供了sock代理支持,使用也非常方便。只要能够ssh到一台服务器,就能够通过那台服务器代理上网了。

假设有ssh服务ssh://user@sshServer

在本地运行
$ ssh -N -f -D 8000 user@proxy-server

127.0.0.1:8000就是一个sock代理了。-N是不要远程执行命令,-f是后台运行。

考虑复杂的一点的情况,假设有一台内网服务器ssh://a@A,公网服务器ssh://b@B。其中a,b分别为A,B上的用户。现在想通过A代理上网。则可以通过ssh建立B到A的隧道。将A的ssh服务暴露出来。如下:

服务器A
$ ssh -Nf -o ServerAliveInterval=29 -R *:8022:127.0.0.1:22 b@B

服务器B

修改sshd_config(ubuntu上是/etc/ssh/sshd_config),确保GatewayPorts=yes,以允许在所有地址上监听8022端口

本地
$ ssh -N -f -D 8000 -p 8022 a@B

ServerAliveInterval=29是每隔29秒在隧道上传送一段数据,以保持网关的NAT长期有效。-R是将远端的8022端口映射为本地的22号端口,也就是ssh服务所在的端口。

ssh

相关推荐