不越狱的iOS设备实现SSH端口转发
一、概述
当你在家或在公司,总之能控制路由器的话,当然有很多方法(全局或自动地)代理 iPad, iPhone, iPod Touch 的流量。或者即使不能控制路由器,但身边有电脑的话,也可以在电脑上运行各种 VPN client, (Obfuscated) SSH client, Shadowsocks client 或其他混淆协议的 client 等,来得到 socks 或 http 代理,供 iPad, iPhone 连接使用。
但当你外出,没有电脑,仅有一台(不越狱的) iPad 或 iPhone ,网络只有不安全的 WiFi 或移动网络时,如何安全地传输数据,避免个人隐私和敏感信息的泄露,就是一个重要的问题。
二、动态转发
iOS 上的 vSSH 可以实现 SSH 的动态转发。(vSSH, vSSH HD, 它的免费版 vSSH Lite, vSSH HD Lite)
按其介绍,"Background work (up to 10 minutes, alert on timeout)",当切换到后台时最多可保持10分钟连接。这个问题,只能每隔几分钟把它切换到前台一次来解决了。
仿照填好各项信息后,连接。得到 socks5 代理(127.0.0.1:1080)。
(vSSH 看来不支持没有 Shell 权限的 SSH 账号登陆)
写了封信联系他们,现在可以用没有 Shell 权限的 SSH 账号登陆了。
令 iOS 设备使用 socks 代理,要准备一个 pac 文件,这里命名为 socks.pac
1 2 3 4 |
function FindProxyForURL(url, host) { return "SOCKS 127.0.0.1:1080"; } |
将文件保存到 Dropbox 或其他支持外链的网盘,如保存到 Dropbox 的话,得到的该 pac 文件的链接大致为
https://dl.dropboxusercontent.com/s/4g80rmf3aamk50a/socks.pac?dl=1&token_hash=MKJtaMjKAIQMkAqb49YyUCIp9u3_U_Qe0X35MuEK38hmMA
然后把链接写到 HTTP 代理的 URL 处。
(不要指望把 pac 文件放到 Documents 之类的文件管理应用里,然后开网络驱动器,把文件以 http 方式"共享"给系统读取。Documents 一切换到后台,"共享"就很快关闭了,而系统是会多次读取 pac 文件的。)
这样 Safari, youtube app, twitter app 等都走代理了。
但 facebook app (8.0) 因为有部分请求不走代理,DNS会被污染,所以只是部分能用。(下面查询到的 IP 都是污染了的)
另外,iOS 的代理设置也不安全。即使填了 pac 文件,但 SSH 断开了的话,所有 Apps 都变成直连了,这直接暴露所连接的目标了。
为了防止,用 iCabMobile 可能更好。关闭 iOS 系统处的代理,在 iCabMobile 设好 Socks 代理。
当 SSH 断开时,就会报错了。
看上去很完美,但访问 http://m.youtube.com 时,还是发现问题了。
*.googlevideo.com 的请求不走代里,会被 DNS 污染。试着在路由里“挟持” *.googlevideo.com 的 A 记录,改成正确的IP。
还是不行。连接 http://*.googlevideo.com 时会收到重置包。
如果改成 httpS 呢,访问 httpS://m.youtube.com 。
还是重置,googlevideo 的证书被认证了。
再尝试把 iOS 系统的代理开启(系统的和 iCabMobile 的代理都开启),这样所有流量居然都走代理了。
三、本地转发
iOS 上绝大多数的网络软件都不支持代理设置,如 RDP 类的软件,为了防止远程桌面连接的目标 IP 暴露,可以使用 SSH 的本地转发代理之。
iOS 上的 iSSH, vSSH 都可以实现 SSH 的本地转发,但 iSSH 集成了 RDP 功能,所以直接在 iSSH 里启用本地转发和使用 RDP, 就不必担心后台保持连接的问题了。
在 iSSH 里新建 SSH tunnel ,
然后 RDP 连本机。
即可实现代理 RDP 连接。
当然, iSSH 的 RDP 功能用户体验实在做得不够好。习惯于其他 RDP 软件的用户,也可以使用 iSSH 或 vSSH 创建一个本地转发的 socks 代理,如 127.0.0.1:3389 ,然后用喜欢的 RDP 软件,如 PocketCloud,连接 127.0.0.1:3389 。
至于 iSSH 或 vSSH 切换到后台后,大约有 3 分钟时间保持着“正常”连接。大约 3 分钟后,将会断流,即使这时 TCP 连接状态是 ESTABLISHED。
四、总结
1. 不越狱的 iOS 设备要使用 SSH 端口转发的确有一些不便,如后台应用经过一段时间后会被挂起。虽然 iSSH 和 vSSH 都有 "Background Alert" ,提示连接将被中断,如下图。
但每隔几分钟就要切过去一次,也挺麻烦的。
2. 为防止个人隐私和敏感信息的泄露,还是建议使用 SSH 转发和 iCabMobile 的组合,因为即使网络"不稳定"使 SSH 断开了,iCabMobile 也会因无法连接 127.0.0.1:1080 而中断传输数据。而用 VPN 的话,若 VPN 断开了,数据仍会继续传输,这样将会泄露数据。
3. 网上也有一些 http 代理供使用,但因其是明文通讯,所以极不推荐用于安全通信。
4. 不能代理 Skype 之类的应用的 UDP 协议流量。
近期评论