文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
配置 OpenWrt 路由器智能自动翻墙
OpenWrt 路由器用 dnsmasq 转发国内重要域名查询
OpenWrt 默认自带 dnsmasq,我们只要配置一下就好了。ssh 登录 OpenWrt 路由器后:
- 建立 dnsmasq.d 目录:
root@OpenWrt:~# mkdir /etc/dnsmasq.d root@OpenWrt:~# echo "conf-dir=/etc/dnsmasq.d" >> /etc/dnsmasq.conf
- OpenWrt 安装 GNU wget 以支持 https 下载,下载国内重要网站名单,用国内域名服务器查询 iP 地址
root@OpenWrt:~# cd /etc/dnsmasq.d root@OpenWrt:/etc/dnsmasq.d# opkg install wget root@OpenWrt:/etc/dnsmasq.d# wget -4 --no-check-certificate -O /etc/dnsmasq.d/accelerated-domains.china.conf https://github.com/felixonmars/dnsmasq-china-list/raw/master/accelerated-domains.china.conf root@OpenWrt:/etc/dnsmasq.d# wget -4 --no-check-certificate -O /etc/dnsmasq.d/bogus-nxdomain.china.conf https://github.com/felixonmars/dnsmasq-china-list/raw/master/bogus-nxdomain.china.conf
注: accelerated-domains.china.conf 文件中的条目举例:
server=/10010.com/114.114.114.114 server=/115.com/114.114.114.114
意思是,访问 10010.com 这个结尾的域名时,dnsmasq 会转发到国内的域名服务器 114.114.114.114 进行 dns 查询。
gfwlist.conf : 其他域名,转发到 shdowsocks-libev ss-tunnel 指定的端口 dns 查询
root@OpenWrt:/etc/dnsmasq.d# echo "server=/#/127.0.0.1#3210" > gfwlist.conf
上面#是通配符,代表泛匹配所有域名。dnsmasq 匹配域名的特点是详细特征优先匹配,因此会先匹配 accelerated-domains.china.conf 上的域名,如果不匹配,再匹配这条规则:转发到本地端口 3210 进行域名查询。
后面我们会配置 shdowsocks-libev 的本地客户端 ss-tunnel 转发本地端口 3210 的查询到远程自建服务器。
配置 shdowsocks 本地客户端 ss-redir 启动和停止函数
root@OpenWrt:/etc/dnsmasq.d# vi /etc/init.d/shadowsocks
/etc/init.d/shadowsocks :
#!/bin/sh /etc/rc.common
# Author: https://github.com/softwaredownload/openwrt-fanqiang
# Date: 2015-12
START=95
SERVICE_USE_PID=1
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1
start() {
sed -i 's/114.114.114.114/127.0.0.1#3210/' /etc/dnsmasq.d/gfwlist.conf
/etc/init.d/dnsmasq restart
service_start /usr/bin/ss-redir -b 0.0.0.0 -c /etc/shadowsocks.json -f /var/run/shadowsocks.pid
service_start /usr/bin/ss-tunnel -b 0.0.0.0 -c /etc/shadowsocks.json -l 3210 -L 8.8.8.8:53 -u
/usr/bin/shadowsocks-firewall
}
stop() {
sed -i 's/127.0.0.1#3210/114.114.114.114/' /etc/dnsmasq.d/gfwlist.conf
/etc/init.d/dnsmasq restart
service_stop /usr/bin/ss-redir
service_stop /usr/bin/ss-tunnel
killall ss-redir
killall ss-tunnel
/etc/init.d/firewall restart
}
shadowsocks 本地客户端配置文件 start stop 函数说明:
- sed -i 's/127.0.0.1#3210/114.114.114.114/' /etc/dnsmasq.d/gfwlist.conf
停止 shadowsocks 翻墙服务时,要把泛匹配域名的解析转发到国内的 dns 服务器,这里是 114 - sed -i 's/114.114.114.114/127.0.0.1#3210/' /etc/dnsmasq.d/gfwlist.conf
开启翻墙服务时,如果以前停止过 shadowsocks 翻墙服务,要把泛匹配域名的解析改成通过 ss-tunnel 3210 端口转发 - service_start /usr/bin/ss-tunnel -b 0.0.0.0 -c /etc/shadowsocks.json -l 3210 -L 8.8.8.8:53 -u
监听本地 3210 端口,转发到自己的服务器的 53 端口向 8.8.8.8 查询 DNS - /usr/bin/shadowsocks-firewall
dnsmasq 只是负责域名查询分配转发,查询到 IP 地址后,是否需要通过 shdowsocks 加密请求内容,要在 shdowsocks-firewall 里进行设置 - 运行
/etc/init.d/shadowsocks stop
有时并没有结束 ss-redir 或 ss-tunnel 进程,这会导致修改shadowsocks.conf
后需要重启路由器才能生效。加上killall
强制杀掉进程避免重启。(2016-01-19)
(注:即使加了 killall,有时还是不能杀掉进程,这种情况就只能重启路由器了。也就是说,修改了翻墙配置,有时必须重启路由器才能生效)
配置 iptables 防火墙转发 IP 和端口
root@OpenWrt:~# cd /usr/bin
root@OpenWrt:~# touch shadowsocks-firewall
root@OpenWrt:~# chmod +x shadowsocks-firewall
root@OpenWrt:~# vi shadowsocks-firewall
/usr/bin/shdowsocks-firewall :
#!/bin/sh
# Author: https://github.com/softwaredownload/openwrt-fanqiang
# Date: 2015-12-23
#create a new chain named SHADOWSOCKS
iptables -t nat -N SHADOWSOCKS
iptables -t nat -N SHADOWSOCKS_WHITELIST
# Ignore your shadowsocks server's addresses
# It's very IMPORTANT, just be careful.
iptables -t nat -A SHADOWSOCKS -d 1.0.9.8 -j RETURN
#for hulu.com
iptables -t nat -A SHADOWSOCKS -p tcp --dport 1935 -j REDIRECT --to-ports 7654
iptables -t nat -A SHADOWSOCKS -p udp --dport 1935 -j REDIRECT --to-ports 7654
# Ignore LANs IP address
iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN
# Check whitelist
iptables -t nat -A SHADOWSOCKS -j SHADOWSOCKS_WHITELIST
iptables -t nat -A SHADOWSOCKS -m mark --mark 1 -j RETURN
# Anything else should be redirected to shadowsocks's local port
iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 7654
# Apply the rules
iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
# Ignore China IP address
for white_ip in `cat /etc/chinadns_chnroute.txt`;
do
iptables -t nat -A SHADOWSOCKS_WHITELIST -d "${white_ip}" -j MARK --set-mark 1
done
# Ignore Asia IP address
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 1.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 14.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 27.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 36.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 39.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 42.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 49.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 58.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 59.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 60.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 61.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 101.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 103.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 106.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 110.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 111.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 112.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 113.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 114.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 115.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 116.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 117.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 118.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 119.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 120.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 121.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 122.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 123.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 124.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 125.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 126.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 169.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 175.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 180.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 182.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 183.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 202.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 203.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 210.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 211.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 218.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 219.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 220.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 221.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 222.0.0.0/8 -j MARK --set-mark 1
#iptables -t nat -A SHADOWSOCKS_WHITELIST -d 223.0.0.0/8 -j MARK --set-mark 1
OpenWrt 路由器 iptables 防火墙设置含义
- 如果本地发出请求到 shadowsocks 服务端所在的服务器,就返回,不作任何特殊处理。
- 如果本地发出请求到局域网,也立即返回
- 如果发出请求到中国的 IP 地址,也立即返回
chinadns_chnroute.txt 是中国 IP 地址,见 https://github.com/softwaredownload/openwrt-fanqiang/blob/master/openwrt/default/etc/chinadns_chnroute.txt
预编译翻墙固件都带了这个文件。这个文件很长,因此配置不高的路由器 DIR-505,预编译固件里改成了“发出请求到亚洲的 IP 地址就立即返回”,见文件 https://github.com/softwaredownload/openwrt-fanqiang/blob/master/openwrt/dir505/usr/bin/shadowsocks-firewall - 剩下的 IP 内容请求,全部转发到 shdowsocks-libev 本地客户端 ss-redir 监听的端口,由 ss-redir 负责和服务端进行加密通讯。(手下报告访问 youtube 的屁民为个位数,领导心里那个高兴啊。可惜经过加密,内容传输速度会有下降)
- 首先运行全代理模式,然后再执行白名单。在白名单比较长时冷启动的速度会比较快。(Thanks Phoeagon)
- 中国的 IP 列表比较长,如果你的路由器硬件配置不是太好,可以把 Ignore China IP address 段注释掉,启用 Ignore Asia IP address 段
OpenWrt 路由器防火墙设置重要说明:
- 你必须把上面的 1.0.9.8 换成你服务器真实的 IP 地址
- iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 7654 这里的 7654 必须和 OpenWrt 路由器 /etc/shadowsocks.json 里的 local_port一样,也就是说,如果 /etc/shadowsocks.json 里 "local_port":1090, 那这里的 7654 也要改成 1090
- 其他可以保持默认
控制 shadowsocks 本地客户端的方法
root@OpenWrt:~# /etc/init.d/shadowsocks stop
root@OpenWrt:~# /etc/init.d/shadowsocks start
root@OpenWrt:~# /etc/init.d/shadowsocks enable
root@OpenWrt:~# /etc/init.d/shadowsocks disable
说明:
- stop: 停止 shdowsocks
- start: 运行 shadowsocks
- enable: 设置 shadowsocks 在 OpenWrt 路由器启动时自动启动
- disable: 取消 shadowsocks 随机启动
启动并测试 shadowsocks-libev 本地客户端
确保所有设置无误后,可以启动测试一下:
root@OpenWrt:~# /etc/init.d/dnsmasq restart
root@OpenWrt:~# /etc/init.d/shadowsocks stop
root@OpenWrt:~# /etc/init.d/shadowsocks start
root@OpenWrt:~# /etc/init.d/shadowsocks enable
然后在 Ubuntu 电脑,手机等设备上打开 youtube.com , twitter.com
下载配置文件的最新版
git clone https://github.com/softwaredownload/openwrt-fanqiang
git clone 项目到本地后,可以进入 openwrt 目录查看文件。
如果所有设置都正确,应该可以较快速度打开被墙网站。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论