和路由器玩到蛋碎

大概是一个星期的样子。

已经被折腾的筋疲力尽了,但是好在全部都搞定了。

以前是电脑如果要 VPN 得拨一下,手机虽然有 APN 和 Socket,但是都不靠谱又麻烦,就想打造一个在路由器端就开始的美好的上网环境。

于是看了下配置,觉得 Asus 的 RTN12B1 价格很适合这种入门级的折腾。就买了一个。

万万没有想到我这一个星期都耗在了这个上面。

第一天拿到手的晚上,我直接从官方固件的web管理界面升级了个 DD-WRT 168XXX 的版本号,升级完毕后就不断重新启动。当时万念俱灰。一夜不眠,第二天去邻居家插上网线,用 30-30-30 大发进入恢复模式,在官方和 DD-WRT 之间刷来刷去,始终不能启用 DDWRT,后来终于发现了其中的原因, 168XXX的固件不能良好支持新一批国产的 BCM53727 的芯片,所以要用 Wiki 里的17990 固件。

(其实30-30-30就是拔掉路由器电源后按着reset按键插上电源,一直按住,直到路由器的电源灯还是不断闪烁。)

刷上 ddwrt 后,jffs 又开不了,原因是在图形界面开会比较奇葩,必须有个固定的开启方法,所以 ssh 到路由器里用命令开启才靠谱。

jffs 开了后,又发现 PPTP 连不上,这里把我气死了,一开始以为我家 PPTP不能连接,后来和 kgen 一起验证过后,其实电脑上是没啥问题的。但是路由器死活连不上,到这里我就素质立刻底下了,移民到南方的心情也有了。

日西巴~

刷了个 tomato 固件玩了两天,也没再试过 PPTP 的事情。

之后又刷回了官方的 3.0 本来以为这样就过去了,结果 kgen 又过来跟我说改小 MTU 应该就可以。我又刷回去 ddwrt,还是不行,我又折腾啊折腾,最后还是不行。一天又过去了。

期间还折腾了 openwrt,想编译个固件用 L2TP 什么的,最后作罢。

今天,终于收获了,眼泪不停流~

Tomato 固件万岁~

今天又刷成了这个,试了试 PPTP, 丫连上了,我那个高兴啊,但是因为 DDWRT 上的经验,我设置了Remote subnet / netmask 的值,所以即使连接上了,也不走 PPTP。勾上 Redirect Internet traffic 后,就全局走 PPTP了,但是这个方案太不实用了,全走 PPTP 国内的东西就卡的鸡巴慢了。

点燃了我的激情手舞足蹈半天,策略路由还是必须有的 AutoDDVPN 虽然是专门给 ddwrt 用的,但是我改改不一样可以在 tomato 上用么。

折腾之魂熊熊燃烧,人不折腾枉少年!

把脚本拿来看了看,发现有一堆这样那样的判断,其实最关键的问题是,在新版的 tomato 固件里,获取 pptp 网关,以及获取WAN口网关的命令都不管用了。

nvram get wan_gateway 获取的是0.0.0.0

nvram get wan_gateway_get 才能获取正确的 (别问我怎么知道的,随便撇到了这个命令而已)

于是,删除各种判断代码,单独留下了个 vpnup.sh ,手动 hard code 了 PPTP 网关的 IP 地址。然后WAN UP的时候加载,完美策略路由。

但是又出现了个问题,访问 youku taobao 什么的又死慢死慢的啊,这个问题在电脑上策略路由的时候就有,一直没怎么在意,但是路由器上有了Dnsmasq这样的神器!

有前辈写了个获取 alexa 上排名前 100 的域名的脚本,拿来用之,然后放进 dnsmasq,啊哈哈,终于解决了国内 DNS 这个问题了。

本来觉得已经完美了, 但是twitter 经常各种头像不能显示,想写个blog庆祝的时候,我的blog又打不开了。尝试升级到最新的tomato,还是不行,ping 的通,traceroute 也没有被丢掉的情况。

真是为神马~~~

好吧,找到问题的原因了,MTU MRU 设置到 1300,就 OK 了。

真鸡巴折腾啊,好在坚持折腾到蛋碎了,终于享受上了全局完美上网的生活。

最后,附上各种会用到脚本,其他能 google 到的我就不伺候啦。

https://github.com/kevinzhow/TomatoAutoVPN