Skip to content

Instantly share code, notes, and snippets.

@wen-long
Last active September 2, 2019 11:30
Show Gist options
  • Save wen-long/9635831 to your computer and use it in GitHub Desktop.
Save wen-long/9635831 to your computer and use it in GitHub Desktop.

参考了以下两篇文献: 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污染

@houzi-
Copy link

houzi- commented Sep 23, 2015

这种针对GFW的随机污染来说有心无力,不如chinadns的直接抢答和过滤!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment