文章目录

上一篇文章介绍了我目前在routeros这种硬路由平台下是如何连接绿色通道的,不过如果只是做到那种程度实际上还不足以实现网关级的透明代理,因为策略路由还没有实现自动化,本文将会把剩下这部分补充完善。

前言

如果你有疑问,为什么要搞得这么麻烦,我想你应该不是本文的目标读者,因为本文面向的是routeros硬路由系统用户。

普通方案:dnsmasq+gfwlist+iptables+ipset

目前实现xx最常见的策略路由方案应该是 dnsmasq+gfwlist+iptables+ipset 了,但是这种方案也仅仅只是面向家用的那种软路由(没错……可装插件的路由不叫软路由叫啥)。

  • dnsmasq:轻量级dns服务器
  • ipset: iptables的一个扩展

这个方案的原理基本上就是,dns服务器根据dns-request和gfwlist向上游服务器查询dns记录,然后根据gfwlist的命中与否决定是否插入某一个ipset,最后,iptables规则会根据某一个ipset进行nat转发。

routeros下的方案

routeros这种真正的硬路由系统,你压根不可能在系统上安装一些扩展的东西,所以有了上一篇文章的ssr转pptp的服务。

关于策略路由的部分,很明显,策略肯定都来源于gfwlist这个名单,但有个问题,gfwlist中的大部分规则实际上都是泛域名规则,如果想要在routeros上做策略,就必须将这个名单转换为一份ip列表,然后录入routeros的防火墙,然而预先转换是不可能的,除非你真的可以穷举这些泛域名规则里涵盖的每一个域名。

jrodns

所以,jrodns这个工具就诞生了。
https://github.com/actck/jrodns.git

为了实现gfwlist规则的事实转换并应用,我实现了一个小工具,实际上它应该是一个mini版的dns代理服务器了,它并不实际处理dns请求,只是监听dns查询请求,然后转发给上游的dns服务器,并获取查询结果,再返还给原始的客户端。

how it work
  • 监听dns查询请求
  • 将请求转发到上游dns服务器
  • 获取dns查询结果,并与gfwlist中的域名规则匹配
  • 如果命中,则使用routeros系统提供的api,将dns查询结果中的ip插入ros的防火墙
  • 返还dns查询结果给客户端
prepare and run
  • 需要java环境
  • 使用mvn编译打包源码,或者直接从github release页下载。
  • 准备一个配置文件,文件与第二步的文件同级,文件名必须为“jrodns.properties”。
  • 使用指令 “java -jar jrodns-exec.jar” 启动服务器。
  • 自行设置routeros的防火墙
  • 修改客户端dns配置。
config
key 是否必填 默认值 描述
gfwlistPath 1 gfwlist文件的绝对路径或者直接文件名(需要处于同级目录)
rosIp 1 routeros ip
rosUser 1 routeros用户名
rosPwd 1 routeros密码
rosFwadrKey 1 routeros防火墙 地址列表标识
rosIdle 0 30 routeros存活检测
localPort 0 53 本地监听端口
remote 1 上游dns服务器
remotePort 0 53 上游dns服务器端口
maxThread 0 10 工作线程数

建立一个ssr转pptp的服务

本文将会搭建一个支持udp的,ssr转pptp服务 前言 先说一下这个服务存在的意义。一般ss服务的使用方式是在个人终端上安装相应的客户端程序,客户端会结合PAC和...

阅读全文

欢迎留言