dnsmasq + ipset + ss-redir + ss-tproxy + (chinadns)

手头有几个N1,特意来摸索下当网关科学上网的方案,经过几天的测试,终于确定用上面四个组件来实现。

几点说明:

1.用ss-tproxy的好处是有个控制程序,方便查看各组件的工作状态。而且不用单独配置dnsmasq和ipset了,都交给ss-tproxy去完成,方便。

2.如果是用gfwlist模式,就只要用这四个组件,如果要用chnroute模式(即国内流量直连,国外流量走代理)的话,需要再装一个chinadns.

3.ss-redir是包含在shadowsocks-libev里面的,所以其实就是安装shadowsocks-libev.

4.前提条件是要有一个开着ss的vps,当然ssr/v2也可以。

5.ss-tproxy的网址在这里https://github.com/zfl9/ss-tproxy,请仔细看完说明再下手操作。

6.如果你用的是v2,那么请参考这篇文章,大同小异。

armbian使用XQ7打包的4.18.7版本
https://www.right.com.cn/forum/thread-394823-1-1.html

安装dnsmasq

apt install dnsmasq

安装ipset

apt install ipset

安装 ss-tproxy

git clone https://github.com/zfl9/ss-tproxy  
cd ss-tproxy  
cp -af ss-tproxy /usr/local/bin  
chmod 0755 /usr/local/bin/ss-tproxy  
chown root:root /usr/local/bin/ss-tproxy  
mkdir -m 0755 -p /etc/ss-tproxy  
cp -af ss-tproxy.conf gfwlist.* chnroute.* /etc/ss-tproxy  
chmod 0644 /etc/ss-tproxy/* && chown -R root:root /etc/ss-tproxy  

安装shadowsocks-libev

wget --no-check-certificate -O shadowsocks-all.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-all.sh  
chmod +x shadowsocks-all.sh  
./shadowsocks-all.sh 2>&1 | tee shadowsocks-all.log  

安装chinadns (可选)

wget https://github.com/shadowsocks/ChinaDNS/releases/download/1.3.2/chinadns-1.3.2.tar.gz  
tar xf chinadns-1.3.2.tar.gz  
cd chinadns-1.3.2/  
./configure  
make && make install  

配置N1上的shadowsocks-libev的config.json

这个配置文件的位置在/etc/shadowsocks-libev目录下面,参考配置如下:

{
   "server":"你的ss的ip",  
   "server_port":你的ss的端口,  
   "password":"你的ss的密码",  
   "local_address": "0.0.0.0",       //这行不要去写127.0.0.1,请写0.0.0.0  
   "local_port":60080,               //这个是转发流量的端口,tcp和udp流量都会走这个端口,我们称为异常牛逼的本地转发端口  
   "timeout":600,  
   "method":"你的ss的加密协议,如aes-128-ctr等"    //这里注意和你的ss服务器上的设置要一致  
}

配置ss-tproxy的配置文件ss-tproxy.conf

这个配置文件的位置在/etc/ss-tproxy目录下面,参考配置如下:

    ## mode  
    #mode='global'  
    #mode='gfwlist'                 //如果用gfwlist模式,那么chinadns不用装  
    mode='chnroute'                 //这里我们用chnroute模式,把前面的#号去掉就表示启用了  

    ## proxy  
    proxy_tproxy='false'   # 纯TPROXY方式                //这里除非你用v2,ss/ssr都是选false  
    proxy_server=(你ss服务器ip)   # 服务器的地址            //你的ss服务器ip,要保留括号的  
    proxy_dports=''                # 服务器的端口         //这里就这样,不要动,表示放行所有端口  
    proxy_tcport='60080'             # TCP 监听端口        //就是上面提到的异常牛逼的本地转发端口  
    proxy_udport='60080'           # UDP 监听端口        //就是上面体到的异常牛逼的本地转发端口  
    proxy_runcmd='ss-redir -s 你ss的ip -p 你的ss的端口 -m 你的ss的加密协议 -k 你的ss的密码 -b 0.0.0.0 -l 60080 -u </dev/null &>> /var/log/ss-redir.log &'  
                                                        //上面这行很重要,是启动ss本地转发的命令,注意参数,不要写错。  
    proxy_kilcmd='kill -9 $(pidof ss-redir)'  # 停止的命令行  

    ## dnsmasq  
    dnsmasq_cache_size='10240'              # DNS 缓存条目  
    dnsmasq_cache_time='3600'               # DNS 缓存时间  
    dnsmasq_log_enable='false'              # 是否记录日志  
    dnsmasq_log_file='/var/log/dnsmasq.log' # 日志文件路径  

    ## chinadns  
    chinadns_mutation='false'                # DNS 压缩指针  
    chinadns_verbose='false'                 # 记录详细日志  
    chinadns_logfile='/var/log/chinadns.log' # 日志文件路径  

    ## dns  
    dns_modify='true'            # 直接修改 resolv.conf   //这里用true,有问题再改  
    dns_remote='8.8.8.8:53'      # 国外 DNS,必须指定端口  
    dns_direct='223.5.5.5'          # 国内 DNS,不能指定端口   //国内的dns,你可以自己指定  

    ## ipts  
    ipts_rt_tab='100'              # iproute2 路由表名或 ID  
    ipts_rt_mark='0x2333'          # iproute2 策略路由的标记  
    ipts_non_snat='true'           # 不设置 SNAT iptables 规则  
    ipts_intranet=(192.168.0.0/16) # 内网网段,多个请用空格隔开  

    ## opts  
    opts_ss_netstat="netstat"  # 'auto|ss|netstat',使用哪个端口检测命令  //这里默认是auto,如果ss-tproxy的状态有问题,就改成netstat试试  

    ## file  
    file_gfwlist_txt='/etc/ss-tproxy/gfwlist.txt'   # gfwlist 黑名单文件 (默认规则)  
    file_gfwlist_ext='/etc/ss-tproxy/gfwlist.ext'   # gfwlist 黑名单文件 (扩展规则)  
    file_chnroute_txt='/etc/ss-tproxy/chnroute.txt' # chnroute 地址段文件 (chinadns)  
    file_chnroute_set='/etc/ss-tproxy/chnroute.set' # chnroute 地址段文件 (iptables)  

启动ss-tproxy

在n1输入ss-tproxy start命令就启动了,如果成功了,可以看到如下的提示。

然后到客户机上把网关和dns都设置成N1的IP就行了。

mode:     chnroute
pxy/tcp:  [running]
pxy/udp:  [running]
dnsmasq:  [running]
chinadns: [running]

设置ss-tproxy 开机启动

在rc.local里写入ss-tproxy start这条命令就行了。

[完]


扫描二维码,在手机上阅读!