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

求助:家庭局域网内使用透明代理,怎么解决 ipv4 和 ipv6 共存、dns 解析问题?

  •  
  •   wwd179 · 3 天前 · 1514 次点击

    背景描述

    目前家里通过路由器拨号。有 ipv6 。

    用树莓派 4B 安装 openwrt 系统,充当旁路由。

    科学上网使用 passwall2 插件。

    梯子是用海外云主机搭建的 naive 协议。有 ipv4 和 ipv6.

    想提供透明代理给 android 、ios 、win10-pc 。

    现在是通过在客户端手动 IP 、指定网关和 DNS 地址为旁路由,实现透明代理。(这里遇到有些设备无法手动设置 ipv6 的问题)

    目前的问题

    1. 想要用 ipv6 。但是如果开启 ipv6 。走透明代理的客户端,上网网速很慢甚至打不开。(感觉是 dns 问题)
    2. naive 协议能直接支持 ipv4 和 ipv6 双栈吗?

    对于这种情况,有相关资料参考吗?搜了一圈感觉没看到有用的文章。

    39 条回复    2024-12-01 13:39:50 +08:00
    lcy630409
        1
    lcy630409  
       3 天前   ❤️ 1
    我之前也有你的困惑,开启 ipv6 会导致 gfw 的一些域名很慢,特别是走 cloudflare cdn 的,后来在局域网安装 AdGuardHome 作为 dns ,将 gfw 列表的域名 全部只返回 ipv4

    当然前提是分发 ipv6 的时候 不要分发 ipv6 的 dns 或者 将 AdGuardHome 的本地 ipv6 地址当做 dns 分发下去
    maybeonly
        2
    maybeonly  
       3 天前   ❤️ 2
    旁路由和 ipv6 兼容很成问题。建议有 v6 刚需的情况下换成主路由使用,或者 v4 和 v6 场景分开(二级路由)
    和梯子本身支持不支持双栈关系不是那么大,根本原因是 v4 和 v6 的网关是没关系的,dns 的获取途径有多种( dhcp ,ra ,etc ),解析结果是分开的( a ,aaaa ),旁路由要兼容 v6 的话你得把各种 v6 网关都指过去还要避免收到主路由的 ra

    然后在梯子那里把所有去墙外的 v6 都 reject 掉就行了,客户端会自动用 v4 尝试。
    dbak
        3
    dbak  
       3 天前
    如果能顺利翻墙的话 你想保留 ipv6 的目的是啥?
    lihang1329
        4
    lihang1329  
       3 天前 via Android
    开启两个网段的 lan ,一个 lan ipv6 一个 v4
    lcy630409
        5
    lcy630409  
       3 天前   ❤️ 1
    插一句
    我的 AdGuardHome 设置,https://whzxc.cn/gfwlist/Ad-gfw.php ,将内容复制到过滤器的自定义过滤规则中,保存即可
    wwd179
        6
    wwd179  
    OP
       3 天前
    @dbak
    目的主要 2 个:
    1.要在公网通过 p2p vpn 访问家里设备。家里带宽没有公网 ipv4 ,甚至没有动态 ipv4 。p2p vpn 走 ipv4 时打洞不稳定,经常走到中转,用 ipv6 的话,就能稳定直连。
    2.跑 PT 上传的话,能利用 ipv4+ipv6 双栈。发现我这的带宽上行限速是分开的。ipv4 和 ipv6 各自能跑 30M 。
    SenLief
        7
    SenLief  
       3 天前
    旁路由无法使用 ipv6 代理的,主要的原因是 ipv6 的 dns 请求直接从主路由出去的,也就是劫持不到旁路由去,如果想用 ipv6 就是主路由跑网关了。
    Ipsum
        8
    Ipsum  
       3 天前
    直接改 gw 肯定是不行的。现在好点的方案只有 dns 分流。找个 mosdns 或者 adg 来对 gfwlist 的域名进行分流。clash 那边开启 fakeip 。主路由做个 fakeip 的 cidr 到 clash 基本上就行了。
    dbak
        9
    dbak  
       3 天前
    楼上的如果说的靠谱的话直接用透明代理直接拨号呢?
    78786381
        10
    78786381  
       3 天前
    @dbak #3 看电视,有的节目源 v6 速度快,v4 速度慢
    jesky
        11
    jesky  
       3 天前
    旁路由模式的问题。
    dbak
        12
    dbak  
       3 天前
    @78786381 那可以参考楼上对 dns 针对访问的域名进行分流 我用的 smardns 可以自定义域名走指定的 dns 服务器
    titanium98118
        13
    titanium98118  
       2 天前
    因为设备获取到的 ipv6 的网关和 ipv6 dns 不是你旁路由的 ipv6 IP ,这问题很复杂,把做透明代理的设备位置坐正
    roding
        14
    roding  
       2 天前
    dns 可以禁止解析 ipv6
    littlewing
        15
    littlewing  
       2 天前
    ipv6 对我唯一的用处就是挂 pt ,所以我把 v6 dns 关了,而且 clash 也不反回 v6 地址
    EvineDeng
        16
    EvineDeng  
       2 天前
    可以参考我的方案: https://www.v2ex.com/t/984297 ,透明代理的域名只走 ipv4 ,中国大陆的域名支持 ipv4/ipv6 双栈,PT 支持 ipv4/ipv6 双栈。无需手动指定 DNS 地址。
    aMR
        17
    aMR  
       2 天前
    ipv6 是可以多个网关同时广播 ra 的,ra 里可以调优先级
    xpn282
        18
    xpn282  
       2 天前 via iPhone
    在 IPv6 代理方面,用旁路由就别折腾 IPv6 了,难,伤脑筋。
    旁路由无法全面接管 IPv6 的流量,所以会导致代理方面各种问题。因为设备只是把 IPv4 指向旁路由而已,IPv6 流量并不能给旁路由处理。

    IPv6 代理的正确方式; OpenWrt 当主路由。OpenClash 作为代理全面接管 IPv6 流量,该直连还是代理,由规则决定。OpenClash 接管 IPv6 还有一个好处是,不管你的节点支不支持 IPv6 ,都不影响翻墙的,OpenClash 会自己处理好。
    veSir
        19
    veSir  
       2 天前
    IPv6 挺快的, 旁路由不要用 IPv6, 在 dnsmasq 过滤 AAAA 记录.
    ddczl
        20
    ddczl  
       2 天前
    设备用 AdGuardHome 53 端口,解析到海外域名上游用 ShellCrash 并使用 1053 端口,开启 fake-ip ,路由器配置静态路由,路由就是 fake-ip 所有,即可
    pagxir
        21
    pagxir  
       2 天前 via Android
    我选的方案是 ipv4=国内网络,ipv6 nat64 走国外,普通 ipv6 国内走国内,国外走国外,不过为了路由表简单会做映射。然后 dns 作调整,有国内 ipv4 就只返回 ipv4 ,有国外 ipv4 则返回 dns64 记录,最后仅有 ipv6 则,国内 ipv6 ,最后国外 ipv6 。一波下来完全无感如果 tizi 网络没异常的话。路由器上会将 64:ff9b::/96 添加为 local 路由,然后处理 tcp/443 跟 UDP/443 实现 TLS 跟 quic 的支持。
    esee
        22
    esee  
       2 天前 via Android
    dns 的问题,你可以这样,国外域名只返回 V4 ,国内域名返回双栈,我就是这样用的。
    pagxir
        23
    pagxir  
       2 天前 via Android
    为了方便临时访问 Google ,(没法安装客户端或者临时用)还搭了个 doh/ech 的环境 doh url https://test.603030.xyz/ech-query
    JasperHale
        24
    JasperHale  
       2 天前
    嘿嘿此时祭出 @ihipop 的解决方案 https://www.v2ex.com/t/818661#r_12074662
    [在不关闭主路由 SLAAC 的前提下对家庭内网指定设备的 IPv6 流量进行“旁路牵引”]( https://blog.ihipop.com/2022/09/5343.html)
    WhatTheBridgeSay
        25
    WhatTheBridgeSay  
       2 天前
    我目前折腾一路过来的结论是,几乎无法共存。
    甚至即使是 NAT 和 RA 和透明代理在一台机器上也几乎是无法共存,这是由于 IPV6 根本上就与 IPV4 用法上不一致造成的,IPV4 基本都需要 NAT 而 IPV6 都是一个设备最少有一个/64 的 PD ,后面 64 位自由发挥,并且 6 的默认网关会是 fe80 开头的 link-local 地址。另外还有 DNS 问题,IPV4 的 DNS 也是可以返回 AAAA 记录的,所以还会有 4only 的透明代理但基础设施普遍 6 优先导致流量从 6 走了。
    再就是如果把网关再分离出去大多数情况下就会导致 4 和 6 的路由路径不一致,因为基本都是只能把 IPV4 的网关分离出去,因为 4 的 IP 设置是 DHCP 分配而 6 主要是靠 RA 下发 PD 然后设备自行 SLAAC 拼接完整 IPV6 地址,如果让这个独立的网关再去自己分 DHCPv6 的话光在设置上就比较困难了
    WhatTheBridgeSay
        26
    WhatTheBridgeSay  
       2 天前
    目前比较简单可行的方案是开 RA ,但在 DNS 层面围追堵截 drop 掉 AAAA ,这样既能在 BT 等 P2P 可以用 6 网络,又能最大程度降低 V6 透明代理逃逸的问题。
    WhatTheBridgeSay
        27
    WhatTheBridgeSay  
       2 天前
    @JasperHale #24
    [在不关闭主路由 SLAAC 的前提下对家庭内网指定设备的 IPv6 流量进行“旁路牵引”]( https://blog.ihipop.com/2022/09/5343.html)

    大概是我太菜,或者是博主的表达能力堪忧,反正我是没看懂这一篇从头到尾在干什么
    fengyaochen
        28
    fengyaochen  
       2 天前 via Android
    又不是所有设备都需要 ipv6 ,运营商给的 v6 没有 nat 都是直连,不会经过代理,唯一的办法就是过滤国外的 dns ,让国外的域名解析只返回 v4 的地址,国内返回 v6 ,用大陆白名单的手段,其实 v6 国外的质量并不高,没必要启用 v6 ,国内也就一些大厂开了 v6 会速度快一些,用一个白名单就 ok 了
    wm5d8b
        29
    wm5d8b  
       2 天前 via Android
    @WhatTheBridgeSay #27
    写得还行吧,操作对不对没验证,核心思路就是调整 RA 优先级让 v6 走特殊路由
    Gitmeeri
        30
    Gitmeeri  
       2 天前 via Android
    一个 sing-box 配置解决的事,旁路由上装 sing-box 配置为双栈 tun 模式,自动路由开启,再把旁路由的 ip 转发开起来,网关 v4 v6 都填上旁路由的固定的
    wuruxu
        31
    wuruxu  
       2 天前
    我对这些问题研究超过两年多了,目前都是实现在硬路由上,可以看看我发的帖子,还附带实现了,出门在外,怎么回家使用科学上网
    luoshengdu
        32
    luoshengdu  
       2 天前
    一、使用 easymosdns 自建内网 dns 服务器,开启 ecs 判断域名。中国大陆解析 ipv4&ipv6 ,其他地址仅解析 ipv4
    -----------
    # 指定 ECS 的插件
    - tag: ecs_global
    ------------

    二、透明代理科学开启绕过中国大陆 IP 模式

    三、内网客户端验证,ipv4 和 v6 的返回结果
    ---------------
    C:\Users\wyh>nslookup www.qq.com
    服务器: Easydns.lan
    Address: fd3c::cfb

    非权威应答:
    名称: ins-r23tsuuf.ias.tencent-cloud.net
    Addresses: 240e:97c:2f:1::5c
    240e:97c:2f:2::4c
    121.14.77.201
    121.14.77.221
    Aliases: www.qq.com


    C:\Users\wyh>nslookup www.v2ex.com
    服务器: Easydns.lan
    Address: fd3c::cfb

    非权威应答:
    名称: www.v2ex.com
    Addresses: 172.67.35.211
    104.20.47.180
    104.20.48.180


    C:\Users\wyh>nslookup www.youtube.com
    服务器: Easydns.lan
    Address: fd3c::cfb

    非权威应答:
    名称: www.youtube.com
    Addresses: 142.250.196.206
    142.250.198.78
    142.250.204.46
    ---------------

    4.达到使用 ipv6 的前提,ipv6 又不影响科学上网
    dalaoshu25
        33
    dalaoshu25  
       2 天前
    个人意见你还是废掉现在这套设备,换个 RouterOS 的路由器,比如 hAP-AX3 ,然后在人类社会主机上运行 wireguard 、OSPF 和 AdGuard Home 或者 chinadns-ng ,无论 v4 还是 v6 都无缝分流。
    JasperHale
        34
    JasperHale  
       1 天前   ❤️ 1
    @WhatTheBridgeSay doge 表情让我不知道, 您的意思 反串还是文本本来的意思 ..😂..
    https://blog.ihipop.com/2022/09/5343.html 可以概况为:
    旁路由 拿着 大喇叭 高喊: 我的路由最牛逼, 把流量给我能发财.
    喇叭能控制方向, 对着特定几个人(设备) 喊,那几个人的 流量就得走旁路由.

    喇叭能喊 路由, 但是喊不了 DNS, 因此只能 v4 的 dns 最好能返回正确的 AAAA 的地址.
    WhatTheBridgeSay
        35
    WhatTheBridgeSay  
       20 小时 57 分钟前
    @JasperHale #34 其实 RA 已经可以喊 DNS 了,RDNSS ,后来的 rfc 加上的东西,各大 OS 支持程度不一
    xiaoke
        36
    xiaoke  
       10 小时 58 分钟前
    @wuruxu 有链接吗?
    flynaj
        38
    flynaj  
       3 小时 55 分钟前 via Android
    smartdns ,配置成 IPv4 优先
    xiaoke
        39
    xiaoke  
       3 小时 44 分钟前
    @wuruxu 谢谢,学习下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2717 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:24 · PVG 17:24 · LAX 01:24 · JFK 04:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.