ChosoMeister/Mikrotik-IRAN-IP-List
GitHub: ChosoMeister/Mikrotik-IRAN-IP-List
自动更新 MikroTik RouterOS 伊朗 IP 列表
Stars: 2 | Forks: 0
# MikroTik 伊朗 IP 列表
基于 RIPE 国家资源数据(`IR`)自动生成的 MikroTik RouterOS IPv4 和 IPv6 地址列表。
`list.rsc` 重建 `IRAN-IP-Address` 防火墙地址列表,可直接导入 RouterOS。
## 仓库内容
- [`list.rsc`](./list.rsc): 包含伊朗 IPv4 和 IPv6 前缀的生成 RouterOS 脚本
- [`get.sh`](./get.sh): 下载 RIPE 数据并生成 `list.rsc` 的 Bash 生成器
- [.github/workflows/](./.github/workflows): 仓库自动化以刷新生成的数据
- [`README.md`](./README.md): 项目文档
## 功能
- 包含 IPv4 和 IPv6 前缀
- 可直接在 MikroTik 上执行 `/import`
- 每次更新时清除并重建相同的地址列表
- 使用 `:do { add ... } on-error={}` 进行容错导入
- 基于 RIPE Stat 国家资源数据 `IR` 构建
- 当前生成器还向 IPv4 列表添加 `10.0.0.0/8`
## 数据源
源数据来自 RIPE Stat `country-resource-list` 端点,针对伊朗:
`https://stat.ripe.net/data/country-resource-list/data.json?resource=IR&v4_format=prefix`
仓库将这些前缀转换为 RouterOS 命令,用于:
- `/ip firewall address-list`
- `/ipv6 firewall address-list`
## 工作原理
1. `get.sh` 使用 `curl` 下载 RIPE JSON 负载
2. 它验证 HTTP 响应并检查 IPv4 列表不为空
3. 它写入命令以删除当前的 `IRAN-IP-Address` 条目
4. 它追加所有 IPv4 前缀并显式添加 `10.0.0.0/8`
5. 它使用相同的列表名称写入 IPv6 前缀的第二部分
6. 生成的输出保存为 `list.rsc`
## 用例
- 伊朗目的地的策略路由
- NAT 绕过或无 NAT 匹配
- 按源或目的地址范围进行防火墙过滤
- 流量标记和路由决策
- 排队或分类规则
## 快速开始
### 直接从 GitHub 在 MikroTik 上获取
```
:local fileName "IRAN-IP-Address.rsc"
:local url "https://raw.githubusercontent.com/ChosoMeister/Mikrotik-IRAN-IP-List/master/list.rsc"
/tool fetch url=$url dst-path=$fileName
/import file-name=$fileName
/file remove $fileName
```
### 使用原始最小模式
```
:foreach i in={"IRAN-IP-Address"} do={
/tool fetch url="https://raw.githubusercontent.com/ChosoMeister/Mikrotik-IRAN-IP-List/master/list.rsc" dst-path=$i
/import file-name=$i
/file remove $i
}
```
### 手动上传和导入
1. 下载 [`list.rsc`](./list.rsc)
2. 使用 Winbox、WebFig 或 SCP 将其上传到路由器
3. 执行:
```
/import file-name=list.rsc
```
## 推荐的定期更新
对于生产使用,只有在下载成功且文件不为空时才导入更安全。
```
:local fileName "IRAN-IP-Address.rsc"
:local url "https://raw.githubusercontent.com/ChosoMeister/Mikrotik-IRAN-IP-List/master/list.rsc"
/tool fetch url=$url dst-path=$fileName
:delay 5
:if ([/file find name=$fileName] != "") do={
:if ([/file get $fileName size] > 0) do={
/import file-name=$fileName
/file remove $fileName
} else={
:log warning "Iran IP list download was empty; keeping current address list"
/file remove $fileName
}
} else={
:log warning "Iran IP list download failed; keeping current address list"
}
```
您可以将此逻辑放入 RouterOS 脚本中,并使用 `/system scheduler` 每天运行。
## 导入后的示例用法
```
/ip firewall filter add chain=forward dst-address-list=IRAN-IP-Address action=accept comment="Example: match Iran IPv4 destinations"
/ipv6 firewall filter add chain=forward dst-address-list=IRAN-IP-Address action=accept comment="Example: match Iran IPv6 destinations"
```
根据您的策略调整操作和链。
## 本地生成 `list.rsc`
### 要求
- `bash`
- `curl`
- `jq`
### 运行
```
chmod +x get.sh
./get.sh > list.rsc
```
如果您维护此仓库,请首先更新 `get.sh`,然后重新生成 `list.rsc`。
## 重要说明
- `list.rsc` 在重新填充之前会删除 `IRAN-IP-Address` 中的现有条目
- 生成的文件包含一个 IPv6 部分
- 没有 IPv6 支持的路由器在导入之前可能需要删除 IPv6 块
- 国家分配的前缀与保证的流量地理位置不同
- IP 分配会随时间变化,因此定期刷新很重要
- 当前生成器故意包含 `10.0.0.0/8`;根据您的路由策略保留或删除该行为
## 故障排除
- `tool fetch` 失败:
检查 DNS、路由器时钟、CA 证书和 `raw.githubusercontent.com` 的访问权限
- 导入在 IPv6 部分停止:
启用 IPv6 支持或删除 `list.rsc` 中的 IPv6 部分
- 本地生成失败:
安装 `jq` 并验证 RIPE 端点可访问
- 每次更新后地址列表都会被替换:
这是预期的;脚本从头开始重建列表
## 贡献
欢迎贡献。
有用的改进包括:
- 更安全的更新工作流程
- RouterOS 兼容性修复
- 自动化改进
- 文档清理
- `get.sh` 中的验证改进
如果您更改生成逻辑,请从 `get.sh` 重新生成 `list.rsc` 而不是手动编辑生成的文件。
标签:IPv4, IPv6, IP地址列表, MikroTik, NAT, PowerShell, RIPE, 分类规则, 地址列表管理, 工作流, 政策路由, 数字取证, 数据源转换, 流量标记, 网络过滤, 自动化脚本, 路由决策, 路由器, 队列管理, 防火墙