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

2022-11-09 18:39:55 +08:00
 tanglu
假设不考虑网速 丢包问题 vps 是双栈的
我感觉 linux 开启 ipv4 优先或者 ipv6 优先 这两个除了 IP 不同 好像没有什么区别
ipv4 优先可以打开纯 ipv6 网站
ipv4 优先也可以打开纯 ipv4 网站

我不是很懂,有没有大佬解答一下呀?
2711 次点击
所在节点    问与答
14 条回复
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
2022-11-09 18:53:08 +08:00
@ysc3839 这个是通过修改 /etc/gai.conf 实现的,原理就是你说的这样
totoro625
2022-11-09 19:01:29 +08:00
你都说了是纯 ipv6 网站和纯 ipv4 网站了
就怕那种既有 ipv4 又有 ipv6 的,因为 ipv4 用的人多,故障了立马就有人上报
启用了 ipv6 的也是默认被各种“教做人”设置了 ipv4 优先,不管 ipv6 怎么样都能正常用
设置了 ipv6 优先的立马被一些垃圾双栈网站“教做人”,各种访问失败,只能无奈设置 ipv4 优先

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

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

举个例子,你的网站没兼容 IPv6 ,所有需要 IP 的地方都是按 IPv4 格式去处理的,然后你用了云厂商的 CDN 并且开启 IPv6 支持,于是你的网站表面看起来支持 IPv6 ,大部分页面用 IPv6 访问也可以正常访问,但请求处理涉及 IP 地址的时候就失败了,因为 IP 格式不对
tanglu
2022-11-09 19:28:31 +08:00
@eason1874 嗯嗯 学到了 谢谢老哥
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
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
2022-11-09 22:03:48 +08:00
10 楼那个规则图片应该是 “包含”
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
2022-11-09 22:46:24 +08:00
@totoro625 我复制错了 这台机器只有 ipv4 ,我那个 ipv6 是你写的这个。原因就是开启了程序自动攻击模式
tanglu
2022-11-09 22:48:05 +08:00
@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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/893933

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX