alwaystest / Blog

24 stars 2 forks source link

树莓派二代 dnsmasq ipset iptables shadowsocks 网关代理 #2

Open alwaystest opened 9 years ago

alwaystest commented 9 years ago

树莓派二代 dnsmasq ipset iptables shadowsocks 网关代理

标签(空格分隔): linux 树莓派 翻墙


Chain PREROUTING (policy ACCEPT 113 packets, 7121 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  601 37404 SHADOWSOCKS  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain INPUT (policy ACCEPT 133 packets, 8337 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 172 packets, 11193 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 204 packets, 13097 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain SHADOWSOCKS (1 references)
 pkts bytes target     prot opt in     out     source               destination         
   41  2461 RETURN     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt: <vps_port>
    0     0 RETURN     all  --  *      *       0.0.0.0/0            <vps_ip>      
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/8           //保留地址
    4   204 RETURN     all  --  *      *       0.0.0.0/0            10.0.0.0/8          //局域网地址
    0     0 RETURN     all  --  *      *       0.0.0.0/0            127.0.0.0/8         //回环地址
    0     0 RETURN     all  --  *      *       0.0.0.0/0            169.254.0.0/16      //保留地址
    0     0 RETURN     all  --  *      *       0.0.0.0/0            172.16.0.0/12       //本地局域网
    2   120 RETURN     all  --  *      *       0.0.0.0/0            192.168.0.0/16      //局域网地址
  131  7228 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            match-set ss dst redir ports <local_proxy_port>  //检测目的地址匹配ipset里面的就转发到shadowsocks端口

命令example:

ipset -N ss iphash
iptables -t nat -N SHADOWSOCKS
iptables -t nat -A SHADOWSOCKS -d 127.0.0.1 -j RETURN  //按照這個,将不需要代理的ip添加进去
iptables -t nat  -A SHADOWSOCKS -p tcp -j REDIRECT --to-port 1080  //貌似有了ipset后就不用这个规则了,这条作用是将之前没有匹配上的所有TCP包全重定向到代理端口,有人把海外的IP全走代理
iptables -t nat -A PREROUTING -p tcp -m set --match-set ss dst -j REDIRECT --to-port 1080  // 將匹配ipset裏面ip地址的TCP包定向到代理端口
iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS  //将进来的TCP包导入SHADOWSOCKS链,使上面的规则生效
server=114.114.114.114  //指定dns服務器
server=/googleapis.com/208.67.222.222#5353 //指定域名解析使用的DNS及端口
ipset=/google.com/ss    //解析完這個域名,將其加入ipset的ss鏈,使其被iptables匹配
ipset list ss   //查看ss鏈的內容
ipset flush ss  //清空ss鏈的內容

netstat -tunlp|grep 53 //查看53端口佔用情況,判斷dnsmasq是否啓動成功

#!/bin/sh
ipset -N ss iphash
iptables-restore < /etc/sysconfig/iptables
/usr/local/sbin/dnsmasq
nohup /usr/local/bin/ss-redir -vc /home/pi/config.json 1 > /home/pi/ssredir.log 2>&1 &

开机启动可以自己写一个指定格式的脚本,放到/etc/init.d/ 下,执行update-rc.d就可以自动把开机启动加到对应的目录下,网上说手动软连接也可以实现开机启动,但是我上次软连接以后开机并没有自动启动,待测。


參照

CentOS6.5 64bit如何安装DNS服务dnsmasq 作为翻墙利器 OpenWRT配合shadowsocks 最智能的全局代理 OpenWrt VPN 按域名路由 利用ipset进行选择性的翻墙 如何在Linux下大量屏蔽恶意IP地址(ipset) 智能翻墙: 树莓派 + shadowsocks

alwaystest commented 7 years ago

最近又折腾了刷路由器的办法,发现大家在~使用pdnsd来做dns缓存,dnsmasq只做ipset添加和dns转发~(纠正:使用pdnsd的原因主要是可以使用tcp协议进行dns查询,防止udp查询方式的投毒攻击,缓存部分和ipset添加依然是dnsmasq进行控制,当然pdnsd也可以配置缓存。所以现在的模式是dnsmasq监听53端口的dns查询,如果命中缓存,就直接返回结果,如果需要进行查询,则根据配置选择上级dns服务器,如果是在黑名单的域名,就转发给pdnsd,否则就使用正常的上级dns进行查询,这样会比较快一些)。因为之前我也遇到过,虽然dnsmasq设置了缓存的dns数量,但是经常会莫名其妙的丢失记录,导致经常性的需要把dns请求转发到VPS进行查询。

正常的网络的话,其实转发就转发了,大不了网络首次访问会慢一丢丢。但是遇上坑爹的小运营商就糟糕了,本来VPS的丢包率就高,如果dns缓存总是丢失的话,经常会出现dns请求超时的问题。

目前已经被我拉入黑名单的运营商有长城宽带和鹏博士宽带。预计其他小运营商也好不到哪去。

作为一名软件工程师,网络的投资还是不能省的。一个稳定的网络,带给我们的是丝滑的体验,而不是三天两头给客服打电话反映网络有问题。