5.2 KiB
5.2 KiB
MosDNS + MikroTik Amazon 域名处理部署指南
功能说明
这个配置会在解析 Amazon 相关域名时,自动将解析到的 IP 地址添加到 MikroTik 路由器的 address list 中,用于防火墙规则控制。
部署步骤
1. 上传文件到 Debian 12 服务器
# 上传编译好的 mosdns 可执行文件
scp mosdns-linux-amd64 user@your-server:/usr/local/bin/mosdns
# 上传配置文件
scp config.yaml user@your-server:/usr/local/mosdns/
scp dns.yaml user@your-server:/usr/local/mosdns/
# 设置执行权限
ssh user@your-server "chmod +x /usr/local/bin/mosdns"
2. 创建必要的目录和文件
# 创建配置目录
sudo mkdir -p /usr/local/mosdns/config
# 下载 Amazon 域名列表
sudo wget -O /usr/local/mosdns/config/geosite_amazon.txt https://raw.githubusercontent.com/v2fly/domain-list-community/master/data/amazon
sudo wget -O /usr/local/mosdns/config/geosite_amazon-ads.txt https://raw.githubusercontent.com/v2fly/domain-list-community/master/data/amazon-ads
sudo wget -O /usr/local/mosdns/config/geosite_amazontrust.txt https://raw.githubusercontent.com/v2fly/domain-list-community/master/data/amazontrust
sudo wget -O /usr/local/mosdns/config/amazon.txt https://raw.githubusercontent.com/v2fly/domain-list-community/master/data/amazon
# 下载其他必要的域名和 IP 文件
sudo wget -O /usr/local/mosdns/config/geosite_tiktok.txt https://raw.githubusercontent.com/v2fly/domain-list-community/master/data/tiktok
sudo wget -O /usr/local/mosdns/config/gfwlist.out.txt https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt
sudo wget -O /usr/local/mosdns/config/domains.txt https://raw.githubusercontent.com/v2fly/domain-list-community/master/data/category-games
sudo wget -O /usr/local/mosdns/config/cn.txt https://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/geoip.dat
3. 在 MikroTik 中创建 address list
# 通过 SSH 连接到 MikroTik 路由器
ssh admin@192.168.1.1
# 创建 IPv4 和 IPv6 address list
/ip firewall address-list add list=amazon_ips
/ip firewall address-list add list=amazon_ips6
# 创建防火墙规则(可选)
/ip firewall filter add chain=forward src-address-list=amazon_ips action=drop comment="Block Amazon IPs"
/ip firewall filter add chain=forward src-address-list=amazon_ips6 action=drop comment="Block Amazon IPv6 IPs"
4. 修改配置文件中的 MikroTik 连接信息
编辑 /usr/local/mosdns/dns.yaml 文件,修改 mikrotik_amazon 插件的配置:
# 修改为你的 MikroTik 实际信息
args: "192.168.1.1:8728:admin:your-password:false:10:amazon_ips:amazon_ips6:24:32:amazon_domain:86400"
参数说明:
192.168.1.1: MikroTik 路由器 IP8728: API 端口admin: 用户名your-password: 密码false: 不使用 TLS10: 连接超时时间amazon_ips: IPv4 address list 名称amazon_ips6: IPv6 address list 名称24: IPv4 掩码32: IPv6 掩码amazon_domain: 注释86400: 地址超时时间(24小时)
5. 创建 systemd 服务
sudo tee /etc/systemd/system/mosdns.service > /dev/null <<EOF
[Unit]
Description=MosDNS DNS Server
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/mosdns -c /usr/local/mosdns/config.yaml
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 启用并启动服务
sudo systemctl enable mosdns
sudo systemctl start mosdns
# 检查服务状态
sudo systemctl status mosdns
6. 配置 DNS 转发
修改 /etc/systemd/resolved.conf:
[Resolve]
DNS=127.0.0.1
#FallbackDNS=8.8.8.8 8.8.4.4
#Domains=
#DNSSEC=no
#DNSOverTLS=no
#MulticastDNS=yes
#LLMNR=yes
#Cache=yes
#DNSStubListener=no
重启 systemd-resolved:
sudo systemctl restart systemd-resolved
7. 测试配置
# 测试 Amazon 域名解析
nslookup amazon.com 127.0.0.1
nslookup aws.amazon.com 127.0.0.1
# 检查 MikroTik address list 是否更新
ssh admin@192.168.1.1 "/ip firewall address-list print where list=amazon_ips"
# 查看 mosdns 日志
sudo journalctl -u mosdns -f
配置说明
工作流程
- 域名匹配:当查询 Amazon 相关域名时,匹配
amazon_domains集合 - DNS 解析:使用国外 DNS 服务器解析域名
- IP 提取:从 DNS 响应中提取 A 和 AAAA 记录
- 地址添加:通过 MikroTik API 将 IP 添加到 address list
- 超时管理:IP 地址会在 24 小时后自动过期
监控和调试
# 查看实时日志
sudo journalctl -u mosdns -f
# 查看服务状态
sudo systemctl status mosdns
# 测试 MikroTik 连接
curl -k https://192.168.1.1:8729/api/rest/ip/firewall/address-list
故障排除
- 连接失败:检查 MikroTik IP、端口和认证信息
- 权限不足:确保 MikroTik 用户具有管理 address list 的权限
- 域名文件缺失:确保所有域名列表文件都已下载
- DNS 解析失败:检查上游 DNS 服务器配置
安全注意事项
- 不要在配置文件中使用明文密码,考虑使用环境变量
- 限制对 MikroTik API 端口的访问
- 定期更新域名列表文件
- 监控 address list 大小,避免过多条目影响性能