路由器配置大法

仅适用于可以刷openWrt的路由器

选购路由器

究竟哪些路由器可以支持openWrt系统的安装呢?请查看:Table of Hardware.

如果你的路由器不在列表中,大概需要另外购买一台了(听说极路由之类的本身系统就是魔改的openWrt)。

然后就是我主观的看法:不要买小米路由器!!,TP-Link容易掉线!!,NetGear大法好

于是,最终我在亚马逊购买了NetGear WNDR4300,进行后续的配置。

openWrt系统安装

原版路由器的系统使用起来也挺方便就是啦,而且稳定性一流。唯一的缺点就是太卡了,保存什么设定都要等好几秒钟。

下载原版openWrt镜像,利用NetGear路由器管理界面上的固件升级,具体步骤:

  1. 电脑连接路由器LAN口;
  2. 登陆管理界面;
  3. 上传并升级固件;
  4. 等待更新完毕之后自动重启。

如果成砖了,还有tftp方法救砖,请自行百度。

IPv6转发

作为下一代互联网协议,IPv6首先在国内高校普及,常被利用于BT下载,免流量上网,翻墙之类的用途。清华里宿舍和办公室的有线网络提供了很方便的IPv6接入,但是无线网就没有这样的功能(据说新版的宿舍无线网有IPv6?)

Anyway,之前发现可以利用路由器让移动设备上IPv6,简直是大成就。先上引用来源:疑似某学长的文章openWrt维基完结篇

  1. 安装kmod-ipt-nat6
  2. 进入管理界面:
    • Network > Interface
    • IPv6 ULA-Prefix: 首字母,f -> d
    • Click into LAN’s configuration page > IPv6 Settings :
      • enable Router Advertisement-Service
      • disable DHCPv6-Service and NDP-Proxy
      • check Always announce default router
  3. 编写以下脚本/root/nat6.sh,并且开机启动。
#/bin/ash
line=0  
while [ $line -eq 0 ]  
do  
    sleep 10
    line=`route -A inet6 | grep ::/0 | awk 'END{print NR}'`
done  
ip6tables -t nat -I POSTROUTING -s `uci get network.globals.ula_prefix` -j MASQUERADE  
route -A inet6 add 2000::/3 `route -A inet6 | grep ::/0 | awk 'NR==1{print "gw "$2" dev "$7}'`

echo 2 > /proc/sys/net/ipv6/conf/`route -A inet6 | grep ::/0 | awk 'NR==1{print $7}'`/accept_ra  
echo 2 > /proc/sys/net/ipv6/conf/`route -A inet6 | grep ::/0 | awk 'NR==1{print $7}'`/use_tempaddr  

编辑可执行权限:

chmod +x /root/nat6.sh  

/etc/rc.localexit 0前添加:

/root/nat6.sh &

重启路由器即可。

Shadowsocks全局翻墙

参考博客:

  1. Shadowsocks + GfwList 实现 OpenWRT 路由器自动翻墙;
  2. OpenWRT路由器上的ShadowSocks+ChinaDNS搭梯子方案
    ;

1. 安装必要的软件及相应的图形界面

安装:openssldnsmasq-full

opkg update

opkg install iptables-mod-nat-extra ipset libopenssl  
opkg remove dnsmasq  
opkg install dnsmasq-full  

shadowsocks-libev

opkg update  
cd /tmp

# shadowsocks-libev
wget https://dl.bintray.com/aa65535/opkg/shadowsocks-libev/2.6.1/OpenWrt/ar71xx/shadowsocks-libev_2.6.1-1_ar71xx.ipk

opkg install shadowsocks-libev_2.6.1-1_ar71xx.ipk

# luci app
wget https://github.com/shadowsocks/luci-app-shadowsocks/releases/download/v1.5.0/luci-app-shadowsocks_1.5.0-1_all.ipk

opkg install luci-app-shadowsocks_1.5.0-1_all.ipk  

ChinaDNS

cd /tmp

# ChinaDNS
wget https://sourceforge.net/projects/openwrt-dist/files/chinadns/1.3.2-761183b/ChinaDNS_1.3.2-4_ar71xx.ipk

opkg install ChinaDNS_1.3.2-4_ar71xx.ipk

# luci app
wget https://sourceforge.net/projects/openwrt-dist/files/luci-app/chinadns/luci-app-chinadns_1.4.0-1_all.ipk

opkg install luci-app-chinadns_1.4.0-1_all.ipk  

2. 在管理界面设置

下载国内IP列表,过滤国内IP,不通过shadowsocks代理:

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

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

Services->ShadowSocks标签页进行设置:

  1. 勾选启用Shadowsocks;
  2. 输入ss服务器信息(服务器IP、端口、密码、加密方式);
  3. 代理方法(Proxy method)选择忽略列表(Ignore list),并填入/etc/shadowsocks/ignore.list
  4. 代理协议(Proxy protocol)选择TCP+UDP;
  5. 保存并应用。

Services->ChinaDNS标签页进行设置:

  1. 勾选启用ChinaDNS,启用DNS压缩指针;
  2. 本地端口写5353;
  3. 中国路由表(CHNRoute File)填/etc/chinadns_chnroute.txt;
  4. 上游DNS服务器填114.114.114.114,8.8.4.4;(可将114.114.114.114改成当前ISP提供的DNS服务器IP)
  5. 保存并应用.

配置路由器DNS(Dnsmasq)

  1. 进入页面Network->DHCP and DNS
  2. 将DNS转发(DNS forwardings)设置为127.0.0.1#5353,这将使得路由器将DNS请求经由dnsmasq全部转发至ChinaDNS处理;
  3. 记得勾选“忽略解析文件”(ignore resolve file);

至此,所有连接路由器的设备就都可以魔法上网了,而解析为国内IP的访问则不会走shadowsocks。同时,如果要让某个设备不通过shadowsocks上网(比如:需要用学校的IP登录的文献网址),可以在shadowsocks的设置页面将该设备加入黑名单。

远程访问路由器后的设备

后来,宿舍装了一台树莓派,平时用来驱动音箱,放音乐之类的。为了远程访问它,给舍友造成惊吓,路由器还可以设置端口转发,使得外网设备可以访问内网设备。

network->firewall->Port Forwards

port

内网设备的IP可能是192.168.1.***格式,与图片中略有区别。

总结

路由器其实就是一台小计算机,具有低功耗、高稳定性的优点,利用它进行魔法上网,免除了在它之后的用户配置魔法上网的麻烦,是很优雅的方案。这里综合了IPv6技术,实现了路由级别的免流量上网(嘛,也就我们学校流量这么抠门吧),也是魔法的一部分吧。