仅适用于可以刷openWrt的路由器
选购路由器
究竟哪些路由器可以支持openWrt
系统的安装呢?请查看:Table of Hardware.
如果你的路由器不在列表中,大概需要另外购买一台了(听说极路由之类的本身系统就是魔改的openWrt)。
然后就是我主观的看法:不要买小米路由器!!,TP-Link容易掉线!!,NetGear大法好。
于是,最终我在亚马逊购买了NetGear WNDR4300,进行后续的配置。
openWrt系统安装
原版路由器的系统使用起来也挺方便就是啦,而且稳定性一流。唯一的缺点就是太卡了,保存什么设定都要等好几秒钟。
下载原版openWrt镜像,利用NetGear路由器管理界面上的固件升级,具体步骤:
- 电脑连接路由器LAN口;
- 登陆管理界面;
- 上传并升级固件;
- 等待更新完毕之后自动重启。
如果成砖了,还有tftp
方法救砖,请自行百度。
IPv6转发
作为下一代互联网协议,IPv6首先在国内高校普及,常被利用于BT下载,免流量上网,翻墙之类的用途。清华里宿舍和办公室的有线网络提供了很方便的IPv6接入,但是无线网就没有这样的功能(据说新版的宿舍无线网有IPv6?)
Anyway,之前发现可以利用路由器让移动设备上IPv6,简直是大成就。先上引用来源:疑似某学长的文章,openWrt维基,完结篇。
- 安装
kmod-ipt-nat6
; - 进入管理界面:
- 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
- 编写以下脚本
/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.local
的 exit 0
前添加:
/root/nat6.sh &
重启路由器即可。
Shadowsocks全局翻墙
参考博客:
1. 安装必要的软件及相应的图形界面
安装:openssl
和dnsmasq-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
标签页进行设置:
- 勾选启用Shadowsocks;
- 输入ss服务器信息(服务器IP、端口、密码、加密方式);
- 代理方法(Proxy method)选择忽略列表(Ignore list),并填入
/etc/shadowsocks/ignore.list
; - 代理协议(Proxy protocol)选择TCP+UDP;
- 保存并应用。
在Services->ChinaDNS
标签页进行设置:
- 勾选启用ChinaDNS,启用DNS压缩指针;
- 本地端口写5353;
- 中国路由表(CHNRoute File)填
/etc/chinadns_chnroute.txt
; - 上游DNS服务器填114.114.114.114,8.8.4.4;(可将114.114.114.114改成当前ISP提供的DNS服务器IP)
- 保存并应用.
配置路由器DNS(Dnsmasq)
- 进入页面
Network->DHCP and DNS
; - 将DNS转发(DNS forwardings)设置为
127.0.0.1#5353
,这将使得路由器将DNS请求经由dnsmasq全部转发至ChinaDNS处理; - 记得勾选“忽略解析文件”(ignore resolve file);
至此,所有连接路由器的设备就都可以魔法上网了,而解析为国内IP的访问则不会走shadowsocks。同时,如果要让某个设备不通过shadowsocks上网(比如:需要用学校的IP登录的文献网址),可以在shadowsocks的设置页面将该设备加入黑名单。
远程访问路由器后的设备
后来,宿舍装了一台树莓派,平时用来驱动音箱,放音乐之类的。为了远程访问它,给舍友造成惊吓,路由器还可以设置端口转发,使得外网设备可以访问内网设备。
network->firewall->Port Forwards
:
内网设备的IP可能是192.168.1.***
格式,与图片中略有区别。
总结
路由器其实就是一台小计算机,具有低功耗、高稳定性的优点,利用它进行魔法上网,免除了在它之后的用户配置魔法上网的麻烦,是很优雅的方案。这里综合了IPv6技术,实现了路由级别的免流量上网(嘛,也就我们学校流量这么抠门吧),也是魔法的一部分吧。