分享一则 routeros + openclash + mosdns 的配置思路

225 天前
 xiaofami

班门弄斧分享下几天下来的折腾成果,欢迎提出改进意见:

  1. routeros 。运行于一台 i5-5010U + 4G 内存 + 双 Intel I210 的小主机。通过导入 CN address-list 、mangle 标记 routing-mark 方式将特定设备的出国流量指向 openclash 。
  2. openclash 。运行于一台 N1 盒子上。设置为 Redir-Host (兼容)模式,关闭 DNS 劫持,设定 mosdns 为上游 DNS 服务器( 127.0.0.1:5335 )。
  3. 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 友指点一二~

2455 次点击
所在节点    宽带症候群
12 条回复
hefish
225 天前
真复杂,我就本机挂 clashverge ,感觉速度还挺快的。
Naples
225 天前
N1 上部署 bird2 ,对 routeros 通过 bgp 或 ospf 宣告 CN 或者非 CN list 路由,这样就无需进行 mangle 、routing-mark 等操作了
xiaofami
225 天前
@Naples 按照指点找到一篇教程: [使用 RouterOS ,OSPF 和树莓派为国内外 IP 智能分流]( https://idndx.com/use-routeros-ospf-and-raspberry-pi-to-create-split-routing-for-different-ip-ranges/) ,准备试一试
laincat
225 天前
挺好的分享,可以参考
swordsmile
224 天前
@hefish clash verge 停止更新了吧
keyfunc
224 天前
我目前用这个方案,mangle fakeip 的网段到 clash 所在主机,clash 开 tun 。
mosdns 设置黑名单域名转发的 clash 的 dns 获取 fakeip ,也挺好用的。
bigfei
224 天前
routeros 自带 docker ,以上可以全部运行在一台 ros 上,省资源,降本增效
BanShe
224 天前
记录一下
hefish
224 天前
@swordsmile 也还能用的,没说不让用啊。
Richared
224 天前
直接 clash fakeip 。mosdns proxy 指定到 clash 的 dns 返回 fakeip 地址,routeros 只转发 fakeip 网段就行了
littlewing
224 天前
多谢,我一直想做到在 openclash 挂了之后,国内流量仍然正常的方案,这个看来可行
likeflower
40 天前
@Naples 请教下,用 bgp 这种方式,由于 CN 路由是白名单,走默认出口,下一跳怎样设置?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1040771

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX