彻底解决 Android 平台不能访问 Google 服务问题

需要条件
* 一台在国内可正常访问的并且它也可以正常访问 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!

8 thoughts on “彻底解决 Android 平台不能访问 Google 服务问题”

  1. iptables做nat转发保留,然后我把所有针对Google域名的解析做了DNS解析,但似乎android下的/etc/reslove.conf 并不起作用。这让我很郁闷。

Leave a Reply

Your email address will not be published. Required fields are marked *