自动翻墙配置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的转换并不完美, 所以可能会有不少域名有问题.

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

|2|1


发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据