自己瞎折腾了快两天,中间走了各种弯路,特地写成文章纪念一下,顺便帮助大家少走弯路。

刷ROM

选取的路由器型号是 TP-LINK TL-MR3020,直接去openwrt的官方wiki上去找对应该型号的ROM即可,这里选取的是AA12.09版的固件。如果你不知道什么样的路由器可以刷入openwrt,可以在这份列表上查询:http://wiki.openwrt.org/toh/start#supported.hardware.-.router.type

  • 本路由器的wiki页面:http://wiki.openwrt.org/toh/tp-link/tl-mr3020

  • AA12.09地址:http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/openwrt-ar71xx-generic-tl-mr3020-v1-squashfs-factory.bin

下载好固件后直接从路由器里的固件升级的位置刷入就可以了。

基本配置

大部分配置方法都在官方的wiki上有写,这里只简单总结一下。

刷好后首先将路由器和电脑直接用网线连起来(这个路由器的WAN和LAN是一个口,而且只有这一个网线口,所以略蛋疼),路由器的默认地址是192.168.1.1,首先将自己的电脑IP设置成静态的192.168.1.x,掩码255.255.255.0,其他的不需要设置。
之后telnet上你的路由器,使用passwd命令修改root密码。然后就可以SSH到你的路由器进行各种配置了。

  • 配置WAN口

首先来配置WAN口,编辑/etc/config/network文件,首先将interface lan下面的option ifname eth0注释掉。

如果你的上游是PPPoE网络,请参考如下配置:

config interface 'wan'
    option proto 'pppoe'
    option ifname eth0
    option username 'your pppoe name'
    option password 'your pppoe password'

如果上游是DHCP,请参考如下配置:

config interface 'wan'
    option proto 'dhcp'
    option ifname 'eth0'

配置好WAN口之后,如果无法上网,可以尝试ifup wan命令。

  • 配置DNS

/etc/config下新建一个文件,名字为dns_resolv.conf,名字无所谓,随便取。在文件中输入如下内容:

nameserver 223.5.5.5
nameserver 8.8.8.8

这里使用的是阿里和谷歌的DNS,如果你有更合适的DNS请替代他们。然后编辑/etc/config/dhcp文件,将option resolvfile 'xxxx'改为你刚刚建立的文件。如option resolvfile '/etc/config/dns_resolv.conf'

  • 配置WiFi
    WiFi的配置可以通过192.168.1.1的WEB管理页面来配置。不多赘述。

更多配置

到这里基本配置已经完成了,如果需要更高级的配置,可以参考此部分内容。

  • 配置pptp
    首先需要安装ppp-mod-pptp
opkg update
opkg install ppp-mod-pptp

接下来配置VPN的接口。
编辑/etc/config/network文件,参考以下内容并加入:

config interface 'vpn'
    option ifname 'pptp-vpn'
    option proto 'pptp'
    option username 'your-pptp-username'
    option password 'your-pptp-password'
    option server 'your-pptp-server'
    option buffering '1'

然后进入WEB管理页面,在VPN的Firewall Setting中,选择wan zone并保存。接下来在interface界面中即可连接VPN。

  • VPN分流?
    如果按照该教程配置下来,现在的全局流量都是走的VPN,这就导致访问国内速度变慢。这里使用chnroutes来分流,首先在github上把这东西下载下来。执行python chnroutes.py -p android,等待运行完成后会在同目录下生成vpnup.sh,此文件其实会把几千条路由导入路由表中,我们需要对其进行一下修改。将文件开头的alias几行全部注释掉。然后将此文件上传到路由器上,随便你放在哪。执行后即可导入路由表。

导入后路由表看起来应该是下面这个样子:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         <PPTP GW>       0.0.0.0         UG    0      0        0 pptp-vpn
1.0.1.0         192.168.156.254 255.255.255.0   UG    0      0        0 eth0
1.0.2.0         192.168.156.254 255.255.254.0   UG    0      0        0 eth0
1.0.8.0         192.168.156.254 255.255.248.0   UG    0      0        0 eth0
1.0.32.0        192.168.156.254 255.255.224.0   UG    0      0        0 eth0
1.1.0.0         192.168.156.254 255.255.255.0   UG    0      0        0 eth0
1.1.2.0         192.168.156.254 255.255.254.0   UG    0      0        0 eth0
1.1.4.0         192.168.156.254 255.255.252.0   UG    0      0        0 eth0
...
...

你会发现默认的流量是走VPN网关的,而在路由表中出现的其他网段是走本地网关的。(GW是啥?就是Gateway的简写)

如果你想每次都自动导入的话,可以把这个vpnup.sh这个文件加上x属性,然后在rc.local或者/lib/netifd/ppp-up中将这个脚本加入,形如sh /xx/xx/vpnup.sh,就可以了,不过自动导入本人一直未成功,每次获取到的GW是错误的。不知道网上的其他人是怎么实现的。

到这里如果没有问题的话应该可以实现VPN的分流了。

  • 升级!shadowsocks

当遇到上面的需要分流的问题的时候本人就想到搞个SS了,但是安装shadowsocks-libev-spec_2.1.4-1_ar71xx.ipk这个的时候发现需要依赖openssl,又懒得去装openssl了,粗略的查了下好像装openssl挺麻烦,就暂时没有研究SS的部分。有兴趣的童鞋可以自己去查一下相关资料,听说用SS比PPTP爽多了!

配置出问题了怎么办

有时候会遇到WEB管理页面无法访问,SSH也没反应,莫慌,不一定是变砖了。首先将路由器断电,用网线将你的路由器和电脑连接起来,电脑设置静态IP为192.168.1.2(必须是这个IP),掩码255.255.255.0。打开路由器,当你看到WPS灯开始闪烁的时候,按下WPS按钮(灯就是按钮),WPS灯会以更快的频率进行闪烁。此时路由器进入了Failsafe Mode,然后就可以telnet到你的路由器上(telnet 192.168.1.1)。之后你就可以:

此处讲的进入Failsafe Mode的方法为AA固件的方法,BB固件的方法请看官方wiki页面

  • 执行firstboot将路由器重置。
  • 执行mount_root挂载后修改你的配置文件。
  • ETC。。。

如果这样还无法拯救你的路由器,可以尝试使用TFTP重新输入新的固件,方法请见官方wiki页面,我也没这样尝试过。