班门弄斧分享下几天下来的折腾成果,欢迎提出改进意见:
- routeros 。运行于一台 i5-5010U + 4G 内存 + 双 Intel I210 的小主机。通过导入 CN address-list 、mangle 标记 routing-mark 方式将特定设备的出国流量指向 openclash 。
- openclash 。运行于一台 N1 盒子上。设置为 Redir-Host (兼容)模式,关闭 DNS 劫持,设定 mosdns 为上游 DNS 服务器( 127.0.0.1:5335 )。
- mosdns 。与 openclash 运行在同一台 N1 盒子上。国内 DNS 服务器改为了本地 ISP 的 DNS ,勾选了 防止 DNS 泄漏 选项,其他保持默认。
routeros 只支持设置 53 端口 DNS 服务器,不能直接添加 mosdns 作为上游,借助 nat 规则变通一下:
[admin@MikroTik] /ip/firewall/nat> print
Flags: X - disabled, I - invalid; D - dynamic
0 chain=srcnat action=masquerade src-address-list=lan out-interface=pppoe-out1 log=no log-prefix=""
1 chain=srcnat action=masquerade src-address-list=wireguard out-interface=pppoe-out1 log=no log-prefix=""
2 chain=dstnat action=dst-nat to-addresses=10.89.2.230 to-ports=5335 protocol=udp src-address=!10.89.2.230 dst-port=53 log=yes log-prefix="mosdns-query:"
3 chain=dstnat action=dst-nat to-addresses=10.89.2.230 to-ports=5335 protocol=tcp src-address=!10.89.2.230 dst-port=53 log=yes log-prefix="mosdns-query:"
4 chain=srcnat action=masquerade protocol=udp src-address=10.89.2.0/24 dst-address=10.89.2.230 dst-port=5335 log=no log-prefix="mosdns-reply:"
5 chain=srcnat action=masquerade protocol=tcp src-address=10.89.2.0/24 dst-address=10.89.2.230 dst-port=5335 log=no log-prefix="mosdns-reply:"
6 chain=srcnat action=masquerade protocol=udp src-address=192.168.20.0/24 dst-address=10.89.2.230 dst-port=5335 log=yes log-prefix="mosdns-reply:"
7 chain=srcnat action=masquerade protocol=tcp src-address=192.168.20.0/24 dst-address=10.89.2.230 dst-port=5335 log=yes log-prefix="mosdns-reply:"
上述规则将来自 lan ( 10.89.2.0/24 ) 和 wireguard ( 192.168.20.0/24 )的 DNS 查询全部劫持到了 10.89.2.230:5335 ,即 mosdns 实际地址和监听端口,参考自 Redirect outgoing DNS requets to internal DNS server 。
目前已按照该思路配置完成,运行起来倒是没问题,不过在性能和安全方面有无明显缺陷和提升空间?恳请 v 友指点一二~