需要条件
* 一台在国内可正常访问的并且它也可以正常访问 Google 服务的 Linux 主机(美国VPS就可以了)
* Android 操作系统支持修改 /etc/hosts 和 iptables 支持(需要 NAT 表支持)
问题原因
原始 Android 里访问 Google 服务是通过三个Google服务器域名:android.clients.google.com,android.l.google.com, clients.google.com,可能会访问这三个域名的 80 和 443端口,由于非人为原因,这种看似非常正常的访问就不正常了。发现客户端 (Android) 和 Google 服务器之间的数据链路异常。
实现原理
android.clients.google.com|android.l.google.com|clients2.google.com:80–> vps:8129 –> google server:80
android.clients.googel.com|android.l.google.com|clients2.google.com:443–> vps:8130 –> google server:443
使用 8129 和 8130 端口是由于不和 VPS 上这两个端口的服务冲突,如实际情况无服务,可直接使用。
操作方法
VPS:
sudo sysctl net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -d VPS地址/32 -p tcp -m tcp --dport 8129 -j DNAT --to-destination 74.125.127.113:80
sudo iptables -t nat -A POSTROUTING -d 74.125.127.113/32 -p tcp -m tcp --dport 80 -j SNAT --to-source VPS地址
sudo iptables -t nat -A PREROUTING -d VPS地址/32 -p tcp -m tcp --dport 8130 -j DNAT --to-destination 74.125.127.113:443
sudo iptables -t nat -A POSTROUTING -d 74.125.127.113/32 -p tcp -m tcp --dport 443 -j SNAT --to-source VPS地址
Android:
/etc/hosts 增加如下三行
74.125.127.113 android.clients.google.com
74.125.127.113 android.l.google.com
74.125.127.113 clients2.google.com
iptables -t nat -A OUTPUT -d 74.125.127.113/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination VPS地址:8129
iptables -t nat -A OUTPUT -d 74.125.127.113/32 -p tcp -m tcp --dport 443 -j DNAT --to-destination VPS地址:8130
这样就可以正常访问 Google 服务了。
Over!
支持!
iptables很强大!!!
还是需要root权限,麻烦
没有 root 权限的 Android 用户不是好用户,哈哈。这一点不算麻烦吧。。。 🙂
iptables做nat转发保留,然后我把所有针对Google域名的解析做了DNS解析,但似乎android下的/etc/reslove.conf 并不起作用。这让我很郁闷。
怎么样的不起作用?你自己架设DNS了? /etc/resolv.conf 是写 nameserver 的,作用与 /etc/hosts 不同。
嘿嘿,也不算自己架了个dns服务器,只是修改版的tcp dns查询,udp方式还是会被审查的。。。
很实用
不过既然是11年的文章,我也不想再说什么了