Netgear WNDR4300 刷入官方 Openwrt 固件 Chaos Calmer 15.05.1

从官方下载固件刷入,主要安装了 dnscrypt-proxy、shadowsocks、pdnsd、dnsmasq-full、ipset。

可能真的是闲的,加上自己有洁癖,觉得非官方的固件不是很靠谱,于是重新刷入了官网的固件。

openwrt

下载固件

刚开始差点刷错了,搜 4300,发现有 4 个,而且是 bin 格式,很奇怪:

tplink

仔细一查才发现进错目录,netgear 的固件不在 generic 下面,在 nand 下面:

netgear

第一个 tar 包可以直接在 luci 界面刷的,不过我有洁癖,所以还是接了网线,用 uboot 刷第二个 img 包,具体过程可以参考这篇

设置密码后开启 SSH

第一次启动是没有密码的,好像 ssh 必须有密码才能连,不是很记得了,总之先设好就对。

pass

更新软件源并安装必备 package

连上 ssh,然后更新一下软件源,通常来说,openwrt.org 是没有被墙的,如果不行,试试改 DNS,我用阿里的 223.5.5.5 是完全没问题的:

opkg update

先 remove 掉自带的 dnsmasq,这里要非常小心,如果你的源没有更新成功,就不要 remove 了:

opkg remove dnsmasq

会提示有两个 config 文件被保留,需要手动删除它们,我只记得下面这一个,还有一个给忘了,总之就是用 rm 命令:

rm /etc/config/dhcp

然后安装 dnsmasq-full、ipset、dnscrypt-proxy:

opkg install dnsmasq-full
opkg install ipset
opkg install dnscrypt-proxy

再安装 pdnsd,需要在 14.07 的 old packages 里面找,不知道为什么 15.05 之后就没有了:

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,在另外一个里面:

wget http://openwrt-dist.sourceforge.net/releases/ar71xx/packages/shadowsocks-libev_2.4.8-2_ar71xx.ipk

里面有很 4 个版本,我们用的是 libev 版,带有 ss-local。

修改 ss 配置:

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,我们分成了两个。

#!/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 配置:

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,具体可以参考这篇教程,这里就不啰嗦了。

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:

先执行一次:

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

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

在文件末尾增加:

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。

正常来说,应该是逐个这么设置就可以:

/etc/init.d/pdnsd enabled

However,并不总是奏效,对于开机不能启动的,我是这么干的,也不怕你笑,反正简单有效就行,在 System-Startup 里面:

startup

好了,就是这些,重启路由,看看解析和域名分流是否正常即可。

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.