软路由系统Routeros上通过脚本查询DNS Cache解析缓存方式,实现访问的域名从设备的不同出口访问,实现流量负载功能。

在 MikroTik 上,可以通过 DNS 匹配访问的域名的前缀并实现分流,常用于策略路由或流量控制场景。例如,将访问特定域名的流量路由到指定的网关或接口。以下是实现方法的详细步骤:


一、实现思路

MikroTik 无法直接匹配域名前缀,但可以通过以下方法间接实现:

  1. DNS 解析:启用 DNS 缓存,并捕获目标域名的解析结果。
  2. 动态地址列表:根据解析的域名 IP 动态添加到 address-list 中。
  3. 路由规则:针对 address-list 的 IP,设置策略路由实现分流。

二、具体实现步骤

1. 启用 DNS 缓存

确保 MikroTik 的 DNS 服务器处于启用状态,并解析域名。

  • 命令

     /ip dns set allow-remote-requests=yes  
  • 检查 DNS 状态

     /ip dns print  
  • 验证解析功能

     /ip dns cache print  

2. 匹配域名前缀并添加到地址列表

使用 regex(正则表达式)匹配域名前缀,结合脚本动态更新 address-list

  • 示例:匹配域名前缀 example 的 IP 地址: 创建一个脚本定期查询域名,并将结果加入 address-list

  • 脚本代码

    :local domainPrefix "example"
    :local addressList "example-list"
    :local dnsEntries [/ip dns cache all find where name~"$domainPrefix"]
    
    # 清除旧的 address-list
    /ip firewall address-list remove [find list=$addressList]
    
    :foreach entry in=$dnsEntries do={
        :local ip [/ip dns cache get $entry address]
        /ip firewall address-list add list=$addressList address=$ip comment="Added by script for $domainPrefix"
    }

     

  • 添加到调度器: 定期运行脚本更新 address-list

     /system scheduler add name="update-example-list" interval=5m on-event="your_script_name"  

3. 配置路由规则

根据动态生成的 address-list 实现流量分流。

  • 策略路由示例: 将访问 example 前缀的流量分流到指定网关:

     /ip route add gateway=192.168.1.1 routing-mark=to-example /ip firewall mangle add chain=prerouting dst-address-list=example-list action=mark-routing new-routing-mark=to-example 
  • 配置默认路由: 未匹配的流量通过默认网关:

     /ip route add gateway=192.168.0.1 

三、验证配置

1. 验证 address-list

检查动态生成的地址列表:

 /ip firewall address-list print where list=example-list  

2. 验证路由

检查特定流量是否通过期望的网关:

 /tool torch interface=<interface> protocol=ip  

3. 测试访问

尝试访问匹配的域名(如 example.com),并观察是否通过指定路由。


四、扩展功能

1. 支持多个域名前缀

脚本中可以通过 or 增加多个前缀匹配:

 :local dnsEntries [/ip dns cache all find where name~"example" or name~"test"] 

2. 指定接口的流量分流

如果需要针对特定接口分流,增加接口条件:

 /ip firewall mangle add chain=prerouting in-interface=<interface> dst-address-list=example-list action=mark-routing new-routing-mark=to-example 

3. 限速管理

通过 queue 配置针对匹配域名的流量限速:

 /queue simple add name="example-limit" target=192.168.1.0/24 max-limit=10M/10M dst-address-list=example-list  

通过以上方法,您可以实现基于域名前缀的分流功能,适用于流量优化、特定服务的流量引导等场景。

posted @ 2024-12-18 16:15  Hope·  阅读(36)  评论(0编辑  收藏  举报
分享到:
target: function(trigger) { var pre = trigger.parentElement; var code = pre.querySelector('code'); return code ? code.innerText.trim() : pre.innerText.trim(); }