原生的Android刷机后第一次开机系统初始设置要连接谷歌服务器,如果没有透明代理就很麻烦,进不了桌面。这里可以通过一台Linux的机器(我用的是第一代树莓派)来达到透明代理的作用。平常情况下手机,平板和机顶盒也可以通过透明代理上网,简化配置。
环境要求
手机和树莓派在同一个局域网,并且可以相互访问,手机的WiFi连接,树莓派可以是无线网络也可以是网线连接(没有无线网络的第一代树莓派即可)。有可用的SS / SSR或者SOCKS5代理。
用SS-redir的搭建带SS代理的端口
如果是SSR用shadowsocksr-libev里的SS-再导向。注意后者多了一个
r
。我用的是SSR,在树莓派上自己编译的shadowsocksr-libev ,下面以SSR为例,SS类似。
配置ss-redir.json,参数和配置SSR一样,注意:
"local_address":"0.0.0.0"
,这个必须为0.0.0.0。如果同一个机器上也运行SSR,local_port要用不同的端口,如SSR用1081,ss-redir用1088,下面配置里会用到1088这个端口。
运行SS-再导向,
-v
会显示一些日志信息:
调试完成后,实际运行可以用:
启用内核转发
使用iptables的转发需要打开内核的IPv4转发功能,编辑/etc/sysctl.conf中,设置把net.ipv4.ip_forward = 1,让更新实时生效:
设置iptables的,IPSET转发
设置iptables的的目的是将本机特定IP的流量转向β-redir的监听的端口,这个端口是带代理的,这样特定IP的流量就自动代理了。可以配置跳过无需代理的中国IP.iptables执行要根权限,可以切换到根用户,或者用须藤方式运行。
先获取中国IP范围,保存文件是cn.zone。
创建china.ipset脚本,内容如下:
运行脚本创建中国的IPSET,脚本会把cn.zone文件里的IP段都加到中国的IPSET里。
创建的iptables命令脚本
把上面的命令保存成iprules.sh文件,运行设置到系统里。
如果设置错误,清理iptables的设置用下面的命令:
手机端设置
手机端WiFi连接,选择静态IP,网关填写树莓派的IP。如果正常,此时手机不用配置代理即可正常访问Google服务器。
验证国内IP过滤
用redsocks2替代β-redir的
树莓派上本来跑了个SSR,环境太恶劣,经常需要tcping找可用的地址,重启SSR,不想再维护β-再导向的稳定性了,所以切换到redsocks了,redsocks可以直接用SSR提供socks5的代理,只维护SSR稳定可用即可。
没有用原版的redsocks,使用了修改版的redsocks2,下载源代码编译略过。
没有用原版的redsocks,使用了修改版的redsocks2,下载源代码编译略过。
redsocks2的配置config.json如下。如果socks5的代理是本机,
ip = 192.168.1.104;
行改成ip = 0.0.0.0;
。文件配置里log_debug log_info daemon
调试的时候可以根据需要配置上分类中翻译关闭或者,daemon = on
是后台运行。这里redsocks监听的端口也配置成1088。
运行redsocks2
据说redsocks稳定性可能有些问题,配置的cron计划任务,每天凌晨3点重启一下好了。
IPSET设置速度优化
用
sudo bash china.ipset
设置IPSET后,可以把IPSET设置保存起来,后面再恢复速度就快很多。
把下面脚本保存为ipset.restore.sh,每次开机设置一次。
sudo iptables -t nat -F
三条的含义是清空iptables nat配置,不然多次执行ipset会提示正在使用,禁止毁灭。建议:每次应该都是先设置ipset,再设置iptables的。其他说明
- 不支持UDP流量转发,DNS污染用其他方法解决。我用的dnsmasq + overture.dnsmasq做缓存,推动做域名翻墙和国内IP分流.overture国内使用dnspod的DNS服务,国外使用8.8.8.8,这两个DNS服务都支持EDNS。
- iptables的规则可以SH脚本运行,或者iptables-save命令后用的iptables-恢复来加载
没有评论:
发表评论