不越狱的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分钟连接。这个问题,只能每隔几分钟把它切换到前台一次来解决了。

vSSH
仿照填好各项信息后,连接。得到 socks5 代理(127.0.0.1:1080)。
(vSSH 看来不支持没有 Shell 权限的 SSH 账号登陆)
写了封信联系他们,现在可以用没有 Shell 权限的 SSH 账号登陆了。

令 iOS 设备使用 socks 代理,要准备一个 pac 文件,这里命名为 socks.pac

将文件保存到 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 文件的。)

PAC

这样 Safari, youtube app, twitter app 等都走代理了。

Safari

但 facebook app (8.0) 因为有部分请求不走代理,DNS会被污染,所以只是部分能用。(下面查询到的 IP 都是污染了的)

1.graph.fb
居然还能 SSL 握手。

2.api.fb

3.m.fb

4.b-api.fb

另外,iOS 的代理设置也不安全。即使填了 pac 文件,但 SSH 断开了的话,所有 Apps 都变成直连了,这直接暴露所连接的目标了。
为了防止,用 iCabMobile 可能更好。关闭 iOS 系统处的代理,在 iCabMobile 设好 Socks 代理。

iCabMobile_Socks

当 SSH 断开时,就会报错了。

iCabMobile_Disconnected

看上去很完美,但访问 http://m.youtube.com 时,还是发现问题了。
*.googlevideo.com 的请求不走代里,会被 DNS 污染。试着在路由里“挟持” *.googlevideo.com 的 A 记录,改成正确的IP。

http_googlevideo.com_RST

还是不行。连接 http://*.googlevideo.com 时会收到重置包。
如果改成 httpS 呢,访问 httpS://m.youtube.com 。

httpS_googlevideo.com_RST

还是重置,googlevideo 的证书被认证了。

再尝试把 iOS 系统的代理开启(系统的和 iCabMobile 的代理都开启),这样所有流量居然都走代理了。

iCabMobile_works
It works!

三、本地转发

iOS 上绝大多数的网络软件都不支持代理设置,如 RDP 类的软件,为了防止远程桌面连接的目标 IP 暴露,可以使用 SSH 的本地转发代理之。
iOS 上的 iSSH, vSSH 都可以实现 SSH 的本地转发,但 iSSH 集成了 RDP 功能,所以直接在 iSSH 里启用本地转发和使用 RDP, 就不必担心后台保持连接的问题了。

在 iSSH 里新建 SSH tunnel ,

iSSH_1

iSSH_2

然后 RDP 连本机。

iSSH_3

即可实现代理 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" ,提示连接将被中断,如下图。

iSSH
vSSH

但每隔几分钟就要切过去一次,也挺麻烦的。

2. 为防止个人隐私和敏感信息的泄露,还是建议使用 SSH 转发和 iCabMobile 的组合,因为即使网络"不稳定"使 SSH 断开了,iCabMobile 也会因无法连接 127.0.0.1:1080 而中断传输数据。而用 VPN 的话,若 VPN 断开了,数据仍会继续传输,这样将会泄露数据。
3. 网上也有一些 http 代理供使用,但因其是明文通讯,所以极不推荐用于安全通信。
4. 不能代理 Skype 之类的应用的 UDP 协议流量。

本文目前尚无任何评论.

发表评论

XHTML: 您可以使用这些标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*