V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
terrancesiu
V2EX  ›  宽带症候群

routeros7 的源进源出的 bug

  •  
  •   terrancesiu · 72 天前 · 1196 次点击
    这是一个创建于 72 天前的主题,其中的信息可能已经有所发展或是发生改变。
    说下环境,联通 3 条宽带,3 个 ipv4 公网属于同一 25 的的子网。
    需求是
    pppoe-out1 国内出站和入站
    pppoe-out2 国内三网的 wireguard 入站和出站
    pppoe-out3 国外策略路由的入站的出站

    按常规的操作做了源进源出后,ipv6 没问题,ipv4 的 tcp 没问题,但是 ipv4 的 udp 会失败,导致基于 udp 的 wireguard 从 pppoe-out2 入站和出站失效。

    后来浏览 mikrotik 的论坛,发现老外也提到这个问题

    只需要建立三个策略路由表,出口分别是三个接口,最后在策略路由规则增加对应接口的地址即可。操作如下(省略了源进源出的 mangle 配置):
    /routing table
    add disabled=no fib name=pppoe-out1-routing
    add disabled=no fib name=pppoe-out2-routing
    add disabled=no fib name=pppoe-out3-routing

    /ip route
    add distance=1 dst-address=0.0.0.0/0 gateway=pppoe-out1 routing-table=pppoe-out1-routing scope=30 target-scope=10
    add distance=1 dst-address=0.0.0.0/0 gateway=pppoe-out2 routing-table=pppoe-out2-routing scope=30 target-scope=10
    add distance=1 dst-address=0.0.0.0/0 gateway=pppoe-out3 routing-table=pppoe-out3-routing scope=30 target-scope=10

    /routing rule
    add action=lookup comment=pppoe-out1 disabled=no src-address=你的 pppoe-out1 的公网地址 table=pppoe-out1-routing
    add action=lookup comment=pppoe-out2 disabled=no src-address=你的 pppoe-out2 的公网地址 table=pppoe-out2-routing
    add action=lookup comment=pppoe-out3 disabled=no src-address=你的 pppoe-out3 的公网地址 table=pppoe-out3-routing

    最后在更新 ddns 脚本里加上一小段把这个 rule 更新下,所有问题修复了。
    7 条回复    2024-02-05 15:24:40 +08:00
    jmxct520
        1
    jmxct520  
       72 天前
    nb ,我头疼了好几个月了,老板 NB
    514146235
        2
    514146235  
       72 天前
    这个不是 v7 的 bug ,用法就是这样的。
    ppbaozi
        3
    ppbaozi  
       72 天前
    "常规的操作"的操作是什么
    terrancesiu
        4
    terrancesiu  
    OP
       72 天前
    wacke
        5
    wacke  
       72 天前
    其实不是 ipv4 udp 会有问题。。。。根源是 wireguard 的 ipv4 不遵循源进源出,而是直接使用默认路由表的默认路由。。。
    参考: https://www.v2ex.com/t/856378
    https://github.com/openwrt/packages/issues/9538

    这个鸟问题 wireguard 官方是完全不打算修正。。。
    onion83
        6
    onion83  
       72 天前
    v4/v6 双栈自动添加路由规则脚本,可在 /ppp/profiles 新建一个 profiles 在 on up 中填入,然后 pppoe 拨号时引入

    ```
    {
    :local ifc WZ-CTC-300M; # FIXME pppoe 接口
    :local itb ctc; # FIXME 自定义路由表

    :delay 3s;
    :local ipv4 [/ip/address get [find interface=$ifc] address];
    :local ipv6 [/ipv6/address get [find interface=$ifc and global] address];
    :local ipv4 [:pick $ipv4 0 [:find $ipv4 "/"]]
    :local ipv6 [:pick $ipv6 0 [:find $ipv6 "/"]]

    :if ($ipv4 != "") do={
    /routing/rule remove [find comment="$itb-v4"];
    /routing/rule add action=lookup-only-in-table src-address=$ipv4 table=$itb comment="$itb-v4";

    /routing/rule remove [find comment="$itb-v6"];
    /routing/rule add action=lookup-only-in-table src-address=$ipv6 table=$itb comment="$itb-v6";

    :put $ipv4; :put $ipv6;
    :log warning "[redail] $ifc -- IP changed to $ipv4 / $ipv6";
    } else={
    :log warning "[redail] IP address not available. Redial may not have occurred.";
    }
    }
    ```
    说明:
    ---------------
    1 、以上脚本未经长时间测试,请谨慎修改使用
    2 、其中 ipv6 部分为根据 prefix 在 pool 中手动分配,其它情况请酌情修改 (参考: https://post.smzdm.com/p/aqm47w6p/)
    terrancesiu
        7
    terrancesiu  
    OP
       72 天前
    @wacke 感谢提示
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3167 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 13:05 · PVG 21:05 · LAX 06:05 · JFK 09:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.