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

IPv6 国内外分流,只能 nat 吗

  •  
  •   shenyuzhi · 29 天前 · 2973 次点击
    我这边的 ipv4 ,配置了一个很简单的国内外分流,已经运行得相当完美了。

    IPv4 内网(192.168.10.0/24)
    Mikrotik 路由表分流
    如果目标是国内 IP ,出口是 pppoe ,启用 nat
    如果目标是国外 IP ,出口是 wireguard ,启用 nat ,连接某 iplc vps 。

    但是 ipv6 就不太好办了了。
    电信分配了 ipv6 地址,iplc vps 也有一个很大的 ipv6 地址段,而且是静态的,可以在我的内网分配。
    我想实现:访问国内的 ipv6 地址,用电信分配的 ipv6 地址。访问国外的 ipv6 地址,用 vps 的地址。
    除了配置 nat ,有别的办法吗?
    实在是不想 nat
    45 条回复    2025-08-14 11:35:45 +08:00
    mooyo
        1
    mooyo  
       29 天前
    写路由表?
    dsx826
        2
    dsx826  
       29 天前 via Android   ❤️ 1
    试试前缀转换
    rulagiti
        3
    rulagiti  
       29 天前   ❤️ 1
    iptables mark 策略路由
    bclerdx
        4
    bclerdx  
       29 天前   ❤️ 1
    我就很好奇,在中国大陆使用个网络,还需要 网民们做“CN”单独分流。这难道不是莫大的讽刺?怎么没见过港澳台地区的人们使用网络还需要单独做“香港”单独分流、“澳门”单独分流 和 “台湾”单独分流呢?
    anonymity
        5
    anonymity  
       29 天前
    @bclerdx #4 第一次来中国吗😂
    cyp0633
        6
    cyp0633  
       29 天前   ❤️ 1
    我在 Linux 的路由器上用 xray ,国内地址走 freedom ,境外地址走代理(也支持 wireguard ),用 nftables 把路由器流量导入 xray 做透明代理,v4 和 v6 都可以很好地处理
    crysislinux
        7
    crysislinux  
       29 天前 via Android
    @bclerdx 竟然还有人给你点赞也是绝了,你是觉得楼主为了这事应该去上访?
    shenyuzhi
        8
    shenyuzhi  
    OP
       29 天前
    @dsx826
    这是个不错的主意。虽然 1 对 1nat 也是 nat ,但是看着比共用一个 ipv6 地址出口舒服一些。
    ranaanna
        9
    ranaanna  
       29 天前   ❤️ 1
    这是一个局域网内 multiple ipv6 gateways 的问题。

    如果要避免这个问题,
    1. nat 不失为不错的解决方案,当然,会有 nat 带来的问题
    2. 如果 vps 的速度不错,那么单选 vps 的 ipv6 也不错。会有连通性、延迟和速率的问题,但是反正有 ipv4 保底,一般不会对实际体验有很大的影响

    如果要利用这个问题,
    3. 理论上 ipv6 应该是要支持 multiple gateways 的,系统应可以根据源地址的不同选择正确以及更快的地址、网关组合保持通讯。但是实际上当前的各种系统对此的支持都非常不好,所以往往会出现系统选择错误的地址和网关导致通讯中断的情况
    4. 解决的办法是有的,比如 source based routing ,建立一个或多个路由表,指定路由表的地址规则和缺省网关。但这件事是在每个终端上都要做,对于某些终端做起来可能并不容易

    做起来较简单但终端上没有公网 ip ,2 做起来最简单但只有 vps 给的公网 ip ,3 做起来最佛系但肯定会碰到连接问题,4 做起来最复杂但终端上同时有电信和 vps 给的公网 ip
    zhu327
        10
    zhu327  
       29 天前
    我的做法对 ipv6 地址下发通告的 dns 服务器不要直接用上游下发的营运商 ipv6 dns, 而是路由本身的链路 ipv6 地址, 比如 fe80::cabf:4cff:fe87:ee68 这样, 然后这样在路由器上通过 dnsmasq 分流需要到国外的域名只返回 ipv4
    wuruxu
        11
    wuruxu  
       29 天前
    我使用了 policy route, 把 ipset 中的 ipv6 地址 通过 wg0
    bclerdx
        12
    bclerdx  
       29 天前   ❤️ 1
    @anonymity 显然不是。
    thevita
        13
    thevita  
       29 天前
    @bclerdx 当然也是需要的,比如国外 VPN 服务商目标客群主要是用来绕过内容商的版权限制,太普遍了.
    bclerdx
        14
    bclerdx  
       29 天前   ❤️ 1
    @crysislinux 你难道看不出来我是在说谁呢吗?当然,如果 OP 去运营商或国家信访办上访,也是可以的。OP 也可以不上访。跪久了就不容易起身了。
    MYDB
        15
    MYDB  
       29 天前 via iPhone
    全分流到国外 ipv6 就好了,国内完全支持 ipv6 的软件/应用/网页几乎没有,用 ipv6 反而被限制体验
    dream0689
        16
    dream0689  
       29 天前 via iPhone
    可以找个国内带 v6 地址的服务器搭 wireguard 中转一下,本地客户端配好海外允许路由的 v6 段。
    heiher
        17
    heiher  
       29 天前
    还是和 IPv4 的内外分流一样就可以。我是用类似这样的: https://github.com/heiher/hev-socks5-tproxy?tab=readme-ov-file#netfilter byp4 和 byp6 地址表分别还增加了内地的 IPv4 和 IPv6 地址段。
    wy315700
        18
    wy315700  
       29 天前
    @MYDB 2025 年了。。
    kujou
        19
    kujou  
       29 天前
    https://github.com/zfl9/chinadns-ng
    这个内外分流如何,基于域名列表和 ip 列表,先判断域名是否在国内域名列表,如果不是,在从 dns 返回的 ip 判断
    zro
        20
    zro  
       29 天前
    感觉 Fake-IP 会简单些。。😀
    starryloki
        21
    starryloki  
       29 天前
    我的架构和楼主非常相似,也是用 RouterOS 做了双栈的国内外分流,国内 ISP 提供/60 的 IPv6 静态 Prefix ,国外提供/56 的 IPv6 静态 Prefix ,且海外端也是 RouterOS
    如果海外端也是 RouterOS 的话,没有特别好的办法,因为不支持前缀转换。如果是 Linux 或 OpenWRT 的话,可以尝试用基于前缀负掩码的前缀转换尝试
    wm5d8b
        22
    wm5d8b  
       29 天前 via Android
    @starryloki RouterOS 也可以前缀转换
    https://ntzyz.space/zh-cn/post/use-netmap-to-get-persistent-ipv6-address-and-control-source-address/
    everfly
        23
    everfly  
       29 天前
    IPv6 为啥要 NAT 呢?你给 Mikrotik 配置 iplc vps 静态 IPv6 地址段分配出来的一段/64 地址不好了吗?
    maybeonly
        24
    maybeonly  
       29 天前   ❤️ 1
    用运营商 ip 段的话,只能 nat ,或者其等效手段(包括但不限于,nat66 ,snpt ,netmap ,七层代理)
    根本原因是,你的局域网 ip 段是运营商分给你的,而这些 ip 不可能(通常也不被允许)从其他地方发出去,发往这些 ip 段的数据包更是只会通过运营商还给你。

    配置多段 ip 多路由+策略可行吗?理论上可行,但是带来的问题可能远远比收益要多。例如,配置困难,无法处理复杂规则,梯子故障时难以处理等等。

    最后,不要恐惧 nat 。那东西挺好用的,真的。特别是没条件 bgp 的时候。
    keyfunc
        25
    keyfunc  
       29 天前
    Fake IP 最简单,我更极端点,所有非 CN 白名单的域名一律不返回 ipv6 的解析,CN2 的 v6 地址很烂
    szdosar
        26
    szdosar  
       29 天前
    你的需求无非就是代理和分流 ipv6 ,这事有专门的插件能实现,比如 passwall2 。比你自己瞎琢磨靠谱,别浪费时间,专业的事情,让专业的人做。
    terrancesiu
        27
    terrancesiu  
       29 天前
    前缀转换落地的 vps 再 nat 一次即可。这样国内是 240x 的 ip ,境外就是你的 vps 的 v6.
    itiao
        28
    itiao  
       29 天前

    可以考虑一下 V 友 yyysuo 的 Mosdns Fakeip 分流
    https://github.com/yyysuo
    https://t.me/+bzSRf6dtG3lhYWVl
    scegg
        29
    scegg  
       29 天前
    用两个 VLAN ,推送两套 V6 的 IP 到终端机,让其中一个是默认网关,另一个做类似无类路由的策略只走 CN ?
    scegg
        30
    scegg  
       29 天前
    这个模式缺点是需要电脑,但好像手机的话也不用纠结是否 NAT 了。
    guiys
        31
    guiys  
       29 天前 via Android
    为啥要一定硬要访问国外 v6 呢?所有国外站的 v6 解析全扔掉,靠 v4 即可。
    除非你的需求是大量 v6-only 的站
    JoeSmith
        32
    JoeSmith  
       29 天前
    ip rule ,配合 nft set, xmark , 加路由表
    完全可以实现,我就这么干的,用了很久了

    细节懒得写了,lz 自己研究吧。

    大致的思路如下:
    1. 搞一个 IP 地址列表(网上有的是),可以是中国 IP ,可以是国外 IP ,都可以。区别就是一个当黑名单用,另一个就是当白名单用,看你爱好。
    2. 把这个列表写到一个 nft set 里
    3. 写 nft 规则,匹配 set 的,打 xmark
    4. ip rule ,匹配某 xmark 的,查特定路由表
    5. 在这个特定路由表里,随便写你的路由配置

    这一套下来就实现了分流,v4 v6 通用。
    JoeSmith
        33
    JoeSmith  
       28 天前
    我这个用的是 tailscale ,没用 NAT 。
    不过实际上 tailscale exit node 是用 NAT 实现的。
    goofysun
        34
    goofysun  
       28 天前
    @bclerdx 这就好比 TK 服务器放在中国会被美国制裁,后面放在中国之外了,还是要被制裁。所有的政权都会对自己控制不了的媒体类限制。只是互联网西方独大了很久而已,YT 、TWITTER 这些上面反中内容,真的假的,谣言什么的泛滥,而中文社区的审核貌似给的是不怎么友好大陆的地区,你以为换成你当权,你能放开?或者按照你的意思,模仿老美立法禁止访问这些就好了。难道法禁和技术禁有很大的道德差异?
    red3a
        35
    red3a  
       28 天前
    说说我的现状和历史经验
    现状:
    - IPv4 私有 IP 地址, slaac 分配动态 IPv6 公网地址标配
    - DNS 解析 IPv4/IPv6, 特殊地址只解析 IPv4 走路由表 或者 直接 Fake IP 走 mihimo
    - IPv4 路由表处理, IPv6 全国内

    过去折腾过的(需要 VPS 有两个 prefix routing 的国外 IPv6 地址段, 比如 tunnelbroker 那种, 但是其他的找不到或不划算后来就不弄了)
    - IPv4 私有 IP 地址, slaac 分配动态 IPv6 公网地址标配
    - DNS 解析 IPv4/IPv6
    - IPv4/IPv6 按地址路由, 需要走特殊出口出去的, 做前缀映射, 换 IPv6 prefix
    使用很正常, 但是也有很多不属于架构的问题, 比如境外 BT 流量会消耗比较大(因为无法控制别人怎么检测你的 IP 的), IPv6 的速度可能不行等等
    bclerdx
        36
    bclerdx  
       28 天前
    @goofysun 比如 YT 、Twitter 等这列就显示公众互联网,而不控制通过专线能直接访问这些服务的政权部门?一刀切只对公众互联网,而不对特殊政权部门,是这意思吧?这不就是看人下彩蝶吗?恶心!
    sanquan
        37
    sanquan  
       28 天前 via iPhone
    ospf 啊
    ankikong
        38
    ankikong  
       28 天前
    #4 该评论涉及引战 无意义 @Livid
    hxdyxd
        39
    hxdyxd  
       28 天前
    如果是南方,直接全部 HK 出口,不分流。
    延迟没差多少。绕香港还能解决跨网 Q 的问题
    anonymity
        40
    anonymity  
       28 天前
    wg 翻 gfw 不会被切吗 我也想搭一个,
    现在用的 zerotier
    txydhr
        41
    txydhr  
       28 天前 via iPhone
    @MYDB 张口就来
    Csheng
        42
    Csheng  
       26 天前
    @JoeSmith #32 实际上这么干之后,你会发现。。。还不如套个 sing-box 加配置来的简单。。。这玩意开 tun ,监听 dns ,ipset domain 之类的玩法,足够做很细的分流,用 clash api 开个 zashboard ,又能有 ui 管理。实际上还是挺省事的,至少日常切换不至于需要敲代码,至于改配置,倒是挺恶心的人的 json... v4/v6 都能用,不过我只用了 v4 only 。底层原理其实和你说的方案应该是一致的。
    lih24338
        43
    lih24338  
       24 天前 via Android
    用代理上网插件不就能行吗
    JoeSmith
        44
    JoeSmith  
       22 天前
    @Csheng 敲代码不还有附带逼格的好处嘛。

    其实敲代码也简单的很,并不比在 gui 上点鼠标费事。

    clash 对我来说偏向于黑盒,尤其是 fake IP 那一套尤其不喜欢。
    Ljcbaby
        45
    Ljcbaby  
       19 天前
    其实你能同时分下去两个地址的话,啥都不管都行,本来就会把所有的地址都试一遍。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5385 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 07:07 · PVG 15:07 · LAX 00:07 · JFK 03:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.