Netgear WNDR4300 刷入官方 Openwrt 固件 Chaos Calmer 15.05.1
从官方下载固件刷入,主要安装了 dnscrypt-proxy、shadowsocks、pdnsd、dnsmasq-full、ipset。
可能真的是闲的,加上自己有洁癖,觉得非官方的固件不是很靠谱,于是重新刷入了官网的固件。
下载固件
刚开始差点刷错了,搜 4300,发现有 4 个,而且是 bin 格式,很奇怪:
仔细一查才发现进错目录,netgear 的固件不在 generic 下面,在 nand 下面:
第一个 tar 包可以直接在 luci 界面刷的,不过我有洁癖,所以还是接了网线,用 uboot 刷第二个 img 包,具体过程可以参考这篇。
设置密码后开启 SSH
第一次启动是没有密码的,好像 ssh 必须有密码才能连,不是很记得了,总之先设好就对。
更新软件源并安装必备 package
连上 ssh,然后更新一下软件源,通常来说,openwrt.org 是没有被墙的,如果不行,试试改 DNS,我用阿里的 223.5.5.5 是完全没问题的:
1 |
opkg update |
先 remove 掉自带的 dnsmasq,这里要非常小心,如果你的源没有更新成功,就不要 remove 了:
1 |
opkg remove dnsmasq |
会提示有两个 config 文件被保留,需要手动删除它们,我只记得下面这一个,还有一个给忘了,总之就是用 rm 命令:
1 |
rm /etc/config/dhcp |
然后安装 dnsmasq-full、ipset、dnscrypt-proxy:
1 2 3 |
opkg install dnsmasq-full opkg install ipset opkg install dnscrypt-proxy |
再安装 pdnsd,需要在 14.07 的 old packages 里面找,不知道为什么 15.05 之后就没有了:
1 2 |
wget --no-check-certificate https://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/nand/packages/oldpackages/pdnsd_1.2.9a-par-a8e46ccba7b0fa2230d6c42ab6dcd92926f6c21d_ar71xx.ipk opkg install pdnsd_1.2.9a-par-a8e46ccba7b0fa2230d6c42ab6dcd92926f6c21d_ar71xx.ipk |
然后安装 ss,在另外一个源里面:
1 |
wget http://openwrt-dist.sourceforge.net/releases/ar71xx/packages/shadowsocks-libev_2.4.8-2_ar71xx.ipk |
里面有很 4 个版本,我们用的是 libev 版,带有 ss-local。
修改 ss 配置:
1 2 3 4 |
cd /etc mkdir ss touch ss-local.json touch ss-redir.json |
建立两个 json 文件,分别控制 ss-local 和 ss-redir。ss-local 是 socks5 协议,ss-redir 用来根据域名自动分流,socks5 是连不上的。具体怎么填配置文件就不啰嗦了,根据/etc/shadowsocks.json 去改。
修改 ss 启动文件:
默认只有一个 config,我们分成了两个。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/sh /etc/rc.common START=95 SERVICE_USE_PID=1 SERVICE_WRITE_PID=1 SERVICE_DAEMONIZE=1 local=/etc/ss/ss-local.json redir=/etc/ss/ss-redir.json start() { service_start /usr/bin/ss-local -c $local -b 0.0.0.0 service_start /usr/bin/ss-redir -c $redir -b 0.0.0.0 #service_start /usr/bin/ss-tunnel -c $CONFIG -b 0.0.0.0 -l 5353 -L 8.8.8.8:53 -u } stop() { service_stop /usr/bin/ss-local service_stop /usr/bin/ss-redir #service_stop /usr/bin/ss-tunnel } |
修改 pdnsd 配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
global { perm_cache = 2048; cache_dir = "/var/pdnsd"; run_as = "nobody"; debug = off; server_port = 1053; server_ip = any; status_ctl = on; # query_method=tcp_only; neg_domain_pol = on; paranoid = on; par_queries = 1; min_ttl = 6h; max_ttl = 1w; timeout = 10; udpbufsize=1024; } server { label= "mydns"; ip = 127.0.0.1; port = 5353; # proxy_only=on; # Do not query any name servers beside your ISP's. # This may be necessary if you are behind some # kind of firewall and cannot receive replies # from outside name servers. timeout=4; uptest=none; interface=eth0; interval=10m; purge_cache=on; edns_query=on; } source { owner = localhost; file = "/etc/hosts"; } rr { name = localhost; reverse = on; a = 127.0.0.1; owner = localhost; soa = localhost,root.localhost,42,86400,900,86400,86400; } |
修改 dnscrypt-proxy 配置:/etc/config/dnscrypt-proxy
这里要先设置好 VPS 上的 dnscrypt-wrapper,并修改好 resolver:/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv,具体可以参考这篇教程,这里就不啰嗦了。
1 2 3 4 5 6 |
config dnscrypt-proxy option address '127.0.0.1' option port '5353' option resolver 'e.g.DNS' option resolvers_list '/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv' option ephemeral_keys '1' |
修改 firewall:
先执行一次:
1 2 |
ipset -N letitgo iphash iptables -t nat -A PREROUTING -p tcp -m set --match-set letitgo dst -j REDIRECT --to-port 3333 |
然后把这两段加入到 firewall 的启动文件中:/etc/init.d/firewall
1 2 3 4 5 |
start_service() { fw3 ${QUIET} start ipset -N letitgo iphash iptables -t nat -A PREROUTING -p tcp -m set --match-set letitgo dst -j REDIRECT --to-port 3333 } |
修改 dnsmasq:/etc/init.d/dnsmasq.conf
在文件末尾增加:
1 2 3 4 5 6 |
no-resolv no-poll no-hosts conf-dir=/etc/dnsmasq.d server=127.0.0.1#1053 cache-size=4096 |
然后新建文件夹/etc/dnsmasq.d,把 ipset 规则丢进去,具体也可以参考这篇教程。
设置开机启动:
需要开机启动的有 firewall, dnsmasq, pdnsd, dnscrypt-proxy, shadowsocks。
正常来说,应该是逐个这么设置就可以:
1 |
/etc/init.d/pdnsd enabled |
However,并不总是奏效,对于开机不能启动的,我是这么干的,也不怕你笑,反正简单有效就行,在 System-Startup 里面:
好了,就是这些,重启路由,看看解析和域名分流是否正常即可。