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

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

  •  
  •   wwd179 · 29 天前 · 2305 次点击

    背景描述

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

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

    科学上网使用 passwall2 插件。

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

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

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

    目前的问题

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

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

    第 1 条附言  ·  25 天前
    感谢各位留言!最近比较忙,都没空看 V 站(捂脸

    感觉问题原因是:有些终端设备,无法手动设置 ipv6 的网关、dns 等。导致这些节点的 dns 解析未走到旁路由。

    我目前没有用 ipv6 翻墙的需求。主要需求还是想开 ipv6 ,同时实现科学上网。

    后续考虑 2 个方法:
    1. 二级路由。树莓派 4B 本身有 WIFI 功能,可以做为二级路由器。需要科学上网的设备通过 WIFI 连接到这个路由器。
    2. 在主路由里配置 DNS 指向旁路由。(旁路由中处理 DNS 解析问题)
    41 条回复    2024-12-18 08:28:42 +08:00
    lcy630409
        1
    lcy630409  
       29 天前   ❤️ 1
    我之前也有你的困惑,开启 ipv6 会导致 gfw 的一些域名很慢,特别是走 cloudflare cdn 的,后来在局域网安装 AdGuardHome 作为 dns ,将 gfw 列表的域名 全部只返回 ipv4

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

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

    IPv6 代理的正确方式; OpenWrt 当主路由。OpenClash 作为代理全面接管 IPv6 流量,该直连还是代理,由规则决定。OpenClash 接管 IPv6 还有一个好处是,不管你的节点支不支持 IPv6 ,都不影响翻墙的,OpenClash 会自己处理好。
    veSir
        19
    veSir  
       28 天前
    IPv6 挺快的, 旁路由不要用 IPv6, 在 dnsmasq 过滤 AAAA 记录.
    ddczl
        20
    ddczl  
       28 天前
    设备用 AdGuardHome 53 端口,解析到海外域名上游用 ShellCrash 并使用 1053 端口,开启 fake-ip ,路由器配置静态路由,路由就是 fake-ip 所有,即可
    pagxir
        21
    pagxir  
       28 天前 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  
       28 天前 via Android
    dns 的问题,你可以这样,国外域名只返回 V4 ,国内域名返回双栈,我就是这样用的。
    pagxir
        23
    pagxir  
       28 天前 via Android
    为了方便临时访问 Google ,(没法安装客户端或者临时用)还搭了个 doh/ech 的环境 doh url https://test.603030.xyz/ech-query
    JasperHale
        24
    JasperHale  
       28 天前
    嘿嘿此时祭出 @ihipop 的解决方案 https://www.v2ex.com/t/818661#r_12074662
    [在不关闭主路由 SLAAC 的前提下对家庭内网指定设备的 IPv6 流量进行“旁路牵引”]( https://blog.ihipop.com/2022/09/5343.html)
    WhatTheBridgeSay
        25
    WhatTheBridgeSay  
       28 天前
    我目前折腾一路过来的结论是,几乎无法共存。
    甚至即使是 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  
       28 天前
    目前比较简单可行的方案是开 RA ,但在 DNS 层面围追堵截 drop 掉 AAAA ,这样既能在 BT 等 P2P 可以用 6 网络,又能最大程度降低 V6 透明代理逃逸的问题。
    WhatTheBridgeSay
        27
    WhatTheBridgeSay  
       28 天前
    @JasperHale #24
    [在不关闭主路由 SLAAC 的前提下对家庭内网指定设备的 IPv6 流量进行“旁路牵引”]( https://blog.ihipop.com/2022/09/5343.html)

    大概是我太菜,或者是博主的表达能力堪忧,反正我是没看懂这一篇从头到尾在干什么
    fengyaochen
        28
    fengyaochen  
       28 天前 via Android
    又不是所有设备都需要 ipv6 ,运营商给的 v6 没有 nat 都是直连,不会经过代理,唯一的办法就是过滤国外的 dns ,让国外的域名解析只返回 v4 的地址,国内返回 v6 ,用大陆白名单的手段,其实 v6 国外的质量并不高,没必要启用 v6 ,国内也就一些大厂开了 v6 会速度快一些,用一个白名单就 ok 了
    wm5d8b
        29
    wm5d8b  
       28 天前 via Android
    @WhatTheBridgeSay #27
    写得还行吧,操作对不对没验证,核心思路就是调整 RA 优先级让 v6 走特殊路由
    Gitmeeri
        30
    Gitmeeri  
       28 天前 via Android
    一个 sing-box 配置解决的事,旁路由上装 sing-box 配置为双栈 tun 模式,自动路由开启,再把旁路由的 ip 转发开起来,网关 v4 v6 都填上旁路由的固定的
    wuruxu
        31
    wuruxu  
       28 天前
    我对这些问题研究超过两年多了,目前都是实现在硬路由上,可以看看我发的帖子,还附带实现了,出门在外,怎么回家使用科学上网
    luoshengdu
        32
    luoshengdu  
       28 天前
    一、使用 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  
       28 天前
    个人意见你还是废掉现在这套设备,换个 RouterOS 的路由器,比如 hAP-AX3 ,然后在人类社会主机上运行 wireguard 、OSPF 和 AdGuard Home 或者 chinadns-ng ,无论 v4 还是 v6 都无缝分流。
    JasperHale
        34
    JasperHale  
       27 天前   ❤️ 1
    @WhatTheBridgeSay doge 表情让我不知道, 您的意思 反串还是文本本来的意思 ..😂..
    https://blog.ihipop.com/2022/09/5343.html 可以概况为:
    旁路由 拿着 大喇叭 高喊: 我的路由最牛逼, 把流量给我能发财.
    喇叭能控制方向, 对着特定几个人(设备) 喊,那几个人的 流量就得走旁路由.

    喇叭能喊 路由, 但是喊不了 DNS, 因此只能 v4 的 dns 最好能返回正确的 AAAA 的地址.
    WhatTheBridgeSay
        35
    WhatTheBridgeSay  
       26 天前
    @JasperHale #34 其实 RA 已经可以喊 DNS 了,RDNSS ,后来的 rfc 加上的东西,各大 OS 支持程度不一
    xiaoke
        36
    xiaoke  
       26 天前
    @wuruxu 有链接吗?
    flynaj
        38
    flynaj  
       26 天前 via Android
    smartdns ,配置成 IPv4 优先
    xiaoke
        39
    xiaoke  
       26 天前
    @wuruxu 谢谢,学习下
    fengyaochen
        40
    fengyaochen  
       9 天前 via Android
    @WhatTheBridgeSay ipv6 旁路由可以搞的,就是你得再新建一个没用的网段,让主路由把 ipv6 给这个没用的网段,前缀 62 即可,不要给你原本的网段,旁路由从这个没用的网段再把 ipv6 再倒回你原本的网段,这前缀 64 ,这样 ipv6 的路由第一跳就是你的旁路由了,最后在 passwall 里打开 tproxy 就行了,我已经实验成功了,现在双栈 v4 v6 都不会受到 dns 污染,访问 test ipv6 显示的地址也是我 vps 的 v6 地址,不再是国内原本的 v6 地址了
    fengyaochen
        41
    fengyaochen  
       9 天前 via Android
    @WhatTheBridgeSay 新建一个没用的网段并不是二级路由,是平行的网段,比如你原本主路由 pppoe 拨号 lan1 是 192.168.1.1 ,那么你就在新建一个 lan2 192.168.2.1 网段就行了,openwrt 旁路由也搞两个网段一个 192.168.1.2 一个 192.168.2.2 这样,最后让主路由 ipv6 下发给 lan2 ,前缀长度 62 ,不要下发给 lan1,让你旁路由给 lan1 下发 ipv6 ,dhcp 服务里 ipv6 都改成混合模式,这样你的设备就能拿到前缀长度 64 的 v6 地址了,最后旁路由还要新建一个 wan 口网卡指向 lan2 ,从主路由那里拿一个 ipv6 前缀 63 ,这样你 ipv6 第一跳就是旁路由第二跳就是主路由了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4982 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:41 · PVG 17:41 · LAX 01:41 · JFK 04:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.