Total Pageviews

Sunday, 9 June 2019

返璞归真,重新用ssh tunnel翻墙

登陆linux vps.然后
useradd some_username 

passwd some_username

把创建好的ssh用户名和密码填入ssh客户端程序。并在ssh客户端程序中,设置本地监听的端口号,比如7071.当然还要填入vps的ip和ssh端口号。

然后设置浏览器的socks5代理服务器的地址为127.0.0.1, 端口:7071 ,浏览器即可翻墙。
建议使用chrome浏览器。

用ssh tunnel翻墙后,看youtube流畅得很。ssh tunnel是加密连接,gfw是几乎破解不了它的。ssh客户端程序通常有连接断开后,自动重连的功能。所以根本不用担心ssh连接会断开的问题。

ss的作者clowwindy对ssh tunnel容易断开连接的问题似有不满,所以发明了ss.但是实际上,担心ssh连接会断开纯属多余的担心。

而且感觉用ss或其他方法去翻墙而不用ssh tunnel翻墙是典型的舍本逐末行为,很不值得,费力不讨好。而且用ss或其他方法未必比使用ssh tunnel翻墙的速度快。
-----------

分享我在iPhone和iPad上的翻墙方案(Mac也适用):用SSH+PAC,一劳永逸。

分享我在iPhone和iPad上的翻墙方案(Mac也适用):用SSH+PAC,一劳永逸。基本上大家都用VPN在iPhone和iPad上(以下简称iPhone)翻墙,这东西的优点我就不说了,缺点如下:
  • 翻墙之前必须先拨号,等待拨通了才能用;
  • 因为iPhone电源管理的特点,待机一会儿后VPN连接会被断掉,想再用还得拨号;
  • VPN连通了以后即便访问国内网站,也要从国外绕一圈再回来,速度慢不说,有些国内的服务因为版权根本不对国外开放访问。
对我这样要经常在手机上访问国外站点的人来说,没完没了地用VPN拨号就显得太麻烦了。因此花了差不多一周的时间,研究出了一套在手机上用ssh+pac翻墙的方案。这事儿在电脑上一点也不难,但是移动设备有很多特殊性,因此走了很多弯路,好在现在成功了,很安逸!
此ssh方案的好处
  • 一劳永逸。设置好了iPhone可以随时随地翻墙,你什么都不用管,就好像肉身翻墙一样;
  • 支持pac列表。通俗地说就是:对于访问需要翻墙的网站来说你是美国人(你是哪国人取决于你的ssh主机在哪儿),对于其它网站你是中国人,不绕道,访问速度不受影响;
  • 支持wifi、3g和edge等各种网络;
  • 支持在特定情况下自动建立翻墙ssh隧道(ssh隧道是用来翻墙的,可以理解成代理)。比如我的设定是只有存在网络连接时才建立隧道,这样可以省电。你也可以设成“运行某个程序时才建立隧道”、甚至只在某天的特定时间建立隧道等等;
  • ssh连接断开自动重连。
此方案需要你
  • iPhone已经越狱;
  • 有可用于ssh翻墙的主机;
  • 有Linux/Unix的基础知识,或者你愿意为了解决问题不停Google。
言归正传,下面开始介绍怎么弄准备工作
  • 在iPhone上运行Cydia,在“管理”-“设置”中把身份改成“骇客”,然后搜索安装OpenSSH、cURL、Vi IMproved、shell-cmds、network-cmds、Mobile Terminal和adv-cmds;
  • 下载autoproxy.sh,用文本编辑器打开,把felixding@dingyu.me改成你自己的ssh主机地址,然后把这个文件拷贝到iPhone的/bin目录下;
  • 下载autoproxy.pac,放到iPhone的/var/preferences/SystemConfiguration目录下。版权声明:原始的pac文件来自于http://autoproxy2pac.appspot.com/,我下载后进行了解密和修改;
  • 下载com.autoproxy.plist,放到iPhone的/System/Library/LaunchDaemons目录下。
好了,基本上你已经完成了50%,其实不难。
设定基本的ssh连接现在我们要开始在iPhone上翻墙了。
  • 在电脑上用ssh连接iPhone。假设你iPhone当前在网络中的ip是192.168.1.100,则执行(Windows用户可以用putty):
    ssh root@192.168.1.100
    连接时可能会问你是否加入信任列表,回答yes,默认密码是alpine(强烈建议得空便修改密码)。然后你就登录进了iPhone;
  • iphone上ssh连接你的翻墙主机。如果你之前用过ssh翻墙,这里没什么两样。但一定要把iPhone的ssh public key放在主机上。放好key后可以再连接测试一下,确认没问题了再继续;
  • 现在万事俱备,在iPhone上进入“设置”-“WI-FI”,找到你家的无线网络,把“HTTP 代理”改为“自动”,然后在下面的文本框中输入
    file:///var/preferences/SystemConfiguration/autoproxy.pac
恭喜!你全部搞定了,现在重启iPhone,连接至你家里的无线网络,开始体验墙外的世界吧!

常见问题

重启后翻墙失败
等2分钟。系统每隔2分钟会检测一次ssh的连接状态,有问题会自动帮你重连。

2分钟以后还是不行
ssh连接至你的iPhone,然后执行:
curl --connect-timeout 10 --socks4 localhost:10086 http://dingyu.me/the-matrix.html
如果看到“<h1>Yes, this is the Matrix!</h1>”,说明ssh连接是畅通的,请检查iPhone上“HTTP 代理”的pac文件路径是否写对了。
如果出现“curl: (7) couldn't connect to host”,说明ssh连接有问题,你先按照电脑上用ssh翻墙的办法配置好ssh吧。

配置3G/Edge网络的翻墙
这非常简单,只要想办法让iPhone在此类网络下使用pac就行了。方法如下:
  • ssh连接至你的iPhone,执行:
    plutil -convert xml1 /var/preferences/SystemConfiguration/preferences.plist
  • 用vi编辑这个plist文件(如果你不会vi,把它拷贝到电脑上编辑完了再拷贝回来也是可以的),寻找“ip1”这个关键字,按照附件截图改;
  • 保存后重启你的iPhone。现在你自由了!
想办法省电
如果你配置了在3G/Edge网络下翻墙,那么就等于在此网络下ssh连接是一直保持的,所以费电是显而易见的。

其实我觉得这个问题你可以不用理会,因为无论如何优化,iPhone的待机时间都不会很长,尤其是使用3G上网。既然没办法使iPhone的待机时间变得更为可靠,不如索性随时在办公室充电,再准备一块移动电池以应付出差或旅游。

但是,如果你一定要优化待机,方法还是有很多的。我实践下来最简单有效的方法,就是用sbsettings把网络给关了,需要时再开。另外用launchd的KeepAlive参数配合脚本,可以实现很多更为灵活的方法,比如检测到只有在运行某个程序时再翻墙等等。launchd的使用手册见 http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man5/launchd.plist.5.html

为什么用launchd而不是脚本、ssh内建方法或者autossh来保持ssh隧道?
我都用过。为什么折腾出这个方案要一周时间?就是因为我尝试了各种方法去保持ssh隧道的连接,但除了launchd都不行。这些方法包括:
  • ssh -o TCPKeepAlive=yes;
  • 在ssh_config中加入ClientAliveInterval或ServerAliveInterval;
  • 用shell脚本中的while和sleep循环;
  • 用netcat监测;
  • 用autossh。
最后发现launchd是最可靠和灵活的。

-----------------------------------

mac上的一款ssh client app:
https://briteming.blogspot.com/2018/02/macssh-proxy-app.html

各平台下的免费SSH 客户端:

https://briteming.blogspot.com/2015/07/ssh.html


No comments:

Post a Comment