smartdns icon indicating copy to clipboard operation
smartdns copied to clipboard

请求: 在SmartDNS中实现Hook机制,将解析的特定域名同步到ROS的Address集合中

Open mayongze opened this issue 8 months ago • 36 comments

需求应用场景 我在内网服务器中运行 smartdns 并使用 ROS 作为主路由器,希望将特定域名的解析地址更新到 ROS 的 address 集合中,从而实现路由分流。

建议的方案 目前 smartdns 支持将特定域名的解析记录更新到 ipset。我曾尝试搜索关于 ipset 是否有相关的 update hook 机制,可以在更新时使用脚本将 ipset 内容和 ROS 的 address 集合同步,但并没有找到相关信息。

想知道 smartdns 是否有一个 hook 机制,能够在解析到特定域名时调用自定义代码。

设备信息

  1. 设备信息(CPU,厂家)

  2. 固件信息

mayongze avatar Dec 01 '23 17:12 mayongze

没必要。 ros的address-list可以填域名。只要保证ros的DNS上游是smartdns,就可以实现两侧一致。

PikuZheng avatar Dec 02 '23 00:12 PikuZheng

smartdns 可以与 ROS 同步域名, ROS DNS 不好用,总是卡2 秒。就放弃此方案了。

cresky-github avatar Dec 04 '23 01:12 cresky-github

smartdns 可以与 ROS 同步域名, ROS DNS 不好用,总是卡2 秒。就放弃此方案了。

localhost:~# time dig www.baidu.com @mikrotik
.....
real    0m 0.02s
user    0m 0.00s
sys     0m 0.00s
localhost:~# time dig www.baidu.com @smartdns
.....
real    0m 0.02s
user    0m 0.00s
sys     0m 0.01s

我这正常啊 甚至ros还快了一点点

PikuZheng avatar Dec 04 '23 11:12 PikuZheng

这种需求,直接在 ros 里面用 script 脚本实现就好吧,并不属于 smartdns 的通用需求

CallMeR avatar Dec 04 '23 11:12 CallMeR

这种需求,直接在 ros 里面用 script 脚本实现就好吧,并不属于 smartdns 的通用需求

读取 smartdns 解析日志,然后回写到 ROS DNS。 不在 ROS DNS里的,就用 smartdns 解析。

cresky-github avatar Dec 04 '23 11:12 cresky-github

这种需求,直接在 ros 里面用 script 脚本实现就好吧,并不属于 smartdns 的通用需求

脚本只能(定时或其他方式)触发式更新,不能做到实时

PikuZheng avatar Dec 04 '23 11:12 PikuZheng

没必要。 ros的address-list可以填域名。只要保证ros的DNS上游是smartdns,就可以实现两侧一致。

我想实现的并不是两侧DNS保持一致, 而是想做内外分流, ROS通过路由表将特定的IP路由到指定接口 这个IP列表的来源我想通过smartDNS去拿, 比如一组特定域名的解析ip通过ROS路由到指定接口

mayongze avatar Dec 05 '23 04:12 mayongze

这里ros的address列表是类似于ipset的一种功能, 是一组ip的集合, 可以和ros的firewall配合使用完成标记路由的功能

image

mayongze avatar Dec 05 '23 04:12 mayongze

没必要。 ros的address-list可以填域名。只要保证ros的DNS上游是smartdns,就可以实现两侧一致。

我想实现的并不是两侧DNS保持一致, 而是想做内外分流, ROS通过路由表将特定的IP路由到指定接口 这个IP列表的来源我想通过smartDNS去拿, 比如一组特定域名的解析ip通过ROS路由到指定接口

读 smartdns 解析日志,将判定为需要代理的域名转写 rsc 格式。 ROS 通过 http 方式下载 rsc 文件更新。

添加定时任务。

cresky-github avatar Dec 05 '23 04:12 cresky-github

这里ros的address列表是类似于ipset的一种功能, 是一组ip的集合, 可以和ros的firewall配合使用完成标记路由的功能

image

DNS 那也可以设置 address list。且,不同域名集合指定不同的 address list。

cresky-github avatar Dec 05 '23 04:12 cresky-github

这里ros的address列表是类似于ipset的一种功能, 是一组ip的集合, 可以和ros的firewall配合使用完成标记路由的功能 image

DNS 那也可以设置 address list。且,不同域名集合指定不同的 address list。

抱歉, 一开始没理解你的意思, 我刚去看了官方文档ros 7.x版本增加了dns static设置address list的功能, 我目前在用的6.49.6 没有这个功能 :sob: 只能从读 smartdns 解析日志入手了, 可以给我一些读取解析日志的资料么, 我在文档里没找到相关内容, 我可以写一个程序去实时过滤解析日志然后调ros api去更新

mayongze avatar Dec 05 '23 05:12 mayongze

这里ros的address列表是类似于ipset的一种功能, 是一组ip的集合, 可以和ros的firewall配合使用完成标记路由的功能 image

DNS 那也可以设置 address list。且,不同域名集合指定不同的 address list。

抱歉, 一开始没理解你的意思, 我刚去看了官方文档ros 7.x版本增加了dns static设置address list的功能, 我目前在用的6.49.6 没有这个功能 😭 只能从读 smartdns 解析日志入手了, 可以给我一些读取解析日志的资料么, 我在文档里没找到相关内容, 我可以写一个程序去实时过滤解析日志然后调ros api去更新

smartdns 解析日志不是难点,显示有组名,./log/smartdns.log 内有类似“group: PROXY”字样,根据组名判定域名需要代理。 难点是 ROS api,太难懂了。看了,最后放弃了。用简单的方法是:通过 http 传输 rsc 文件方式。

cresky-github avatar Dec 05 '23 05:12 cresky-github

哎呀! 求求你先试一试在address-list里填域名。另外为啥不用winbox

PikuZheng avatar Dec 05 '23 05:12 PikuZheng

Screenshot_20231205_135926.jpg

PikuZheng avatar Dec 05 '23 05:12 PikuZheng

哎呀! 求求你先试一试在address-list里填域名。另外为啥不用winbox

还没试过address-list里填域名...我去试试 winbox在mac下面太难用了...

mayongze avatar Dec 05 '23 06:12 mayongze

这里ros的address列表是类似于ipset的一种功能, 是一组ip的集合, 可以和ros的firewall配合使用完成标记路由的功能 image

DNS 那也可以设置 address list。且,不同域名集合指定不同的 address list。

抱歉, 一开始没理解你的意思, 我刚去看了官方文档ros 7.x版本增加了dns static设置address list的功能, 我目前在用的6.49.6 没有这个功能 😭 只能从读 smartdns 解析日志入手了, 可以给我一些读取解析日志的资料么, 我在文档里没找到相关内容, 我可以写一个程序去实时过滤解析日志然后调ros api去更新

smartdns 解析日志不是难点,显示有组名,./log/smartdns.log 内有类似“group: PROXY”字样,根据组名判定域名需要代理。 难点是 ROS api,太难懂了。看了,最后放弃了。用简单的方法是:通过 http 传输 rsc 文件方式。

还有方案是不通过api, 直接scp文件到远端,然后ssh执行命令加载, 或者直接ssh执行命令

mayongze avatar Dec 05 '23 06:12 mayongze

哎呀! 求求你先试一试在address-list里填域名。另外为啥不用winbox

这种方式不能支持匹配所有子域名...只能写特定域名

mayongze avatar Dec 05 '23 06:12 mayongze

哎呀! 求求你先试一试在address-list里填域名。另外为啥不用winbox

这种方式不能支持匹配所有子域名...只能写特定域名

只有 DNS 那才支持 子域名

cresky-github avatar Dec 05 '23 06:12 cresky-github

这里ros的address列表是类似于ipset的一种功能, 是一组ip的集合, 可以和ros的firewall配合使用完成标记路由的功能 image

DNS 那也可以设置 address list。且,不同域名集合指定不同的 address list。

抱歉, 一开始没理解你的意思, 我刚去看了官方文档ros 7.x版本增加了dns static设置address list的功能, 我目前在用的6.49.6 没有这个功能 😭 只能从读 smartdns 解析日志入手了, 可以给我一些读取解析日志的资料么, 我在文档里没找到相关内容, 我可以写一个程序去实时过滤解析日志然后调ros api去更新

smartdns 解析日志不是难点,显示有组名,./log/smartdns.log 内有类似“group: PROXY”字样,根据组名判定域名需要代理。 难点是 ROS api,太难懂了。看了,最后放弃了。用简单的方法是:通过 http 传输 rsc 文件方式。

还有方案是不通过api, 直接scp文件到远端,然后ssh执行命令加载, 或者直接ssh执行命令

没试过,也懒得试了。 现在,smartdns 是网络默认 DNS。

cresky-github avatar Dec 05 '23 06:12 cresky-github

@cresky-github 我原本需求是为了能访问gpt...奈何hk的网络也访问不了,需要在hk的ros上二次路由到韩国又不想全部的流量都路由到韩国

mayongze avatar Dec 05 '23 07:12 mayongze

@cresky-github 我原本需求是为了能访问gpt...奈何hk的网络也访问不了,需要在hk的ros上二次路由到韩国又不想全部的流量都路由到韩国

只要把 GPT 的全部相关域名写 ROS DNS FWD 就行了,不多的。应该不到10个。 这个 域名集合的 IP 走指定网关,其余该怎么处理就怎么处理。

image

cresky-github avatar Dec 05 '23 07:12 cresky-github

@cresky-github 我6.x不支持这里的address list, 看来升级计划要提上日程了...

mayongze avatar Dec 05 '23 07:12 mayongze

@cresky-github 我6.x不支持这里的address list, 看来升级计划要提上日程了...

我就为此功能升到7的。

结果,有了更好的方法了。也弃用此方法了。

cresky-github avatar Dec 05 '23 07:12 cresky-github

哎呀! 求求你先试一试在address-list里填域名。另外为啥不用winbox

这种方式不能支持匹配所有子域名...只能写特定域名

嗯的确是这样的。。那么用mangle的l7直接route也行吧。。。就是效率差点

PikuZheng avatar Dec 05 '23 08:12 PikuZheng

我是收集了所有需要route的ip(主要是谷歌等,查AS填整个网段)写到address-list,剩下一部分域名是直接填进去的。 晚上回家看一下openai相关域名,我走jp线路一直是好的,hk是被ban

PikuZheng avatar Dec 05 '23 08:12 PikuZheng

我是收集了所有需要route的ip(主要是谷歌等,查AS填整个网段)写到address-list,剩下一部分域名是直接填进去的。 晚上回家看一下openai相关域名,我走jp线路一直是好的,hk是被ban

这样搞,还不如 子域名 来得有效。

cresky-github avatar Dec 05 '23 08:12 cresky-github

http://www.iwik.org/ipcountry/mikrotik/CN 貌似有别人做好的分流规则

CallMeR avatar Dec 05 '23 10:12 CallMeR

http://www.iwik.org/ipcountry/mikrotik/CN 貌似有别人做好的分流规则

这个逻辑,其实还可以做成 World IP分流,更直接。

cresky-github avatar Dec 05 '23 10:12 cresky-github

http://www.iwik.org/ipcountry/mikrotik/CN 貌似有别人做好的分流规则

这个逻辑,其实还可以做成 World IP分流,更直接。

有没有实时更新的world ip源

mayongze avatar Dec 05 '23 10:12 mayongze

http://www.iwik.org/ipcountry/mikrotik/CN 貌似有别人做好的分流规则

这个逻辑,其实还可以做成 World IP分流,更直接。

有没有实时更新的world ip源

https://github.com/dndx/nchnroutes/tree/main

现在, 靠纯域名分流了。

cresky-github avatar Dec 05 '23 11:12 cresky-github