# MikroTik Address List 插件 这个插件用于将 DNS 解析得到的 IP 地址自动添加到 MikroTik 路由器的 address list 中。 ## 功能特性 - 支持 IPv4 和 IPv6 地址 - 自动创建网络前缀(CIDR 格式) - 支持地址超时设置 - 支持添加注释 - 避免重复添加相同地址 - 支持 TLS 连接 - 可配置连接超时 ## 依赖 需要添加以下依赖到 `go.mod`: ```go 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`: 是否使用 TLS(true/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 配置格式 ```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 配置中使用 ```yaml 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 的调试日志来查看插件的执行情况: ```yaml log: level: debug ``` ## 测试 运行测试(需要设置环境变量): ```bash # 运行基本测试 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 ```