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

161 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`: 是否使用 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 配置格式
```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
```