V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OpenWrt 是一个专门面向嵌入式设备的 Linux 发行版。你可以将 OpenWrt 支持的型号的嵌入式设备,比如各种路由器上的系统,换成一个有更多可能性可以折腾的 Linux 系统。
OpenWrt 官方网站
zliu0562
V2EX  ›  OpenWrt

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

  •  3
     
  •   zliu0562 · 346 天前 · 4519 次点击
    这是一个创建于 346 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    pi4WMi6.png

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

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

    第 1 条附言  ·  346 天前

    更新了下,不用设置和创建接口,直接设置插件即可。如果设备在局域网里,ip填转发ip,设备写br-lan

    第 2 条附言  ·  346 天前
    ps:不一定要是路由器,docker 上 clash 开 tun 模式也行
    第 3 条附言  ·  346 天前
    至于黑白名单,本来我觉得这是 clash 上的事。要主路由上只让指定主机流量进“旁路由”的话,防火墙-自定义规则尾部按以下顺序添加规则即可。192.168.6.22/23 替换为自己需要的 ip

    iptables -t mangle -A PREROUTING -i br-lan -j MARK --set-mark 0
    iptables -t mangle -A PREROUTING -s 192.168.6.22 -j MARK --set-mark 200
    iptables -t mangle -A PREROUTING -s 192.168.6.23 -j MARK --set-mark 200
    iptables -t mangle -A PREROUTING -i br-lan -m set --match-set cn dst -j MARK --set-mark 0
    26 条回复    2024-08-06 20:26:49 +08:00
    tuzhis
        1
    tuzhis  
       346 天前 via Android
    开新坑了支持支持!我也是同类方案用了很久最稳定和适合,不过还是全脚本阶段。按照体验来说后续还需要添加 自动检测和断网回滚,多规则分流(海外/异地不同内网)
    qwvy2g
        2
    qwvy2g  
       346 天前 via Android
    不喜欢改动主路由配置的方式实现旁路由,但是看了一圈教程,也没人讲清楚是怎么搞的,oc 倒是可以用自动处理经过本机其他设备流量,可是 oc 本身规则不灵活改起来很费劲。mwan3 也尝试过,但是最后因 fw3 和 fw4 包的冲突放弃了。
    zliu0562
        3
    zliu0562  
    OP
       346 天前
    @qwvy2g 并没有用到 mwan3 。这个只是个策略路由而已,那个标题的意思是 ipset 也可以给 mwan3 用。
    不动主路由的话,流量就会全到“旁路由”,那“旁路由” 出问题直接国内都断了而且还有性能问题。
    freechuzhuo
        4
    freechuzhuo  
       346 天前 via Android
    目前用了 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
        5
    zliu0562  
    OP
       346 天前
    @freechuzhuo 用新的 apk ,不用创建接口了
    850521109
        6
    850521109  
       346 天前   ❤️ 1
    因为要跟其他人一起用,我都是自己的设备手动设置网关和 DNS 指向旁路由
    laincat
        7
    laincat  
       346 天前
    这名字是不是让人以为依赖。。。mwan3 啥的?
    laincat
        8
    laincat  
       346 天前
    @freechuzhuo 之前我也是这样套娃玩过,不过用的 ssr 啥的套。
    zliu0562
        9
    zliu0562  
    OP
       346 天前
    @laincat 不依赖,为了表示对原作者的尊重所以没改名字。
    zliu0562
        10
    zliu0562  
    OP
       346 天前
    @zliu0562 这个就一行脚本的事,但我懒得加了
    ryd994
        11
    ryd994  
       346 天前 via Android
    @zliu0562 #3 旁路由坏了就切回主路由啊
    zliu0562
        12
    zliu0562  
    OP
       346 天前
    @ryd994 切需要时间,而且这样还有性能损失。那我干嘛还要把国内流量送过去?
    yyysuo
        13
    yyysuo  
       346 天前 via iPhone
    这不就复杂了么,你看一下 neroxps 大佬的方案,或者搜索一下 paopao gateway 的方案,这两个方案思路是一样的 。我遵循这种思路,在主跌幅上装 mosdns ,国内直接用公共 dns 返回 real ip 直连性能无损失,国外转发给旁路的 clash 返回 fakeip ,主路由根据 fake ip 段添加静态路由,再添加电报 ip 和奈飞 ip 的静态路由,就完了,相当稳定 。


    https://fast.v2ex.com/t/947864
    zliu0562
        14
    zliu0562  
    OP
       346 天前
    @yyysuo 你说的跟我不是一个东西吗?国内 ip 直连,国外 ip 静态路由转发到“旁路由”去,我就是改了个 ipk 一键开启这个啊
    zliu0562
        15
    zliu0562  
    OP
       346 天前
    @yyysuo 你这个要装 mosdns 手动配置国内外的 dns 策略,我这个装个 ipk 填下“旁路由”的 ip 就行。究竟谁操作复杂?
    mohumohu
        16
    mohumohu  
       345 天前
    @zliu0562 还是不一样的,各有优点,DNS 分流可以很方便地自定义分流和不分流的域名,并且下载 bt 连国外 IP 也不走旁路由,主路由能设置静态路由就可以,不用刷机。
    zliu0562
        17
    zliu0562  
    OP
       345 天前
    @mohumohu 我这个有 gfwlist 模式,一样可以不用走国外。想自定义域名的话,去修改那个 gfwlist 文件夹就行。
    mohumohu
        18
    mohumohu  
       345 天前
    粗略的分流的话依赖 gfwlist 是可以的,但如果想实现比较精确的需求就没那么方便了,比如想实现([所有境外域名默认走代理]+[BT 直连]-[部分境外域名不走代理]),这个依赖单一 gfwlist 就不好实现,甚至在”部分境外域名不走代理“的需求中,还可以细化自定义一下走国内解析结果还是国外解析结果、或者替换优化解析结果(比如 CF 优选);
    DNS 分流的确需要更复杂的 DNS 策略,不过网上也很多一键脚本或者 docker 。主要是 DNS 并不需要搭建在主路由上,完全可以分离开,而主路由只需要添加数条甚至一条静态路由即可,对主路由来说改动比较少,更少的路由表或许性能消耗更少。相对主路由来说,拓扑和逻辑上是比较简单清晰一些,主路由也不一定需要是能刷机的,只要有基本的 DHCP 设置和静态路由设置功能即可。这样的拓扑另一个好处就是控制哪些客户端走代理的话只需要分配不同的 DNS 即可,这个可以通过 DHCP 或者 mosdns 的策略来实现。
    当然,13 楼的简单是相对于主路由的修改和网络拓扑逻辑来说的,适合有动手能力折腾的人。如果一个插件就能满足大部分需求,点点点的操作也确实比较简单。
    zliu0562
        19
    zliu0562  
    OP
       345 天前
    @mohumohu dns 服务器如果不在主路由上的话,那倒可以随便折腾 dns 策略。但我个人无法忍受主路由以外的设备出问题导致国内断网。
    mohumohu
        20
    mohumohu  
       345 天前
    @zliu0562 这个很好解决的,比如我现在用的 velop 路由器他就是可以填多个 DNS 服务器,然后他自己就是个 DNS 代理,平时没故障的话,他一般都是用内网的结果。当内网的 DNS 挂了,他就会用其他的 DNS 结果了。其他路由器应该也有类似的功能,或者主路由是 openwrt 的话来实现这个也简单,用 mosdns 或者 smartdns 就可以了,甚至 dnsmasq 也可以,dnsmasq 有个按顺序查询的选项来着。
    zliu0562
        21
    zliu0562  
    OP
       345 天前
    @mohumohu 如果想折腾 dns 分流的话,主路由是 openwrt 的话倒可以直接折腾了,不用开 dns 在其他服务器上。但一般的小米这种家用路由器,我自己测试 dns 是并发查询,查询结果是随机的。
    mohumohu
        22
    mohumohu  
       345 天前
    @zliu0562 确实,小米这种路由器连静态路由设置都默认被阉割了,想折腾的话小米倒是多数可以刷机,或者直接买 ROS 或者企业路由器功能就比较齐全了。分开 DNS 在其他设备主要是为了减轻主路由器的负担,尽量提高主路由的性能。
    Achophiark
        23
    Achophiark  
       344 天前
    主路由支持 dhcp option 3&6 也可以解决吧
    versxk
        24
    versxk  
       313 天前
    我测试过是可以分流,但分流去旁路由估计全解析为 IP 地址,旁路由 CLASH 除了 GOOgle 的 IP 认得以外,其它 IP 全不认识,如果要用 IP 来写 CLASH 规则有点麻烦,有解决方法吗
    panybbib
        25
    panybbib  
       309 天前
    还支持 x64 软路由?
    MeteorVIP
        26
    MeteorVIP  
       112 天前
    在"软件包"里面安装"luci-app-mwan3helper",但界面和你截图不一样,
    去 GitHub 链接下载"mwan3helper_mt7621.ipk"才对.
    体验了一下,真不错.多谢分享
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6015 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:09 · PVG 10:09 · LAX 18:09 · JFK 21:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.