美文网首页Linux树莓派
openwrt设置ss代理(2), 配置dnsmasq与gfwl

openwrt设置ss代理(2), 配置dnsmasq与gfwl

作者: 朝西的生活 | 来源:发表于2017-09-26 09:57 被阅读638次

      上文已经讲到如何在openwrt中实现全局ss代理, 但是将所有流量全部使用ss-server来转发务必耗费ss服务器的带宽及性能,因此必须有一种方式来智能判断当前流量是否有必要经过ss转发,在尝试了几天后,采用了本文的方案.

    dnsmasq

      dnsmasq是一个小巧且方便地用于配置DNS和DHCP的工具, 采用简单的配置,即可实现我们想要的功能, 具体配置稍后细讲.

    chinadns_chnroute

      chinadns_chnroute存放了指定流量不走ss的部分ip段, 因此,实现流量分发的原理即如下:

    • 访问百度(百度ip段在chinadns_chnroute中), 流量不走ss, 直接使用普通dns解析.
    • 访问google(google服务器ip段不在chinadns_chnroute中), 使用dnsmasq将需要查询dns的服务通过ss-tunnel查询出正确结果, 流量走ss.

    配置过程

    1. 修改ss启动文件
      vi /etc/init.d/shadowsocks
    #!/bin/sh /etc/rc.common
    
    START=95                                                      
                   
    SERVICE_USE_PID=1
    SERVICE_WRITE_PID=1
    SERVICE_DAEMONIZE=1
                       
    start() {          
            service_start /usr/bin/ss-redir -b 0.0.0.0 -c /etc/shadowsocks.json -f /var/run/shadowsocks.pid -u
            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() {                             
            service_stop /usr/bin/ss-redir
            service_stop /usr/bin/ss-tunnel
            killall ss-redir               
            killall ss-tunnel              
            /etc/init.d/firewall restart   
    } 
    

    启动ss-tunnel转发国外的dns请求, 监听端口为3210, 注意, 记住这里3210端口号, 必须与后面dnsmasq重定向流量的端口匹配.

    1. 配置dnsmasq
    • 修改/etc/dnsmasq.conf, 在文件末尾追加conf-dir=/etc/dnsmasq.d
    • 新建存放配置文件的目录,mkdir /etc/dnsmasq.d 即上一步中提到的 conf-dir
    • 放入配置文件
      (1) accelerated-domains.china.conf存放了不需要ss处理的部分域名, dnsmasq遇到这些域名时使用文件所指的dns服务器解析域名
      (2) gfwlist.conf其他域名,转发到ss-tunnel指定的端口dns查询
      cat gfwlist
      server=/#/127.0.0.1#3210
      
      等号后边第一个#表示通配, 后面是转发的地址与端口, 这里的端口必须与ss-tunnel的监听端口匹配
      dnsmasq匹配域名的特点是详细特征优先匹配,因此会先匹配accelerated-domains.china.conf上的域名,如果不匹配,再匹配这条规则:转发到本地端口3210进行域名查询。
    1. 配置iptables防火墙转发IP和端口
    root@OpenWrt:~# cd /usr/bin
    root@OpenWrt:~# touch shadowsocks-firewall
    root@OpenWrt:~# chmod +x shadowsocks-firewall
    root@OpenWrt:~# vi shadowsocks-firewall
    

    填入下面内容

    #!/bin/sh
    
    #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    
    #iptables -t nat -A SHADOWSOCKS -d 1.0.9.7 -j RETURN
    #iptables -t nat -A SHADOWSOCKS -d 1.0.9.6 -j RETURN
    
    # 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
    
    #for hulu.com
    iptables -t nat -A SHADOWSOCKS -p tcp --dport 1935 -j REDIRECT --to-ports 1080
    iptables -t nat -A SHADOWSOCKS -p udp --dport 1935 -j REDIRECT --to-ports 1080
    
    # for Chrome browser and youtube.com
    iptables -t nat -A SHADOWSOCKS -p udp --dport 443 -j REDIRECT --to-ports 1080
    
    # Anything else should be redirected to shadowsocks's local port
    iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 1080
    # 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
    

    确保操作无误后

    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
    
    1. 能打开google,并正常显示
    2. 查询IP查询自己ip非ss-server所在ip
    3. enjoy

    参考

    1. https://softwaredownload.gitbooks.io/openwrt-fanqiang/content/ebook/03.5.html

    相关文章

      网友评论

      本文标题:openwrt设置ss代理(2), 配置dnsmasq与gfwl

      本文链接:https://www.haomeiwen.com/subject/dlojextx.html