参考了以下两篇文献: http://blog.ch3n2k.com/2013/09/openwrt.html http://www.right.com.cn/forum/thread-128967-1-1.html
tomato路由器上已经成功部署,并且一直很稳定,openwrt的部署步骤是我按照上面的两篇文献以及tomato上的部署经验写的,但我没有真正搭建过。下面是详细的解决方案:
#一、tomato路由器
1、设置好jffs和ipkg安装环境;把附件中的geoip压缩包的内容放入/opt/etc/geoip
(或者/jffs/opt/etc/geoip
)目录下。
2、在系统管理——脚本设置——wan连线中输入以下内容:
[ ! -d /var/geoip ]&&(mkdir /var/geoip;cp /opt/etc/geoip/geoipdb.* /var/geoip;modprobe xt_geoip;service firewall restart)
3、配置dns服务器,在基本设置——静态dns中设置ISP提供的DNS和国外的DNS,ISP提供的DNS可以在/tmp/resolv.conf.ppp
文件中看到,国外DNS比如可以是8.8.8.8, 8.8.4.4或208.67.222.222
4、安装shadowsocks(flash小的话可以安装polarssl版),设置配置文件(ss-redir.json),然后运行ss-redir(/opt/etc/init.d/ss-redir start)
。
5、设置防火墙,在系统管理——脚本设置——防火墙中输入以下内容:
iptables -t nat -N SHADOWSOCKS
iptables -t nat -A SHADOWSOCKS -d 106.187.48.122 -j RETURN #这是shadowsocks服务器的IP地址
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 -p tcp -j REDIRECT --to-ports 1080 #1080是本地建立透明代理端口
iptables -A PREROUTING -t nat -m geoip -p tcp ! --destination-country CN -j SHADOWSOCKS
####以上部分用以将TCP流量重定向到shadowsocks
iptables -N dnsfilter -t mangle
iptables -t mangle -I dnsfilter -p udp -m udp -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0x042442b2,0x0807c62d,0x253d369e,0x2e52ae44,0x3b1803ad,0x402158a1,0x4021632f,0x4042a3fb,0x4168cafc,0x41a0db71" -j DROP
iptables -t mangle -I dnsfilter -p udp -m udp -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0x422dfced,0x480ecd63,0x480ecd68,0x4e10310f,0x5d2e0859,0x80797e8b,0x9f6a794b,0xa9840d67,0xc043c606,0xca6a0102" -j DROP
iptables -t mangle -I dnsfilter -p udp -m udp -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0xcab50755,0xcb620741,0xcba1e6ab,0xcf0c5862,0xd0381f2b,0xd1244921,0xd1913632,0xd1dc1eae,0xd35e4293,0xd5a9fb23" -j DROP
iptables -t mangle -I dnsfilter -p udp -m udp -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0xd8ddbcb6,0xd8eab30d,0xf3b9bb27,0x4a7d7f66,0x4a7d9b66,0x4a7d2771,0x4a7d2766,0xd155e58a" -j DROP
iptables -t mangle -I PREROUTING -m udp -p udp --sport 53 -j dnsfilter
####以上部分用来解决DNS污染
#二、openwrt路由器
1、配置DNS
编辑/etc/config/network,在wan配置(config interface 'wan')中,将国外公开DNS服务器(比如8.8.8.8,8.8.4.4,208.67.222.222等)加入DNS 服务器的列表,放在ISP提供的DNS服务器后面(ISP提供DNS可以在/tmp/resolv.conf.ppp 文件中看到),比如:(这里202.106.0.20是北京联通提供的DNS。)
config interface 'wan'
option peerdns '0'
option dns '202.106.0.20 8.8.4.4 208.67.222.222'
重启网络
/etc/init.d/network restart
2、安装和配置shadowsocks
3、安装iptables geoip和u32模块。
# opkg update
# opkg install iptables-mod-geoip
# opkg install iptables-mod-u32
4、安装geoip数据库
生成IP国家信息数据库。在某台Mac或者Linux上下载并解压缩xtables-addons源码,然后按照这篇文档的步骤生成IP数据库。
将中国的IP信息(CN开始的文件)拷贝到路由器/usr/share/xt_geoip/BE或者/usr/share/xt_geoip/LE。是BE还是LE取决于你的路由器的CPU架构是Big Endian还是Little Endian。如果不确定架构类型,可以两个目录都放进去。
5、设置防火墙
iptables -t nat -N SHADOWSOCKS
iptables -t nat -A SHADOWSOCKS -d 106.187.48.122 -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 -p tcp -j REDIRECT --to-ports 1080 #1080是本地建立透明代理端口
iptables -A PREROUTING -t nat -m geoip -p tcp ! --destination-country CN -j SHADOWSOCKS
###以上部分用以将TCP流量重定向到shadowsocks
iptables -N dnsfilter -t mangle
iptables -t mangle -I dnsfilter -p udp -m udp -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0x042442b2,0x0807c62d,0x253d369e,0x2e52ae44,0x3b1803ad,0x402158a1,0x4021632f,0x4042a3fb,0x4168cafc,0x41a0db71" -j DROP
iptables -t mangle -I dnsfilter -p udp -m udp -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0x422dfced,0x480ecd63,0x480ecd68,0x4e10310f,0x5d2e0859,0x80797e8b,0x9f6a794b,0xa9840d67,0xc043c606,0xca6a0102" -j DROP
iptables -t mangle -I dnsfilter -p udp -m udp -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0xcab50755,0xcb620741,0xcba1e6ab,0xcf0c5862,0xd0381f2b,0xd1244921,0xd1913632,0xd1dc1eae,0xd35e4293,0xd5a9fb23" -j DROP
iptables -t mangle -I dnsfilter -p udp -m udp -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0xd8ddbcb6,0xd8eab30d,0xf3b9bb27,0x4a7d7f66,0x4a7d9b66,0x4a7d2771,0x4a7d2766,0xd155e58a" -j DROP
iptables -t mangle -I PREROUTING -m udp -p udp --sport 53 -j dnsfilter
###以上部分用来解决DNS污染
这种针对GFW的随机污染来说有心无力,不如chinadns的直接抢答和过滤!