科学上网

科学上网这件事情越来越困难了。继8月28日起,魔都的联通 3G 把 GRE 协议封禁后,PPTP 以及相关的 VPN 连接都无法使用。好吧,其实某的方法也算简便了。 家里网络都 OK ,只需要在外边 3G 能拨 PPTP 到家里就行了。 iOS 的 VPN 设置能带上 http proxy ,这样浏览器和其他使用 HTTP 数据流的应用都没问题。可恶的联通现在把 GRE 协议封禁后不光连不到国外,连本地的 PPTP 都连不上。

为什么不用更安全的方法连到家里

某也想啊,但是很尴尬某的 iPhone 上把系统升级到 6.1.3 ,现在这不还没完美越狱吗,看到每次重启开机都好蛋疼要引导才能 boot 起来;另外 4S 是 A5 设备,所以无法降级到 6.1.2 ,用 iTunes 刷机肯定不用想,和 Apple 服务器验证时就通不过。 用其他软件刷完会无限 DFU 模式,最终只能升回来。所以在 6.1.3 出完美越狱前只能另谋方法了。

来源参考

什么是 APN 代理

使用手机上网的用户应该不会陌生,不论使用哪家运营商,在上网时手机里都需要填写 APN 配置,其实就是按照名字自动寻找网络配置,网上可以搜到一大把这样的介绍。简而言之不论是 2.5G 的 GPRS ,还是 3G ,总需要接入网络,网络则是使用 APN 名字来识别的,比如 联通 在国内的 3G APN 名字就是 3gnet

道理一样,在 APN 设置时会有一项『代理』,这样就可以让移动数据流量走设置的代理服务器。这里需要说明的是代理服务器是普通的 HTTP Proxy Server , 如果是 socks 那是不会工作的哦。手机上非 HTTP 的数据也不会走这个代理服务器。

另外需要说明的是这个代理服务器设置完后,在手机和代理服务器间的访问都是无加密的,说白了就是明文通信,所以肯定没直接拨 VPN 来的安全。强烈不建议作为重要数据通信的链路

对于某自己而言,也只是暂时的解决方案。能越狱后折腾个 ssh 也比这个靠谱吧。能 openvpn 是最好了。

如何在 iPhone 上设置 APN 代理。

生成配置 profile 文件

根据网上的说法,可以使用一些应用来修改不过某没试过,各位巨巨可以尝试。

某推荐的方法是使用一个 Apple 官方提供给企业应用的软件叫做 iPhone Configuration Utiliy ,它是为了批量部署修改 iPhone 配置的管理软件。可以通过这款软件生成 iPhone 配置的 Profile ,文件以 .mobileconfig 为后缀(本质是带可选加密验证信息的 xml 啦)。

软件可以从 Apple 官方网站下载, Windows 用户戳这里Mac 用户戳这里

某使用的是 Mac 版, Win版应该类似。

打开主界面后,我们从左边选择配置,新建配置,取一个名字和识别名,配置类型滚到最下面有一个 APN 配置,新建,输入 access point 的名字, 联通 3G 使用 3gnet。下面分别有 proxy usernameproxy passwordproxy serverproxy port 设置。

例如这里某使用自己的动态域名,另外需要注意某测试的时候发现 squid 默认端口 3128 是连不到的(这…) ,可以换一个其他不常用的端口。

最后填写完成后选择左上角或者菜单里的 export 保存成 .mobileconfig 文件。记得导出的时候选择带签名。

这里如果其他地方没有需要配置的,记得一定要把选项关闭掉(点右上角那个减号),否则生成出来的文件可能会导致下面在 iPhone 上导入的时候出现 unknown error 错误。

在 iPhone 上使用配置

将这个文件放到可以通过 http 方式访问的地方,例如本地局域网的 apache 目录下。然后在 iPhone 上用 Safari 打开。

会出现类似如图里的导入确认信息。导入成功后已经生效,不需要重启手机。

实际到这步手机的配置已经完成了。这时换成 3G 信号尝试上网,如果配置的 proxy server 没问题的话,就 OK 啦。

如果配置完发现不能使用 3G 上网请确认配置是否有误,重复前面一步导出文件,再在 iPhone 上导入。

如果始不成功,iPhone 上删除 Profile 还是不能 3G 上网的话,在重置里把网络重置掉。

(背景)搭建可接受的 proxy server

可用的 proxy server 有很多,比如 squid / polipo / tinyproxy 等等。不过需要注意这个端口是暴露在公网上的,所以最好带上身份信息验证,以防止被肆意使用。

基于此原因, polipo 就无法使用了,根据官方文档的说法,使用 authCredentials 配置可以使用身份验证,但某这里测试无效,依旧可以直接访问…

所以还是回到 squid 。配置 basic http authentication 比较简单,可以参考官方文档

# acl
auth_param basic program /usr/libexec/squid/basic_ncsa_auth /etc/squid/squid_htpasswd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 142 hours
auth_param basic casesensitive off

生成用户信息文件

$ htpasswd /etc/squid/squid_htpasswd your_user_name

但是某又不希望局域网里其他机器访问都需要这个身份验证。文档里也给出了方法,大致参考如下:

acl localnet 192.168.0.0/24
acl lcalhost 127.0.0.1
acl APN_USERS squid_auth REQUIRED

http_access allow localhost
http_access allow localnet
http_access allow APN_USERS
http_access deny all

** htpasswd 命令在 apache-tools 包里,不高兴把整个 apache 安装的话,可以用这个包。**

这里 squid 的身份验证信息,就是前面填在 APN proxy username 和 password 的地方。

结语

总体来说这个方法是可以接受的,但是不安全,通信都暴露在公网上,所以如非必要,不推荐。

__END__