自己尝试成功了就记录下。

原理是这样的:

android手机上面给网络连接设置本地代理,本地代理服务器收到请求后通过ssh隧道转发到远程服务器,这种ssh本地转发到远程服务器后会请求服务器上的指定远程端口,而这个端口才是真正的代理,它去请求真正的目标服务器,获取到数据后逆着一步步返回。
需要的工具:
1.国外服务器一个ssh账号,并且可以安装nginx等web server(比如还可以用squid)用于代理。
2.sshtunnel,点击这里下载。
3.当然还要一部android手机。
首先在手机上安装sshtunnel,然后运行进行设置:

主机地址,端口,用户名和密码都是ssh设置。

本地端口是指android手机上的应用使用本机的这个端口作为代理,让sshtunnel帮忙转发到远程ssh服务器。

远程端口是指远程ssh服务器收到ssh隧道转发的数据后再使用远程端口那个作为代理进行请求。这里有人可能会有疑问:为什么本机不能直接指定ssh服务器上面的这个远程端口作为代理呢?这里有两个原因:

1.我的ssh服务器上安装的ngnix只能从本地进行连接,所以先通过ssh转发到服务器上再进行请求。

2.通过ssh转发来进行加密。

设置完成后,启动sshtunnel后台服务。然后到设置->无线和网络->代理设置里面设置代理为:127.0.0.1:本地端口。如下图:

接下去在服务器端安装ngnix,在配置文件里面http节点里面加入如下行:

resolver 8.8.8.8;#dns服务器设置
server
{
listen localhost:60000;#监听端口,就是sshtunnel里面设置的远程端口
location /
{
proxy_pass http://$http_host$request_uri;#代理设置
}
}

可惜的是本人服务器不是vps,不支持443端口的绑定,因此无法继续尝试https的转发,有经验的同学欢迎指点。

 

有关ssh转发的文章可参考:

https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 实战ssh端口转发