最近一直在优化家庭网络体验,还特意组装了一台新的小主机(N3700),除了兼顾软路由和NAS的需求之外,还提供了代码仓库等功能,具体经验之后会慢慢写出来。

先聊其中一个细节吧,关于使用“策略路由优化上网体验”。

优化内容

关于策略路由的优化,通常做法是从apnic.net获取全球的地址列表,然后经过地址筛选后,做具体的策略。

但是,随着近几年列表中添加的ipv6地址越来越多,列表文件也越来越大,上述策略中常常看到的脚本方案或许就存在了问题:

wget -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /yourpath/your-ip-list

这条不需要过多解释,然而这句却存在着不止一个优化点,尤其是在性能孱弱的路由器设备上。

为了追求真实场景,下面的命令在路由器上执行。

场景测试

先将IP列表文件下载并保存,提供给之后的测试使用。

wget 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest'

顺手查看一下文件的总行数,快破50k了。

cat delegated-apnic-latest | wc -l
47133

最常规的做法是先过滤符合ipv4的数据行,那么我们在路由上执行(多次执行,耗时范围在0.92~0.93s)

[root@PandoraBox:/tmp]#time cat delegated-apnic-latest | grep ipv4 | grep CN | wc -l  
real    0m 0.92s
user    0m 0.00s
sys 0m 0.06s
7481

如果先过滤符合区域的数据呢,(多次执行,0.58~0.60s)

[root@PandoraBox:/tmp]#time cat delegated-apnic-latest | grep CN | grep ipv4 | wc -l  
real    0m 0.59s
user    0m 0.01s
sys 0m 0.03s
7481

其实港澳台的网站,除了台湾地区的会出现不能访问,多数港澳的IP还是很靠谱的,没必要走策略路由,如果遇到了再添加也不迟。

[root@PandoraBox:/tmp]#time cat delegated-apnic-latest | egrep "CN|MO|HK" | grep ipv4 | wc -l
real    0m 0.65s
user    0m 0.01s
sys 0m 0.03s
9414

优化结果

最后修改完毕的命令为:

wget -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | egrep "CN|MO|HK" | grep ipv4 | awk -F\| '{ printf("%s/%d\n", 
$4, 32-log($5)/log(2)) }' > YOURFILE

同状况下,目前47k条数据节约路由计算时间大概0.3s+。 另外测试网络连通性,由于robots的限制,wget版本过旧,本地证书过老等问题,实测用下面的命令会更靠谱。

wget --execute robots=off --inet4-only --spider --quiet --tries=3 --timeout=10 --no-check-certificate www.google.com