标签: chinadns

Supervisor on EdgeOS是真的好用啊~~

因为要在ERL3上挂SS跟ChinaDNS…所以在后台进程是有Linux管理的ChinaDNS以及ss-redir…

但是不知为啥…ChinaDNS跟ss-redir, 尤其是chinaDNS,会莫名就总结.

后来一段时间用Crontab的定时任务把ChinaDNS跟ss-redir定时重启.

不过总觉得这管理方式很土.

最近换了Supervisor…感觉各种好…很稳, 自定义配置文件,有log 记录..甚至于还能做web查询.完美…

ERL-3现在用的系统没有systemd, 以后估计也未必有..所以暂时来说, Supervisor应该算是很不错的选择呢..

 

细节决定成败啊~~EdgeRouter大破恢复中的一个细节坑了我2天..

EdgeRouter Lite 3(后面简称ERL3)在最近的一次系统升级后再起不能…

连上console去查看,发现是U盘内的系统引导不起来了,所以就一直在不停重启…

得,拆机器确认下内置U盘是不是还活着…U盘还能读…那就用恢复系统重新引导重做系统吧….

重做完了开始恢复所有配置, 因为备份的存在所以基础配置是没有悬念的….然而问题是….后台用Linux命令完成的Shadowsocks出问题了..

转发无法工作…

可以确认的是, 服务器是没有问题的..那么问题就只能在本地了..

本地的ss代理一共有4大部分组成:

  1. DNSMASQ +IPSet,组成本地的DNS解析功能以及翻墙需要功能的IP列表记录.
  2. ChinaDNS作为非国内IP的DNS解析工具
  3. Shadowsocks-Libev 作为透明代理
  4. iptables作为流量分离工具

其中1跟4其实都是系统已经自带的功能, 基本不太可能出问题, 唯一的区别是, 1是可以简单验证的, 而iptables我不知道怎么确定他把识别到了正确的组而把流量转发到需要的端口去了.

所以,故障排除顺序是

  1. 确认dns正常工作, dnsmasq没问题, chinadns也没问题, ipset正常记录IP一样很正常,所以1跟2没问题
  2. 确认ss工作正常. 启动-v的诊断模式, ss的log没有任何异常

然后我就没想法了…因为iptables我不知道怎么确认..

然后查了各种地方测试了不同版本的ss,不同的服务器,不同的iptables配置方式,不同的本地端口, 都无法解决问题…很尴尬啊..心态略崩溃…

不过在最后, 发现之前已经灭了的onlyOS博客又能看了…..所以爬了下评论…发现一个之前完全不知道的config.json的点..

因为之前其实调整过很多次config文件…主要就集中在本地端口跟本地的IP配置上….所以本着死马当作活马医的态度,再试了一下..nice啊..

 

所以问题的关键还在于…细节啊..

这个细节就是…本地的config.json..local_address是要用0.0.0.0的,不配置local_address或者配置127.0.0.1,都是没用的..

至少后面的telnet很明确验证了这个情况….唉…不过好歹救回来了…我现在要纠结的事情变成了….我要不要换个U盘给路由呢…有点抖啊…怕再出点什么幺蛾子…

自动翻墙配置EdgeOS篇

ROS篇结束以后,我们来记录一下现在正在工作的EdgeOS的配置.

大概介绍一下Edge Router Lite 3这个路由器.

ERL3是Ubnt发售的一款纯有线的路由, 以NAT速度快闻名, 有记录是在1G的网络上可以跑出900多M的NAT速度…所以说速度很快.

有兴趣的朋友可以去amazon收一个:

Ubiquiti Networks Edgerouter Lite 3Port Router (ERLITE-3)

 

下面这个是ER-X, 相对ERL-3有缩水不过ERL3的价格比这个高不少, 所以ER-X还是比较超值的

Ubiquiti EdgeRouter X Advanced Gigabit Ethernet Routers ER-X 256MB Storage 5 Gigabit RJ45 ports

 

当然也可以国内某著名网站

其内嵌的EdgeOS的本质是跑在一个Debian系统上的Vyatta路由系统, 因为vyatta现在已经被博通收购, 所以现在的EdgeOS是基于原本的开源代码后续开发的, 在命令行格式上仍然完全集成了vyatta的模式.

由于EdgeOS其实是Debian上的一个应用, 所以我们很多时候可以跳过edgeos, 直接在debian上操作来实现一些edgeos上并不能实现的功能.

思路其实仍然一样, 我们需要解决2个问题:

  1. DNS污染的问题
  2. 流量区分的问题

因为我们可以直接在Debian上操作, 所以我们的选择就多了很多很多…毕竟Linux base的东西太多了.

所以我们现在选择这样的组合来完成我们需要的功能:

  1. VPN隧道+IPset+edgeOS的防火墙规则转发
  2. SS隧道+Ipset+ChinaDNS+iptables防火墙规则转发
  3. 上面这种的混合模式

首先我们来介绍一下第一种,这种方式的好处在于不需要对路由内的debian做太多的操作, 相对来说比较容易实现.

VPN的隧道可以选择IPsec SSL, L2TP或者PPTP.

广告一波我在用的VPS:https://bandwagonhost.com/aff.php?aff=5802

我在搬瓦工已经有了PPTP, 所以就自然直接上PPTP了, 不过因为ERL的GUI模式是没有PPTP的设置界面的, 所以我们需要使用edgeOS的命令行模式:

configure
 edit interfaces pptp-client pptpc0
 set user-id your-sername
 set password your-password
 set server-ip your-vps-ip
 set require-mppe
 commit
 save
 exit

只要数据正常, vpn就会自动拨号连接起来, 然后就是NAT:

configure
set service nat rule 5012 type masquerade
set service nat rule 5012 outbound-interface pptpc0
commit
save
exit

NAT完成以后, 我们需要搞定路由,

在搞定路由之前, 我们先需要认识一下IPSET这个Linux的工具, IPSET算是Dnsmasq和iptables的一个辅助工具, 主要的功能是快速的把域名或者IP归类, 然后帮助防火墙来识别, Dnsmasq算是附带的.

所以这里就有一个逻辑, 就是我们把所有gfwlist所知道的被墙的域名都转换为IPSET所能认识的配置文件, 在这样的情况下通过IPSET所归类的组, 我们可以要求dnsmasq去制定的DNS服务器去解析, 而避免了被墙的域名遭到污染, 同时呢, 这个组又可以作为防火墙的选择依据, 让这组的路由全部都走VPN通道出去:

具体的思路可以参考:

https://xiaoding.org/?p=391

这位兄弟的博客, 上面同时也有编译好的高版本的Dnsmasq, 因为系统内建的是2.61版本不支持ipset功能.

在理解这些以后, 我们可以先通过系统命令创建一个组:

configure
 set firewall group address-group group-name
commit
save

这时候ipset就有了一个可以自由使用的组了.

然后我们就把gfwlist转换成所需要的ipset设置, 因为gfw太大了, 所以我们需要跑个python的脚本, 可以从github直接抄来:

https://github.com/smallfount/gfwlist2dnsmasq

gfwlist2dnsmasq, 我把文件直接上传了可以直接下:

然后用python2 跑一遍就可以得到需要的ipset列表, 并且会根据脚本的配置去配置放到指定的地方然后dns的解析也是我们设定的方式.

最后就是防火墙规则的配置了:

configure
set protocols static table 1 interface-route 0.0.0.0/0 next-hop-interface pptpc0
set firewall modify your-group-name rule 1 action modify 
set firewall modify your-group-name rule 1 destination group address-group your-group-name 
set firewall modify your-group-name rule 1 modify table 1 set firewall modify your-group-name rule 1 protocol all
set interfaces ethernet eth1 firewall in modify your-group-name 
commit 
save

这样的配置就会让系统的防火墙根据group去区分不同的出口.

然而问题还是有: 因为gfwlist的转换并不完美, 所以可能会有不少域名有问题.

所以还有另外的办法,我们下一篇继续