V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
测试工具
SmokePing
IPv6 访问测试
oovveeaarr
V2EX  ›  宽带症候群

怎么将多个运营商的 IPv6 利用起来呢?

  •  
  •   oovveeaarr · 62 天前 · 2997 次点击
    这是一个创建于 62 天前的主题,其中的信息可能已经有所发展或是发生改变。
    家里接入了联通和电信的宽带,且都分配了 IPv6,目前使用 openwrt 的 mwan3 插件对 IPv4 进行分流。
    得益于 NAT 的存在,分流 IPv4 只需要做路由表就可以达到效果。
    但是对于 IPv6 来说,因为本身就是公网 IP,如果随意做路由的话,是不会通的。

    目前想到有两种方法
    1.对 IPv6 也做一层 NAT
    但是这样一来 IPv6 的优势也就完全失去了(且路由器还不一定支持)。就算魔改后支持了 1:1 NAT,规则复杂不说,对路由器的性能要求也直线上升

    2.在客户端内自行做规则
    如果在客户端内做规则的话,等于每一台机器都需要去修改,同时部分设备(手机)还不能修改。尤其是要修改默认路由的情况下,非常麻烦。

    大家有什么好的办法吗?
    22 条回复    2021-10-06 15:26:07 +08:00
    ghjexxka
        1
    ghjexxka  
       62 天前
    “但是对于 IPv6 来说,因为本身就是公网 IP,如果随意做路由的话,是不会通的”

    比较好奇不通是指啥
    pupboss
        2
    pupboss  
       62 天前
    建议先排查出国节点是否支持 IPv6
    oovveeaarr
        3
    oovveeaarr  
    OP
       62 天前
    @ghjexxka #1 路由不通呀,使用的 IP 是由客户端选择的,如果把 A 运营商的 IP,路由到 B 运营商,这样是不行的。
    titanium98118
        4
    titanium98118  
       62 天前
    我的状况跟你一样,电信+移动,只做了 ipv4 分流,目前局域网没有下发 ipv6 。
    ihipop
        5
    ihipop  
       62 天前 via Android
    要流量均衡最简单的就是 nat6 了
    要按运营商分流就做运营商的 v6 地址表
    以上都要原路返回策略路由配合
    其他好像没有特别简单的办法
    cwbsw
        6
    cwbsw  
       62 天前
    @oovveeaarr
    不会不通的。
    OpenWrt 默认添加的默认路由是诸如
    `default from 240e:ace:8e00:11ea::/64 via fe80::dd1c:abd1:34a:6501 dev pppoe-wan1`
    `default from 2409:832:3295:10ac::/64 via fe80::acae:bd1f:092:32ad dev pppoe-wan2`
    这种样式的,客户端用电信的地址发起连接就会走电信的网关,用移动的就走移动的网关。
    RouterOS v7 最近也支持 IPv6 的策略路由了,通过添加规则应该也能实现上面的效果。
    billccn
        7
    billccn  
       62 天前
    @cwbsw 你好像没理解楼主的困难在哪。现在 IPv6 地址是客户端选择的,楼主要实现分流效果需要把两个运行商的路由表配置到每个终端里,无法再像 IPv4 一样在路由器配置一次全局使用。

    我觉得解决楼主问题最省事的做法实在局域网里配置一个代理,在代理的机器上设置 IPv6 路由表,其他设备(包括手机)针对这个 WiFi 配置代理,这样绝大多数 App 就可以实现分流,少数不支持代理的从默认路由出去也不会很影响使用。
    cwbsw
        8
    cwbsw  
       62 天前
    @billccn
    我是在告诉楼主
    “路由不通呀,使用的 IP 是由客户端选择的,如果把 A 运营商的 IP,路由到 B 运营商,这样是不行的。”
    上面这种情况是不会发生的。

    至于你的问题。v6 环境下实现按运营商分流不需要额外配置,客户端解析到的电信的目的地址,据 RFC3484,会自动选择电信的源地址发起连接。
    geekvcn
        9
    geekvcn  
       62 天前
    IPv6 不需要分流,电信的 IP 会优先走电信,移动的 IP 会优先走移动,联通的 IP 会优先走联通。楼上已经说了,不想折腾客户端你直接路由器搞个 NAT6 就行了
    pcslide
        10
    pcslide  
       62 天前
    @geekvcn @cwbsw
    根据前缀选择源地址,并不表示下一步的网关选择就是正确的吧?比如我在内网上有两个出口节点,即使优选了源地址,从哪个出口出,不还要看路由表?
    oovveeaarr
        11
    oovveeaarr  
    OP
       62 天前
    @billccn #7 好主意,用 tcp redirec 透明代理特定端口的这个方法我的确忽略了。不过使用这种方法的话,似乎对局域网内所有的机器都是统一规则了,如果要实现类似 mwan 规则的话感觉上可能要比较复杂了。
    还有一个问题就是因为 DHCP-PD 是动态的,还要办法监控一下 DHCP,不然 IP 变更后路由表就会出问题。
    同时如果局域网内,想设置一个默认出口的 IPv6 似乎也没办法实现(不满足代理规则的情况下,就会控制不到。由于有多个 DHCP-PD 的话,局域网内其他客户端也同时会有多个 IP )
    晚点我看看能不能简单实现下

    @cwbsw #8 你可能没有认真看我的帖子,我的诉求就是如 @billccn 所说。现在的问题就是 IP 地址最长匹配选出来的 IPv6,并不是路线优解。
    这个问题只能通过手动调整路由表实现,由于我在主楼和 3#所说的“使用的 IP 是由客户端选择的”,但是不能路由 A 运营商的 IP 到 B 运营商的路由,所以单纯修改路由表的方式是不行的,不知道这么说你理解没。

    @geekvcn #9 这个也只是网内的情况,考虑更多的是网外的情况,协议默认选择出来的 IP 并不是实际上的最优解。

    这次主要是想和大家探讨,怎么去控制 IPv6 的路由走向的方法,而不是“默认已经就有了,不用控制”这个问题。

    NAT6 我也说了并不是比较好的解决方法,有一下几个原因
    1.很多路由器并不兼容,就算兼容的对于相关工具链也不是很完善(基本上都靠手写规则了)
    2.NAT6 的支持大部分止步于对 1 个 IPv6 进行 NAT,而支持 1:1 NAT 的我现在还没找到(本文其实更希望达到的 n:1 效果了)
    3.需要为每个 IP 配置 2*n 条以上规则( n 为出口数目)。出口同时 IP 发生变更时,需要重新生成规则非常麻烦。
    oovveeaarr
        12
    oovveeaarr  
    OP
       62 天前
    @pcslide #10 是的,其实不用太纠结“默认的规则可以用”这件事,我想和大家探讨的问题其实是“默认的规则并不合适,要怎么去改变”
    raysonx
        13
    raysonx  
       62 天前
    @oovveeaarr IPv6 下的 1:1 NAT 也叫做 NPT,软路由的话 Linux nftables 或者 Vyos 1.4 支持这个功能。
    raysonx
        14
    raysonx  
       62 天前
    pfSense 也支持
    billccn
        15
    billccn  
       62 天前
    @oovveeaarr 你把我的点子想高级了。

    我其实想的是一个简单的 HTTP 或者 Socks 代理,这样可以实现内网(甚至可以是 IPv4 地址)连接这个代理服务器,由代理机子的路由表再发出连接,这样不仅可以分流,还可以内网不配置 IPv6 地址,增强老系统的兼容性。

    你说的 TCP 代理我猜是指运行在路由器上那种?我想应该会很占 CPU,和 IPv6 NAT 半斤八两。
    Rocketer
        16
    Rocketer  
       62 天前 via iPhone
    从原理上讲,你的路由器与上级路由器在同一个子网内就可以转发给它,路由器是不关心上上级是哪个子网的。

    所以你的上行是可以发给任意路由器的,你的子网也只需用一家的 IP 段,没必要混用。但下行不是你决定的,所以你用哪家的 IP 段就会从哪家的线路来。

    想要上下行都智能的话就得让客户端有两个 IP,并把路由表配置到客户端。
    oovveeaarr
        17
    oovveeaarr  
    OP
       61 天前
    @billccn #15 其实也不高级,就是个透明代理而已哈哈。不过是底层级别的路由,不是 Clash 那种软件上的路由了,我还在想这个方案怎么实现比较好。


    @Rocketer #16 现在的运营商都有成熟的源地址检测的,把一个运营商的 IP 路由到另一个运营商的网关,是通不了的。

    现在看来如果客户端有两个 IP,想在路由侧影响源地址选取确实没什么办法。
    oovveeaarr
        18
    oovveeaarr  
    OP
       61 天前
    @raysonx #13 噢噢,确实我之前也看到 NPT 这个描述,还没来得及去看,晚点去看一下。
    那这个 NPT 的功能,是只能针对一个网段的 1:1 映射吗?还是说能支持 n:1 的(把多个网段,映射到一个内网网段中),如果支持的话感觉就不用倒腾了。
    不过还是得找一下 openwrt 有没有这种功能兼容,不然的话可能还是要写脚本自己手撸规则。
    或者是写规则重定向给旁路路由,旁路路由再处理这些东西,不知道可不可行。

    看了一下大佬的历史帖子,感觉对网络这块很有研究呀。大佬有联系方式吗,想交流(请教)一下))
    oovveeaarr
        19
    oovveeaarr  
    OP
       61 天前
    @titanium98118 #4 那路由端拨号后还能获取到 IPv6 吗?
    我这边用的 openwrt 把 IPv6 从自动改手工 /关闭,路由也会直接获取不到 IPv6,昨天查了下看起来像是 pppoe 拨号的时候参数有差别。
    但是选择自动的话,就会获取 DHCP-PD,然后下发 IPv6 给客户端,有点头大。

    @ihipop #5 是的,我想了半天感觉可能比较好的解法也只有 nat6 了。但是感觉还挺复杂的,头大。
    ihipop
        20
    ihipop  
       61 天前 via Android
    @oovveeaarr 还有一个办法,radvd 可以给客户端直接推送路由的,而且支持单播模式推送,剩下的你可以发挥想象了,
    raysonx
        21
    raysonx  
       61 天前 via iPad
    我个人是建议是直接推两个前缀下去,让客户端选择线路。路由器上配置策略路由( PBR )选择正确的网关。
    conupefox
        22
    conupefox  
       58 天前
    用 ip6tables 的 NETMAP 功能。lan 下发私网的 ipv6,再 1:1 映射。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2288 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 05:55 · PVG 13:55 · LAX 21:55 · JFK 00:55
    ♥ Do have faith in what you're doing.