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 。 |
2
XiLingHost 2022-11-09 18:53:08 +08:00 1
@ysc3839 这个是通过修改 /etc/gai.conf 实现的,原理就是你说的这样
|
3
totoro625 2022-11-09 19:01:29 +08:00
你都说了是纯 ipv6 网站和纯 ipv4 网站了
就怕那种既有 ipv4 又有 ipv6 的,因为 ipv4 用的人多,故障了立马就有人上报 启用了 ipv6 的也是默认被各种“教做人”设置了 ipv4 优先,不管 ipv6 怎么样都能正常用 设置了 ipv6 优先的立马被一些垃圾双栈网站“教做人”,各种访问失败,只能无奈设置 ipv4 优先 较好比我自己的分发服务器虽然是套了双栈的 CDN ,因为技术 /能力等原因,ipv6 有时就是访问不了目录较深的资源 |
4
tanglu OP @ysc3839 "然后按照返回的顺序尝试连接,超时后连接下一个地址"
如果是客户端双栈连接服务端单栈也是这样吗? 比如我 vps 设置 ipv6 优先 访问纯 ipv4 网站 github.com ,客户端发现 ipv6 不通就换为另一个即 ipv4 访问吗? 这样的话是不是 初始访问 /连接速度慢于 ipv4 优先呀? |
5
ysc3839 2022-11-09 19:10:42 +08:00
@tanglu 域名没有 IPv6 地址的话,getaddrinfo 就只会返回 IPv4 地址,客户端也只会连接 IPv4 地址。
|
6
tanglu OP @totoro625 设置了 ipv6 优先的立马被一些垃圾双栈网站“教做人”>>会遇到什么吗?可以举个例子吗?
套了 CDN 所有资源应该都走双栈 CDN 吧?这个情况感觉应该不会出现吧 “ipv6 有时就是访问不了目录较深的资源” |
7
eason1874 2022-11-09 19:26:04 +08:00
@tanglu 有些网站只是前端负载服务器有双栈,后端业务服务器没做 IPv6 兼容,所以不涉及 IP 地址的请求没问题,涉及了就会处理失败
举个例子,你的网站没兼容 IPv6 ,所有需要 IP 的地方都是按 IPv4 格式去处理的,然后你用了云厂商的 CDN 并且开启 IPv6 支持,于是你的网站表面看起来支持 IPv6 ,大部分页面用 IPv6 访问也可以正常访问,但请求处理涉及 IP 地址的时候就失败了,因为 IP 格式不对 |
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 垃圾 |
10
tanglu OP @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 的锅 |
11
tanglu OP 10 楼那个规则图片应该是 “包含”
|
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 是正常拉取的,防火墙、权限等都没问题 |
13
tanglu OP @totoro625 我复制错了 这台机器只有 ipv4 ,我那个 ipv6 是你写的这个。原因就是开启了程序自动攻击模式
|
14
tanglu OP @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 |