mosdns/plugin/executable/mikrotik_addresslist
dengxiongjian cd761e8145
Some checks are pending
Test mosdns / build (push) Waiting to run
新增Mikrotik API 插入解析ip
2025-07-31 11:28:55 +08:00
..
config_example.yaml 新增Mikrotik API 插入解析ip 2025-07-31 11:28:55 +08:00
mikrotik_addresslist_impl.go 新增Mikrotik API 插入解析ip 2025-07-31 11:28:55 +08:00
mikrotik_addresslist.go 新增Mikrotik API 插入解析ip 2025-07-31 11:28:55 +08:00
README.md 新增Mikrotik API 插入解析ip 2025-07-31 11:28:55 +08:00

MikroTik Address List 插件

这个插件用于将 DNS 解析得到的 IP 地址自动添加到 MikroTik 路由器的 address list 中。

功能特性

  • 支持 IPv4 和 IPv6 地址
  • 自动创建网络前缀CIDR 格式)
  • 支持地址超时设置
  • 支持添加注释
  • 避免重复添加相同地址
  • 支持 TLS 连接
  • 可配置连接超时

依赖

需要添加以下依赖到 go.mod

require (
    github.com/go-routeros/routeros/v3 v3.0.0
)

配置方式

1. 快速配置格式

host:port:username:password:use_tls:timeout:address_list4:address_list6:mask4:mask6:comment:timeout_addr

参数说明:

  • host: MikroTik 路由器 IP 地址
  • port: API 端口(默认 8728
  • username: 用户名
  • password: 密码
  • use_tls: 是否使用 TLStrue/false
  • timeout: 连接超时时间(秒)
  • address_list4: IPv4 address list 名称
  • address_list6: IPv6 address list 名称
  • mask4: IPv4 掩码(默认 24
  • mask6: IPv6 掩码(默认 32
  • comment: 地址注释
  • timeout_addr: 地址超时时间0 表示永久)

示例:

192.168.1.1:8728:admin:password:false:10:my_list4:my_list6:24:32:from_dns:3600

2. YAML 配置格式

- exec: mikrotik_addresslist
  args:
    host: "192.168.1.1"
    port: 8728
    username: "admin"
    password: "password"
    use_tls: false
    timeout: 10
    address_list4: "my_list4"
    address_list6: "my_list6"
    mask4: 24
    mask6: 32
    comment: "from_dns"
    timeout_addr: 3600

使用示例

1. 在 mosdns 配置中使用

plugins:
  - tag: sequence
    type: sequence
    args:
      - exec: forward
        args:
          upstream:
            - addr: "8.8.8.8:53"
      - exec: mikrotik_addresslist
        args: "192.168.1.1:8728:admin:password:false:10:blocked_ips:blocked_ips6:24:32:blocked:86400"

servers:
  - exec: sequence
    args:
      - sequence

2. 在 MikroTik 中创建 address list

在 MikroTik 路由器上,需要先创建 address list

/ip firewall address-list add list=blocked_ips
/ip firewall address-list add list=blocked_ips6

3. 在防火墙规则中使用

/ip firewall filter add chain=forward src-address-list=blocked_ips action=drop
/ip firewall filter add chain=forward src-address-list=blocked_ips6 action=drop

工作原理

  1. DNS 查询处理:当 mosdns 收到 DNS 查询并返回响应时,插件被触发
  2. IP 提取:从 DNS 响应的 A 记录IPv4和 AAAA 记录IPv6中提取 IP 地址
  3. 网络前缀创建:根据配置的掩码创建 CIDR 格式的网络前缀
  4. 重复检查:检查地址列表中是否已存在该地址
  5. 地址添加:通过 MikroTik API 将地址添加到指定的 address list 中

安全注意事项

  1. API 访问权限:确保用于连接的 MikroTik 用户具有足够的权限来管理 address list
  2. 网络安全:建议使用 TLS 连接以提高安全性
  3. 密码安全:不要在配置文件中使用明文密码,考虑使用环境变量或加密配置
  4. 网络隔离:限制对 MikroTik API 端口的访问

故障排除

常见错误

  1. 连接失败

    • 检查 MikroTik IP 地址和端口是否正确
    • 确认网络连接正常
    • 检查防火墙设置
  2. 认证失败

    • 验证用户名和密码是否正确
    • 确认用户具有管理 address list 的权限
  3. 权限不足

    • 确保用户具有 /ip/firewall/address-list/ 的读写权限

调试

启用 mosdns 的调试日志来查看插件的执行情况:

log:
  level: debug

测试

运行测试(需要设置环境变量):

# 运行基本测试
export TEST_MIKROTIK=1
go test ./plugin/executable/mikrotik_addresslist/

# 运行 RouterOS v3 API 测试(需要真实的 MikroTik 设备)
export TEST_ROUTEROS_V3=1
go test ./plugin/executable/mikrotik_addresslist/ -v -run TestRouterOSv3API