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

吃惊了,三大运营商的 IPv6 流量居然可以互相穿透?

  •  
  •   htfcuddles · 2 天前 · 3978 次点击

    最近折腾 IPv6 下的多 WAN ,照道理,因为源地址的选择由客户端判断,在不开启 NAT66 或者 NPT 情况下,多 WAN 肯定是不可行的,无论路由指定哪个接口,上游会丢弃不可达源地址(rp_filter)。 例如:

    • 客户端:2408:xx => 2409:xx
    • 路由器:按 PBR 转发到移动接口
    • 移动 BRAS:2408 是什么玩意?扔了扔了

    然而我发现未设置 NAT 情况下,PBR 居然走通了,联通移动互相转发了对方流量!

    客户端: ping 2400:3200::1 PING 2400:3200::1(2400:3200::1) 56 data bytes 64 bytes from 2400:3200::1: icmp_seq=1 ttl=119 time=6.29 ms

    tcpdump -i pppoe-wan1 host 2400:3200::1 11:53:12.218761 IP6 2409:xxx > public1.alidns.com: ICMP6, echo request, id 17810, seq 1, length 64

    tcpdump -i pppoe-wan3 host 2400:3200::1 11:53:34.598892 IP6 public1.alidns.com > 2409:xxx ICMP6, echo reply, id 17871, seq 1, length 64

    去程和回程走了不同的接口!试了几个 IP ,确实发现可以互相转发流量,对来源 IP 没有任何限制!

    20 条回复    2024-12-24 01:45:50 +08:00
    povsister
        1
    povsister  
       2 天前 via iPhone   ❤️ 4
    啊这。应该是 bug 吧,否则黑产用这玩意玩个反射 ddos 伤害可太高了
    xie919
        2
    xie919  
       2 天前
    trace 图发一下呢,理论上不应该啊。
    basncy
        3
    basncy  
       2 天前
    聊胜于无。线路差的,丢包,高延时,墙中墙,一个也不会少。
    htfcuddles
        4
    htfcuddles  
    OP
       2 天前
    dream0689
        5
    dream0689  
       2 天前 via iPhone
    我开双 wan ipv6 用过一段时间,但是用着用着就不通了。最后关掉了其中一个 wan 口的 ipv6 才正常。我的路由器没法针对 ipv6 设置 nat66 和 npt 。
    htfcuddles
        6
    htfcuddles  
    OP
       2 天前
    @povsister 确实是 bug 。查了一下 ipv6 下 linux 内核居然没有 rp_filter 实现,06 年的 pr 一直没进主线。。 要过滤必须得开 nft 或 ipt 。 先把多 wan 关了,免得当 pcdn 噶我。。
    maybeonly
        7
    maybeonly  
       2 天前
    应该是 bug ,运营商侧没做源地址限制。
    之前偶然一次程序出现 bug ,到北京移动的路上没设置上 snpt ,用了联通的 ip ,结果能正常通信……
    1423
        8
    1423  
       2 天前
    偷着乐不好吗
    LGA1150
        9
    LGA1150  
       2 天前
    OpenWRT 双 WAN 默认会根据源地址选择哪个 WAN 口出去,不需要配置
    htfcuddles
        10
    htfcuddles  
    OP
       2 天前
    @LGA1150 前提是客户端需要选择正确的源地址。然而家里那么多设备如何保证选择的是最优线路呢,逐个设备编辑 gai.conf 吗?那不能 root 的设备怎么办?最终合理方案还是要集中式控制。
    lo0pback
        11
    lo0pback  
       2 天前
    漏网之鱼吧,我这边三线不做 pbr 根本用不了
    JoeSmith
        12
    JoeSmith  
       2 天前
    貌似就算能通信也没得到什么好处
    xiuming
        13
    xiuming  
       2 天前
    这不应该是互联网正常功能吗
    caola
        14
    caola  
       2 天前
    有的地方验证来源,有的不验证吧。否则 黑产 最喜欢了。其实这样我也喜欢,因为可以跨国跨地区做 CDN 服务了
    xqzr
        15
    xqzr  
       2 天前
    tcpdump -ni any host 2400:3200::1
    syswow64
        16
    syswow64  
       2 天前
    中国联通骨干网没做 rp_filter 似乎是个旧闻了。
    印象中国不是强制上级路由器做 rp_filter 吗?
    syswow64
        17
    syswow64  
       2 天前
    艹。研究了一下,复现了。

    分享一较简单的方法:
    1. 在接口添加要冒充的 IPv6 地址。
    ```sh
    sudo ip -6 address add <spoofed_ipv6_address>/128 dev eth0
    ```
    2. 以之为源地址发包。
    ```sh
    ping -I <spoofed_ipv6_address> -i 2 -c 5 2400:3200::1
    ```

    此缺陷绝对会被利用,如反射 DDoS 。
    但愿早日修复吧~
    syswow64
        18
    syswow64  
       2 天前
    补充:
    1. <spoofed_ipv6_address> 可以自由发挥,比如 VPS 地址。
    2. 在某厂商 VPS 上复现失败。说明此缺陷可被 rp_filter 或类似机制解决,只是中国运营商没做。
    justtoxic
        19
    justtoxic  
       2 天前 via iPhone
    没用,ping 的通但是速度很慢,跑一跑 tailscale 点对点连接就被限速了。跨运营商流量管控可是和彼此的分润挂钩的,不做来源限制不等于能用,只能说是能通,但是限的很死
    htfcuddles
        20
    htfcuddles  
    OP
       1 天前
    @syswow64 #18 查了一下 IPv6 uRPF 有两个模式,对用户一般是 strict ,对 ISP 是 loose 。很可能是没配或者配错。。dc 肯定会做,不然你一个 IP 两个 ISP 出口,等于白嫖 BGP (虽然只有半程)。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1677 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:43 · PVG 00:43 · LAX 08:43 · JFK 11:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.