V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
tanglu
V2EX  ›  问与答

问问大家 ipv4 优先与 ipv6 优先有什么差别呀?

  •  
  •   tanglu · 2022-11-09 18:39:55 +08:00 · 2782 次点击
    这是一个创建于 779 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假设不考虑网速 丢包问题 vps 是双栈的
    我感觉 linux 开启 ipv4 优先或者 ipv6 优先 这两个除了 IP 不同 好像没有什么区别
    ipv4 优先可以打开纯 ipv6 网站
    ipv4 优先也可以打开纯 ipv4 网站

    我不是很懂,有没有大佬解答一下呀?
    14 条回复    2022-11-09 22:48:05 +08:00
    ysc3839
        1
    ysc3839  
       2022-11-09 18:50:36 +08:00
    首先声明我没了解过 Linux 的 IPv4 或 IPv6 优先是什么机制。
    个人猜测如果是内核的功能,应该影响的是 getaddrinfo https://man7.org/linux/man-pages/man3/getaddrinfo.3.html 返回 IP 地址的顺序。许多程序访问网络就是直接用 getaddrinfo 解析域名,然后按照返回的顺序尝试连接,超时后连接下一个地址。如果某个域名同时有 IPv4 和 IPv6 地址,内核以不同的顺序返回 IP 地址,就能控制程序优先连接 IPv4 或 IPv6 。
    XiLingHost
        2
    XiLingHost  
       2022-11-09 18:53:08 +08:00   ❤️ 1
    @ysc3839 这个是通过修改 /etc/gai.conf 实现的,原理就是你说的这样
    totoro625
        3
    totoro625  
       2022-11-09 19:01:29 +08:00
    你都说了是纯 ipv6 网站和纯 ipv4 网站了
    就怕那种既有 ipv4 又有 ipv6 的,因为 ipv4 用的人多,故障了立马就有人上报
    启用了 ipv6 的也是默认被各种“教做人”设置了 ipv4 优先,不管 ipv6 怎么样都能正常用
    设置了 ipv6 优先的立马被一些垃圾双栈网站“教做人”,各种访问失败,只能无奈设置 ipv4 优先

    较好比我自己的分发服务器虽然是套了双栈的 CDN ,因为技术 /能力等原因,ipv6 有时就是访问不了目录较深的资源
    tanglu
        4
    tanglu  
    OP
       2022-11-09 19:08:25 +08:00
    @ysc3839 "然后按照返回的顺序尝试连接,超时后连接下一个地址"
    如果是客户端双栈连接服务端单栈也是这样吗?
    比如我 vps 设置 ipv6 优先 访问纯 ipv4 网站 github.com ,客户端发现 ipv6 不通就换为另一个即 ipv4 访问吗?
    这样的话是不是 初始访问 /连接速度慢于 ipv4 优先呀?
    ysc3839
        5
    ysc3839  
       2022-11-09 19:10:42 +08:00
    @tanglu 域名没有 IPv6 地址的话,getaddrinfo 就只会返回 IPv4 地址,客户端也只会连接 IPv4 地址。
    tanglu
        6
    tanglu  
    OP
       2022-11-09 19:14:57 +08:00
    @totoro625 设置了 ipv6 优先的立马被一些垃圾双栈网站“教做人”>>会遇到什么吗?可以举个例子吗?

    套了 CDN 所有资源应该都走双栈 CDN 吧?这个情况感觉应该不会出现吧 “ipv6 有时就是访问不了目录较深的资源”
    eason1874
        7
    eason1874  
       2022-11-09 19:26:04 +08:00
    @tanglu 有些网站只是前端负载服务器有双栈,后端业务服务器没做 IPv6 兼容,所以不涉及 IP 地址的请求没问题,涉及了就会处理失败

    举个例子,你的网站没兼容 IPv6 ,所有需要 IP 的地方都是按 IPv4 格式去处理的,然后你用了云厂商的 CDN 并且开启 IPv6 支持,于是你的网站表面看起来支持 IPv6 ,大部分页面用 IPv6 访问也可以正常访问,但请求处理涉及 IP 地址的时候就失败了,因为 IP 格式不对
    tanglu
        8
    tanglu  
    OP
       2022-11-09 19:28:31 +08:00
    @eason1874 嗯嗯 学到了 谢谢老哥
    totoro625
        9
    totoro625  
       2022-11-09 21:00:49 +08:00
    我在 cloudflare 套了 backblazeb2 的域名,跟着网上的教程来的,没任何教程告诉我 ipv6 会出现问题

    设置了 ipv6 优先后,wget 任何一个文件都需要经历两次 ipv6 timeout ,累计下载一个文件要花费 260 秒
    下载两个文件就是 520 秒

    现在我有两个办法,1 是修改 ipv6 优先级,2 是删掉 CDN 的 ipv6 支持
    但是 Cloudflare 仪表板不支持关闭 ipv6 ,需要你去用 API 关闭 ipv6 ,所以我选择?骂一下 ipv6 垃圾
    tanglu
        10
    tanglu  
    OP
       2022-11-09 22:02:19 +08:00
    @totoro625 兄弟 我觉得你是不是设置的规则问题 我之前 R2 域名设置的“开启程序自动攻击模式”会阻止我的正常 IP 类似于这种报错
    --2022-11-09 13:40:53-- https://r2.smalljp.com/337-%E9%85%92%E7%B1%BB%E9%A3%9F%E5%93%81%E8%A1%8C%E4%B8%9A%E7%BB%87%E6%A2%A6%E7%BD%91%E7%AB%99%E6%A8%A1%E6%9D%BFUTF-8.rar
    Resolving r2.smalljp.com (r2.smalljp.com)... 104.21.54.147, 172.67.139.104, 2606:4700:3037::6815:3693, ...
    Connecting to r2.smalljp.com (r2.smalljp.com)|104.21.54.147|:443... connected.
    HTTP request sent, awaiting response... 503 Service Temporarily Unavailable
    2022-11-09 13:40:53 ERROR 503: Service Temporarily Unavailable.


    我建议你在防火墙添加一条域名规则,以 b2.tanglu.com 为例
    ![]( https://i2.100024.xyz/2022/11/09/zp4q20.webp)
    这样你可以根据拦截的 IP 看到你为什么会报错
    ![]( https://i2.100024.xyz/2022/11/09/10e4g0q.webp)
    感觉不是 CFipv6 的锅
    tanglu
        11
    tanglu  
    OP
       2022-11-09 22:03:48 +08:00
    10 楼那个规则图片应该是 “包含”
    totoro625
        12
    totoro625  
       2022-11-09 22:40:40 +08:00
    @tanglu #10 你这台机器是 ipv4 优先的,该域名有 ipv4 和 ipv6 ,优先请求了 ipv4 而不是 ipv6

    你要是 ipv6 优先那就是:
    Resolving ***... 2606:4700:3031::ac43:b59b, 2606:4700:3031::6815:126d, 172.67.181.155, ...
    Connecting to ***|2606:4700:3031::ac43:b59b|:443... failed: Connection timed out.
    Connecting to ***|2606:4700:3031::6815:126d|:443... failed: Connection timed out.
    Connecting to ***|172.67.181.155|:443... connected.
    HTTP request sent, awaiting response... 200 OK

    另外 ipv4 是正常拉取的,防火墙、权限等都没问题
    tanglu
        13
    tanglu  
    OP
       2022-11-09 22:46:24 +08:00
    @totoro625 我复制错了 这台机器只有 ipv4 ,我那个 ipv6 是你写的这个。原因就是开启了程序自动攻击模式
    tanglu
        14
    tanglu  
    OP
       2022-11-09 22:48:05 +08:00   ❤️ 1
    @totoro625 不对 我那个 ipv6 优先 显示的也不是
    Resolving ***... 2606:4700:3031::ac43:b59b, 2606:4700:3031::6815:126d, 172.67.181.155, ...
    Connecting to ***|2606:4700:3031::ac43:b59b|:443... failed: Connection timed out.
    Connecting to ***|2606:4700:3031::6815:126d|:443... failed: Connection timed out.
    Connecting to ***|172.67.181.155|:443... connected.
    HTTP request sent, awaiting response... 200 OK

    那可能确实是 CF ipv6 问题吧。
    另外 R2 不错的 如果 B2 套 CF 慢的话 可以试试 R2
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2821 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 13:58 · PVG 21:58 · LAX 05:58 · JFK 08:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.