FatNik329/MikroTik-ARMA
GitHub: FatNik329/MikroTik-ARMA
一个面向 MikroTik 路由器的 Python 自动化流水线系统,通过智能采集和丰富网络对象数据,实现 Address List 和路由列表的集中生成与部署。
Stars: 0 | Forks: 0
# MikroTik-ARMA
[](https://github.com/FatNik329/MikroTik-ARMA/blob/master/LICENSE)
[](https://github.com/FatNik329/MikroTik-ARMA/releases)
[](https://github.com/FatNik329/MikroTik-ARMA/wiki)
[](https://www.python.org/downloads)
[](https://help.mikrotik.com/docs/display/ROS/RouterOS)
[](https://github.com/jedisct1/dnscrypt-proxy)
[](https://pypi.org/project/RouterOS-api)
[](https://stat.ripe.net)
[](https://bgp.tools)
[](https://www.iplocate.io)
[](https://ipinfo.io)
[](https://www.iana.org)
[](https://github.com/Exa-Networks/exabgp)


## 描述
**Automated Router Mikrotik AddressList (ARMA)** 是一个基于 **Python** 的流水线系统,用于智能管理基于 **MikroTik (RouterOS 6)** 网络中的 ACL。系统自动从 DNS、BGP 注册表和网络连接中收集数据,对其进行分析、过滤和丰富,然后生成配置(Address Lists)并将其部署到目标设备上。系统围绕一个协调各独立模块执行的中央调度器构建。
## 概念与理念
**MikroTik-ARMA** 是一个网络对象的映射器和协调器。它的核心原则是将非结构化数据(DNS 查询、IP、ASN)转化为用于网络管理的、最新且可应用的“地图”。
通常,维护用于流量过滤和优先级排序的最新列表需要:
- 手动从各种来源收集 IP 和域名;
- 将更新分发到网络设备;
- 持续监控数据的时效性。
### 系统在实际中的价值
- **独立于第三方列表**:您可以自行定义标准(域名模式、ASN),系统将根据实际网络活动筛选出符合条件的域名和 IP 地址。
- **透明与控制**:您始终可以看到特定规则是基于哪些数据构建的(YAML/JSON 报告),并可以进行验证或调整。
- **单一事实来源**:所有用于过滤和优先级排序的数据都通过集中配置进行管理,而不是分散在各个独立的设备上。
- **端到端自动化**:
- 基于网络活动收集数据;
- 使用 ASN 数据进行丰富;
- 生成配置;
- 与设备同步。
### 局限与现实
该系统 **无法提供 100% 的准确性保证**,因为其结果取决于外部来源和因素:
- 用于解析域名的 DNS 服务器;
- 用于确定地理位置和 IP 归属 AS 的 MMDB 数据库;
- 原始域名列表(模式)和 ASN 的质量与时效性;
- 基础设施的个体差异(拓扑结构、所采用的管理实践)。
### 总结
正因如此,**MikroTik-ARMA** 应被视为一个协调器,而非绝对的仲裁者。
它根据指定的标准提供 **尽可能好的数据**,承担了收集、分析和同步网络数据的繁重工作,但将网络策略的最终控制权和决策权留给管理员。
该项目最初是一个“自用”工具,但后来发展成一个完整的系统,因为它所解决的问题具有普遍性。
## 外部依赖
完整的系统要求和依赖项列表详见 [Wiki - 安装与要求](https://github.com/FatNik329/MikroTik-ARMA/wiki/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B8-%D1%82%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)。
## 核心功能
项目正在逐步发展中。目前其功能包括:
### 主要功能
1. **DNS 查询分析**
* 支持通配符模式(**\*.example.com**)、IDN 域名(**пример.рф**、**.бел**)、根区域(**.com**、**.net**);
* 缓存未能解析的域名(NXDOMAIN、超时);
* DNS 查询的并行处理;
* 以结构化格式(**YAML**)保存原始数据。
2. **自动收集 BGP 前缀**
* 从公共注册表获取指定 **AS (Autonomous Systems)** 的 IPv4/IPv6 前缀:**[RIPE Stat](https://stat.ripe.net/)**、**[BGP.tools](https://bgp.tools/)**;
* 缓存本地数据以减少对外部 API 服务的请求负载;
* 以结构化格式(**JSON**)保存原始数据。
3. **生成 MikroTik 配置**
* 将“原始”数据转换为可直接导入的 **RSC** 脚本;
* 支持分别生成 RSC —— 用于域名、域名 IP 和 ASN。
4. **同步 Address Lists**
* 工作模式:仅域名、仅 IP、仅 ASN 或组合模式;
* 自动更新设备上的列表;
* 支持 IPv4/IPv6;
* 处理自定义列表(手动编制或通过系统的附加功能编制)
5. **集中管理**
* 通过通用脚本进行调度(运行整个或部分项目,在成功/失败运行时发送 **Telegram**、**Email** 通知);
* 日志轮换,备份,通过 **YAML** 和 **JSON5** 进行配置;
### 附加功能
1. **分析活动网络连接**
* 允许直接从 MikroTik 设备的活动连接表中提取 IP 地址。
* 基础过滤 通过源地址和目标地址以及 connection-mark 进行过滤。
* 与系统数据集成 - 能够根据获取的 ARMA 系统 YAML/JSON 数据过滤提取的 IP 地址(例如,排除已知地址,以及判断地址是否属于特定 AS)。
2. **IP 地址分析与丰富**
* 合并来自多个 ARMA 源(TXT、JSON、YAML)的 IP 地址。
* 排除已存在于系统 DNS 记录中的地址。
* 使用以下服务的 MMDB 数据库将其余 IP 与自治系统 (ASN) 及其前缀进行匹配:
* [IPLocate](https://www.iplocate.io)
* [IPinfo](https://ipinfo.io)
3. **顶级域名解析器**
* 从官方注册表 [IANA](https://www.iana.org/domains/root/db) 自动收集并维护完整的 TLD 列表。
* 将原始数据转换为结构化格式供系统其他模块使用。
4. **DNS 数据的过滤与增量更新**
* 过滤并转换来自 DNS 分析器的 YAML 数据。
* 支持在系统运行期间累积和更新结果而不丢失数据。
5. **MikroTik 自动备份**
* 通过 SSH 连接到设备列表并执行导出配置命令。
* 将备份(RSC 文件)仅保存在本地管理服务器上,而不占用路由器的文件存储。
* 集成到系统的整体工作循环中以进行定期备份。
6. **动态 BGP 路由管理**
* 与 [ExaBGP](https://github.com/Exa-Networks/exabgp) 集成 - 根据源数据(TXT 文件)的更改动态发布和撤销路由;
* 与 **MikroTik-ARMA** 数据流水线集成 - 由其他系统模块生成,提供从数据分析到路由修改的端到端自动化;
* 灵活配置 - 支持基本 BGP 属性(communities、AS-path、local-preference)以进行精细的策略控制;
* 可靠性 - 优雅停机,状态缓存,用于监控的健康检查 HTTP 服务器。
7. **灵活的 DNS 日志收集(实验性)**
- 用于从命名管道连续收集 DNS 查询的守护进程模块;
- 支持适用于各种日志格式的插件(dnscrypt-proxy、dnsmasq);
- 保存为 JSONL,自动轮换,清理过期数据。
8. **开放的模块化架构**
* 系统围绕一个调度器脚本构建,允许通过通用配置文件集成自定义的 Python 脚本;
* 您可以扩展其功能。例如,添加其他外部来源或额外的过滤模块,以便为更具体的任务创建自定义列表。
* 项目在 **GPLv3** 许可证下发布,鼓励修改和共同发展。
## 应用场景
该系统不会直接影响流量或直接配置过滤规则(***Firewall Filter/Mangle/RAW*** 等),而是提供 **结构化的最新数据**,这些数据可用于:
### 过滤与安全
* **流量过滤** - 拦截广告、恶意 IP、包含~~不~~良内容的服务器。
* **主动防御** - 自动填充威胁列表(例如,基于动态恶意域名列表或来自危险 AS 的 IP)。
### 流量优化
* **负载均衡与路由** - 对发往特定服务(YouTube、VoIP)或 CDN 的流量进行优先级排序或分离。
* **地理路由** - 根据 IP 地址所属国家(使用 AS 数据)应用路由规则。
### 分析与监控
* **绘制网络活动地图** - 基于真实的 DNS 查询和活动连接自动生成 IP/域名列表。
* **审计与报告** - 持续更新的列表,用于分析网络中正在使用的资源。
* **自动生成** 基于实际网络活动的 IP/域名列表。
### 基础设施管理
* **集中管理列表** - 在一个或多个 MikroTik 设备上同步统一的策略。
* **自动化日常任务** - 免去手动将 IP 地址和域名复制到配置中的工作。
* **备份** - 集成设备配置的自动收集与存储流程。
* **...**
## Wiki
有关项目的更多详情请访问 [Wiki](https://github.com/FatNik329/MikroTik-ARMA/wiki)。
PS. **本项目由一位“非程序员”与 AI 合作创建,但注重实用性和有效性**。如果您认同~~无/有~~脑自动化的理念,并愿意为了达成结果而容忍其特有的处理方式——欢迎加入!🤝
标签:ACL, BGP, DNScrypt-proxy, Docker 部署, IP地址管理, MacOS取证, MikroTik, Python, RouterOS, 地址列表, 威胁情报, 开发者工具, 开源, 无后门, 智能路由, 流量控制, 网管工具, 网络安全, 网络自动化, 网络运维, 访问控制列表, 路由列表, 路由器管理, 逆向工具, 防火墙规则, 隐私保护