基于openwrt的shadowsocks智能代理配置

配置环境

openwrt12.09稳定版
基于ar71xx

安装shadowsocks

因为shadowsocks的aes-256加密需要高版本的libpolarssl,但是12.09源中的libpolarssl不是最新的,虽说做个软链接也能够“骗过”shadowsocks,但是对于一个重度强迫症患者来说一定要装最新的!!
经测试,trunk源中的libpolarssl可以在12.09中使用,ssh到路由器上并安装:

cd /tmp
wget http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/libpolarssl_1.3.7-1_ar71xx.ipk
opkg install libpolarssl_1.3.7-1_ar71xx.ipk
wget http://lecterlee.com/myfile/shadowsocks-libev-polarssl_1.4.6_ar71xx.ipk #因为shadowsocks的下载地址被gfw屏蔽,所以我保存了一份在服务器上
opkg install shadowsocks-libev-polarssl_1.4.6_ar71xx.ipk
这样shadowsocks就搭建完成了,shadowsocks默认启动时运行的是ss-local,但是如果要搭建全局代理的话需要使用ss-redir,所以,我们需要修改一下启动脚本:

sed -i 's/ss-local/ss-redir/g' /etc/init.d/shadowsocks

修改配置文件/etc/shadowsocks.json:

{
    "server":"1.1.1.1",
    "server_port":12121,
    "local_port":1081,
    "password":"21212",
    "method": "aes-256-cfb",
    "timeout":600
}

启动并设置开机启动:

/etc/init.d/shadowsocks start
/etc/init.d/shadowsocks enable
使用iptables重定向流量

经过上一步,已经可以进行科学上网了,但是所有的流量都会经过vpn,我们需要使用iptables对流量进行重定向,我使用的是比较无脑的除了亚洲以外全部重定向的规则,在这里https://gist.github.com/reee/fe174cfd8985273bc478,按自己的情况修改运行即可,需要安装iptables-mod-nat-extra:

opkg update
opkg install iptables-mod-nat-extra

这样做的好处是不需要频繁的修改iptables规则,但是gfw也会屏蔽一些台湾的ip段,如果有需要的话可以自行修改,经过一番google,发现北落师门老兄用的是另一种方法,即默认所有流量走本地,需要使用代理的地址通过dig和APNIC WHOIS工具来获得其ip段,并使用iptables重定向流量,这种方法比较智能,但是对于懒人来说是不能忍受的,在这里我也把方法贴出来,供大家选择:

iptables -t nat -N SHADOWSOCKS     #创建SHADOWSOCKS链
iptables -t nat -A SHADOWSOCKS -p tcp -d 74.125.0.0/16 -j REDIRECT --to-ports 1081
iptables -t nat -A SHADOWSOCKS -p tcp -d 173.194.0.0/16 -j REDIRECT --to-ports 1081     #google的一些IP段重定向到1081端口(shadowsocks监听的端口)
iptables -t nat -A SHADOWSOCKS -p tcp -j RETURN     #忽略其他tcp请求
iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS     #在路由之前使用SHADOWSOCKS链
上面是一个使用的例子,仅仅列出了使用google的方法,如果以后遇到需要使用代理的地址时,只需在SHADOWSOCKS链添加相应的redirect规则即可,但是需要注意的是,添加时要使用-I而不是-A,因为使用-A会使新添加的规则处于链的最底部,而由于上面有一个return规则会使新规则不生效,所以,要保证SHADOWSOCKS链中的最后一个规则为return规则

使用tcp协议查询dns

按照上面的步骤做完后,会发现google可以访问了,但一些类似于facebook之类的网站还是不能访问,这是因为gfw对53端口使用udp协议的dns进行了污染,你所查询到的是错误的ip,我们使用dnsmasq+pdnsd来避免dns污染
dnsmasq在openwrt属于默认安装软件,只需安装pdnsd即可

opkg update
opkg install pdnsd

安装完成后将/etc/pdnsd.conf文件修改为:

global {
    # debug = on;         
    perm_cache=1024;
    cache_dir="/var/pdnsd";
    run_as="nobody";
    server_port = 1053;    #指定1053端口,避免和dnsmasq端口冲突
    server_ip = 127.0.0.1;
    status_ctl = on;
    query_method=tcp_only;     #只使用tcp查询
    min_ttl=15m;
    max_ttl=1w;
    timeout=10;
}
 
server {
    label= "mydns";
    ip = 8.8.8.8;     #上游dns地址,必须要支持tcp查询
    root_server = on;。
    uptest = none;
}

启动pdnsd并设置为开机启动:

/etc/init.d/pdnsd start
/etc/init.d/pdnsd enable

新建dnsmasq配置文件夹并添加规则:

mkdir /etc/dnsmasq.d
cat >> /etc/dnsmasq.d/fuckgfw.conf << EOF
#Google and Youtube
server=/.google.com/127.0.0.1#1053
server=/.google.com.hk/127.0.0.1#1053
server=/.gstatic.com/127.0.0.1#1053
server=/.ggpht.com/127.0.0.1#1053
server=/.googleusercontent.com/127.0.0.1#1053
server=/.appspot.com/127.0.0.1#1053
server=/.googlecode.com/127.0.0.1#1053
server=/.googleapis.com/127.0.0.1#1053
server=/.gmail.com/127.0.0.1#1053
server=/.google-analytics.com/127.0.0.1#1053
server=/.youtube.com/127.0.0.1#1053
server=/.googlevideo.com/127.0.0.1#1053
server=/.youtube-nocookie.com/127.0.0.1#1053
server=/.ytimg.com/127.0.0.1#1053
server=/.blogspot.com/127.0.0.1#1053
server=/.blogger.com/127.0.0.1#1053
 
#FaceBook
server=/.facebook.com/127.0.0.1#1053
server=/.thefacebook.com/127.0.0.1#1053
server=/.facebook.net/127.0.0.1#1053
server=/.fbcdn.net/127.0.0.1#1053
server=/.akamaihd.net/127.0.0.1#1053
 
#Twitter
server=/.twitter.com/127.0.0.1#1053
server=/.t.co/127.0.0.1#1053
server=/.bitly.com/127.0.0.1#1053
server=/.twimg.com/127.0.0.1#1053
server=/.tinypic.com/127.0.0.1#1053
server=/.yfrog.com/127.0.0.1#1053
EOF

配置文件中的域名转发到pdnsd进行tcp查询,这里直接使用北落师门老兄的配置文件了,列出了常用的被污染域名,可以按照自己需要添加
修改dnsmasq配置文件使其识别我们新建的目录,只需在/etc/dnsmasq.conf最后一行追加:

conf-dir=/etc/dnsmasq.d

这样就实现了基于openwrt的智能代理,所有连接此路由器的设配无需配置即可科学上网

但是,我发现google的8.8.8.8公共dns服务器在我这里丢包率到达75%,萌生了自己搭建dns的念头,但是bind9默认优先使用udp,没有找到设置为强制tcp的方法,经过一番google后,终于在Malash老兄这里找到了解决办法
首先是拥有一台在墙外的服务器(之前用的shadowsocks服务器即可),下载并解压bind9

wget http://www.isc.org/downloads/file/bind-9-10-0b1-2/?version=tar.gz -O bind-9.10.0-P2.tar.gz
tar xf bind-9.10.0-P2.tar.gz
cd bind-9.10.0-P2
修改bind9源码文件lib/dns/resolver.c,大约在1445行

将 query->options = options; 修改为 query->options = options | DNS_FETCHOPT_TCP;
编译并安装bind9

./configure --prefix=/usr/local/named --enable-threads --enable-largefile
make && make install

生成配置文件

/usr/local/named/sbin/rndc-confgen > /usr/local/named/etc/rndc.conf
tail -n10 /usr/local/named/etc/rndc.conf | head -n9 | sed -e s/#\ //g > /usr/local/named/etc/named.conf
修改named.conf文件,追加:

 

options {
           forward only;
           forwarders {
            8.8.8.8;
            8.8.4.4;
            };
           allow-query {
                 any;
            };
 };

上游DNS服务器为google的,只作为转发,设置完后调试bind9

/usr/local/named/sbin/named -uroot -g -d 9

没有错误后即可启动bind

/usr/local/named/sbin/named -uroot

打开tcp的53端口,设置路由器上的pdnsd即可

iptables -I INPUT -p tcp --dport 53 -j ACCEPT

时间: 2024-11-03 07:49:56

基于openwrt的shadowsocks智能代理配置的相关文章

低成本制作基于OpenWRT的渗透工具

不知道你听说过Hak5的产品没有,它们可是黑客以及渗透测试人员的最爱.其中,有很多的PoC黑客工具都曾在热门美剧<黑客军团>中出现过.Hak5的 PACKETSQUIRREL 上架已经有好几个星期了,而在这篇文章中,我将会对这个价值59美金的"小玩意儿"进行分析,并以低成本制作一个类似的工具. PACKET SQUIRREL为何物? 这是一款多功能的以太网工具,它可以给我们提供隐蔽性极高的远程访问.网络数据包捕获.以及安全的VPN连接等功能.攻击者可以直接将PACKET S

嵌入式Linux系统OpenWRT路由的基本配置

  OpenWRT是一个嵌入式Linux系统,想要了解嵌入式Linux系统的朋友有福了,今天小编要给大家介绍下OpenWRT路由的基本配置,一起来学习下吧. chnroutes 路由表 这个路由表集中了所有分配到中国大陆的 IP 段,根据 http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest 每天自动更新,可使得在访问国内地址时不经过 VPN. 想想如果能够让家里的路由直接连接 VPN,在家连接 WiFi 的所有设备直接达到F

Arduino Tian介绍:基于OpenWrt的32位ARM物联网单片机

2016似乎是"单片机之年",因为在树莓派的激励下,已经有越来越多的公司在建造各种有趣的板子.几天前,我们曾展示过一款即将到来的开发板,那是来自Mozilla日本团队.运行Firefox OS的Chirimen物联网单片机开放平台.不过本文要为大家介绍的,则是运行基于OpenWrt Linux OS的32位ARM架构物联网单片机,它的名字叫做Arduino Tian. 如果你曾把玩过Arduino,那么这款单片机的上手也绝对不是问题.除了物联网项目之外,开发者也可以将它用到机器人.自动

基于端口的VLAN典型配置指导

VLAN典型配置全过程 如下:组网图498)this.w idth=498;' onmousewheel = 'javascript:return big(this)' height="320" alt="基于端口的VLAN典型配置指导" width="402" border="0" src="http://images.51cto.com/files/uploadimg/20110308/1129090.jpg&q

.NET下基于组件的分布式系统动态配置

动态|分布式 摘要 动态配置为基于组件的分布式系统提供了一种在线演化的强大机制.本文提出了一种在MS Dot Net环境下建立一个可动态配置的分布式应用系统的策略. 关键字 组件.AOP.动态配置 引言 随着分布式系统在各个关键业务中起到越来越多的作用,如银行系统.基础通信系统,而这些业务是需要长时间不间断运行的,因此对系统的演化必需是在线进行的.本文提出了一种在MS Dot Net Framework环境下实现基于组件的分布式系统的动态配置策略. 对分布式系统描述 基于组件技术的分布式系统可以

Spring3.2中Bean定义之基于Annotation和Java Code配置方式的源码解析

基于 Annotation 配置 Bean Definition 的源码解读 本系列文章第一部分分析了 Spring 解析 XML 配置文件中 <bean /> 元素的源码,这是 Spring 最原始的一种配置方式,同时也使 XML 中的节点具有命名空间特性.参考 Spring 相关文档,如果有如下的配置方式: <context:component-scan base-package="com.colorcc.spring.sample" /> 则可知:其一,该

基于报文地址的策略路由配置示例

[实验拓扑] 本文实验采用的交换机是H3C模拟器,下载地址如下: http://forum.h3c.com/forum.php? mod=viewthread&tid=109740&highlight=H3C%E6%A8%A1%E6% 8B%9F%E5%99%A8 有兴趣的朋 友可以在论坛上去下载 [组网需求] 普通的报文转发是依据报文的目的地址查询转发表来实现的.策略路由支持基于acl包过滤.地址长度等信息,灵活地指定路由.而acl报文过滤则可以根据报文的源ip.目的ip.协议.端口号.

基于JEP并结合可配置公式实现用户自定义字段的解决方案

随着 IT 技术的普及和发展,用户的信息化水平越来越高,软件产品除了满足用户的基本需求之外,还必须越来越照顾到用户的个性化需求,为用户提供深层次的http://www.aliyun.com/zixun/aggregation/17516.html">个性化服务.以一个包含报表展示功能的产品为例,默认呈现给所有用户完全相同的报表,即同一个报表的字段内容和标签对所有用户完全相同.而在实际中,我们常常会遇到不同的用户由于其业务需求的不同,对于同一张报表,除基本数据字段之外,还要求额外增加符合该用

基于Annotation和Java Code配置方式的源码解析

本系列文章第一部分分析了 Spring 解析 XML 配置文件中 <bean /> 元素的源码,这是 Spring 最原始的一种配置方式,同时也使 XML 中的节点具有命名空间特性.参考 Spring 相关文档,如果有如下的配置方式: <context:component-scan base-package="com.colorcc.spring.sample"/> 则可知:其一,该元素采用了"http://www.springframework.or