Total Pageviews

Monday 7 May 2018

用nanopi-neo搭建一个自动翻墙设备

国人其实在嵌入式内核方面其实走在了世界前列.
蒙赐一个nanopi-neo的小设备,家里本来是用hp5315的设备进行翻墙的,由于内核太低,无法使用ipset。所以迫不得已,升级到nanopi-neo
说一下过程:
一、下载官方映像文件nanopi-neo_FriendlyCore-Xenial_4.14.0_20171218.img.zip
注意,必须是4.14内核的,而不能是3.4.39内核的,因为ipset在3.4.39里缺xt_set模块
二、烧进8G的TF卡,ssh登录
nanopi缺省是DHCP启动的,扫描整个网段
nmap -p22 --open 192.168.92.0/24  
得到机器的大概ip,然后ssh上去,root密码是fa
三、安装ipset并检验一下
apt install ipset  
ipset list  
modporbe xt_set  
lsmod  
四、安装dnscrypt-proxy
apt install dnscrypt-proxy  
注意,这里dnscrypt-proxy是监听在127.0.2.1:53端口的,我们改一下,方法比较古怪,因为实际是systemctl控制了监听端口,直接改/etc/default/dnscrypt-proxy是无效的!!!
export SYSTEMD_EDITOR="vi"  
systemctl edit dnscrypt-proxy.socket  
输入以下内容
[Socket]
ListenStream=  
ListenDatagram=  
ListenStream=127.0.0.1:5353  
ListenDatagram=127.0.0.1:5353  
改好后重启,缺省用的是cisco这个开放dns
五、安装shadowsocks-libev
shadowsocks-libev是用c写的,占内存小,效率高,在这么小的个设备上,必须用这个
apt-get install software-properties-common -y  
add-apt-repository ppa:max-c-lv/shadowsocks-libev -y  
apt-get update  
编辑/etc/config.json文件
 {
    "server":"your-ss-server ip",
    "server_port":9001,
    "local_port":1080,
    "password":"type this user's password",
    "timeout":60,
    "method":"aes-256-cfb"
 }
运行:
ss-redir -c /etc/config.json  
同时单独建立一个DNS解析的通道,监听到本地端口4321,通过vps来转发请求到google的8.8.8.8:53
ss-tunnel -s your-ss-server-ip -p 9001 -m aes-256-cfb -k password -b 127.0.0.1 -l 4321 -L 8.8.8.8:53 -u  
这样本地就有了两个DNS,一个是dnscrypt-proxy,监听到5353,一个ss-tunnel,监听到4321
为什么要建立两个DNS呢?按道理是应该用4321,因为必须考虑就近原则,通过ss通道访问国外网站时,应该以vps返回的查询结果为准,dnscrypt-proxy很可能地址定位偏移了。
六、修改dns-masq
运行dnsmasq|grep ipset确认支持ipset
然后到 https://github.com/felixonmars/dnsmasq-china-list
把4个国内加速的conf拷贝出来放到/etc/dnsmasq.d目录
accelerated-domains.china.conf  
apple.china.conf  
bogus-nxdomain.china.conf  
google.china.conf  
然后拿到国内ip地址的范围,没用啊,只是记录一下,说不定将来有用。
wget -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /etc/chinadns_chnroute.txt  
拿到https://zohead.com/downloads/dnsmasq.tar.gz
解压放到/etc/dnsmasq.d目录下
最终/etc/dnsmasq.conf的内容:
domain-needed  
bogus-priv  
no-resolv  
no-poll  
conf-dir=/etc/dnsmasq.d  
address=/tms.can.cibntv.net/0.0.0.0  
server=114.114.114.114  
dhcp-range=192.168.2.50,192.168.2.100,72h  
dhcp-option=3,192.168.2.2  
dhcp-option=6,192.168.2.2  
cache-size=10000  
min-cache-ttl=1800  
最主要的就是dnsmasq.tar.gz的内容:
server=/12bet.com/127.0.0.1#5353  
ipset=/12bet.com/gfwlist  
很清晰,这里确定了12bet.com走本地5353端口进行dns查询,并且访问的包标记到ipset链gfwlist中,当然这里最好是用4321的dns,会符合就近解析原则
重启dnsmasq就ok了
七、准备iptables
ipset -N gfwlist iphash  
iptables -t nat -A PREROUTING -p tcp -m set –match-set gfwlist dst -j REDIRECT –to-port 1080  
这样一切就ok了

No comments:

Post a Comment