简单将 Openwrt 主路由国外流量转发至“旁路由”的插件

347 天前
 zliu0562

先自我吐槽:知道旁路由这种用词不对,我平时也不这样说。 我的个人场合:主路由是 MT7621/7981 这种刷了 mtk sdk 驱动的 openwrt 固件,网络和 nat 性能很强,但因为双核 cpu 和 256 ram 的原因,跑 fq 透明代理压力大。手上还有个空闲的 n1 盒子,这个跑服务性能不错但网络性能太差劲。而且国内流量经过的话多一个设备风险也不小。

基于 lean 之前做的 mwan3 helper 改写了下插件,可以将国外流量和相应的 dns 请求转发至“旁路由”n1 (其实转发到 mac 开 tun 模式也行) 国内流量和 dns 请求还是保持直连,完全不经过“旁路由”

使用前新建一个接口协议静态 ip ,设备为 br-lan ,ip 地址随便设置个没用过的,网关 ip 设置为“旁路由”ip 。防火墙设置 到 lan 里面。然后原有的 lan 接口和新建接口都要设置网关跃点,新建的接口要设置高跃点。

相应源码和两个现成的 ipk 在仓库里,装之前记得卸载系统自带的 luci-app-mwan3helper(如果系统自带) https://github.com/padavanonly/luci-app-mwan3helper-chinaroute

4529 次点击
所在节点    OpenWrt
26 条回复
tuzhis
347 天前
开新坑了支持支持!我也是同类方案用了很久最稳定和适合,不过还是全脚本阶段。按照体验来说后续还需要添加 自动检测和断网回滚,多规则分流(海外/异地不同内网)
qwvy2g
347 天前
不喜欢改动主路由配置的方式实现旁路由,但是看了一圈教程,也没人讲清楚是怎么搞的,oc 倒是可以用自动处理经过本机其他设备流量,可是 oc 本身规则不灵活改起来很费劲。mwan3 也尝试过,但是最后因 fw3 和 fw4 包的冲突放弃了。
zliu0562
347 天前
@qwvy2g 并没有用到 mwan3 。这个只是个策略路由而已,那个标题的意思是 ipset 也可以给 mwan3 用。
不动主路由的话,流量就会全到“旁路由”,那“旁路由” 出问题直接国内都断了而且还有性能问题。
freechuzhuo
347 天前
目前用了 clash 套娃,用白名单模式给指定设备。试试看楼主的方法

port: 7890
socks-port: 7891
allow-lan: true
mode: rule
log-level: info
external-controller: :9090

proxies:
- {name: socks5-pve12, server: 10.0.0.20, port: 7893, type: socks5}

proxy-groups:
- name: 🚀 选择节点
type: select
proxies:
- socks5-pve12

rules:
- MATCH,🚀 选择节点
zliu0562
347 天前
@freechuzhuo 用新的 apk ,不用创建接口了
850521109
347 天前
因为要跟其他人一起用,我都是自己的设备手动设置网关和 DNS 指向旁路由
laincat
347 天前
这名字是不是让人以为依赖。。。mwan3 啥的?
laincat
347 天前
@freechuzhuo 之前我也是这样套娃玩过,不过用的 ssr 啥的套。
zliu0562
347 天前
@laincat 不依赖,为了表示对原作者的尊重所以没改名字。
zliu0562
347 天前
@zliu0562 这个就一行脚本的事,但我懒得加了
ryd994
347 天前
@zliu0562 #3 旁路由坏了就切回主路由啊
zliu0562
347 天前
@ryd994 切需要时间,而且这样还有性能损失。那我干嘛还要把国内流量送过去?
yyysuo
347 天前
这不就复杂了么,你看一下 neroxps 大佬的方案,或者搜索一下 paopao gateway 的方案,这两个方案思路是一样的 。我遵循这种思路,在主跌幅上装 mosdns ,国内直接用公共 dns 返回 real ip 直连性能无损失,国外转发给旁路的 clash 返回 fakeip ,主路由根据 fake ip 段添加静态路由,再添加电报 ip 和奈飞 ip 的静态路由,就完了,相当稳定 。


https://fast.v2ex.com/t/947864
zliu0562
347 天前
@yyysuo 你说的跟我不是一个东西吗?国内 ip 直连,国外 ip 静态路由转发到“旁路由”去,我就是改了个 ipk 一键开启这个啊
zliu0562
347 天前
@yyysuo 你这个要装 mosdns 手动配置国内外的 dns 策略,我这个装个 ipk 填下“旁路由”的 ip 就行。究竟谁操作复杂?
mohumohu
346 天前
@zliu0562 还是不一样的,各有优点,DNS 分流可以很方便地自定义分流和不分流的域名,并且下载 bt 连国外 IP 也不走旁路由,主路由能设置静态路由就可以,不用刷机。
zliu0562
346 天前
@mohumohu 我这个有 gfwlist 模式,一样可以不用走国外。想自定义域名的话,去修改那个 gfwlist 文件夹就行。
mohumohu
346 天前
粗略的分流的话依赖 gfwlist 是可以的,但如果想实现比较精确的需求就没那么方便了,比如想实现([所有境外域名默认走代理]+[BT 直连]-[部分境外域名不走代理]),这个依赖单一 gfwlist 就不好实现,甚至在”部分境外域名不走代理“的需求中,还可以细化自定义一下走国内解析结果还是国外解析结果、或者替换优化解析结果(比如 CF 优选);
DNS 分流的确需要更复杂的 DNS 策略,不过网上也很多一键脚本或者 docker 。主要是 DNS 并不需要搭建在主路由上,完全可以分离开,而主路由只需要添加数条甚至一条静态路由即可,对主路由来说改动比较少,更少的路由表或许性能消耗更少。相对主路由来说,拓扑和逻辑上是比较简单清晰一些,主路由也不一定需要是能刷机的,只要有基本的 DHCP 设置和静态路由设置功能即可。这样的拓扑另一个好处就是控制哪些客户端走代理的话只需要分配不同的 DNS 即可,这个可以通过 DHCP 或者 mosdns 的策略来实现。
当然,13 楼的简单是相对于主路由的修改和网络拓扑逻辑来说的,适合有动手能力折腾的人。如果一个插件就能满足大部分需求,点点点的操作也确实比较简单。
zliu0562
346 天前
@mohumohu dns 服务器如果不在主路由上的话,那倒可以随便折腾 dns 策略。但我个人无法忍受主路由以外的设备出问题导致国内断网。
mohumohu
346 天前
@zliu0562 这个很好解决的,比如我现在用的 velop 路由器他就是可以填多个 DNS 服务器,然后他自己就是个 DNS 代理,平时没故障的话,他一般都是用内网的结果。当内网的 DNS 挂了,他就会用其他的 DNS 结果了。其他路由器应该也有类似的功能,或者主路由是 openwrt 的话来实现这个也简单,用 mosdns 或者 smartdns 就可以了,甚至 dnsmasq 也可以,dnsmasq 有个按顺序查询的选项来着。

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

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

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

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

© 2021 V2EX