本文比较杂乱,主要记录笔者学习与理解ipv4/v6的心路历程😇包括与chatgpt的聊天,以及笔者自己的测试记录,并且附上了比较优秀的关于ipv4/v6基础知识讲解的文章,欢迎参阅👏

优秀的文章
ipv6简介🙋
IPv6国内外优秀DNS推荐🙋
调整Linux的域名解析IP优先级🙋
使用公共dns64服务让纯ipv6设备访问ipv4网络资源🙋
如何在Linux上开启/禁用 IPv6🙋
一文让你搞懂: 路由器, 集线器, 交换机, 网桥, 光猫有啥区别?🙋
看完上面👆这个文章后与chatgpt的聊天内容🙋

与chatgpt的问答记录📝:

问:

广播ip是什么意思?其用途是什么

答:

广播IP(Broadcast IP)是指在一个网络中用于向网络上的所有设备发送广播消息的特殊IP地址。广播IP地址通常是网络地址的最后一个地址,例如对于IP地址192.168.0.0/24子网,广播IP地址为192.168.0.255。

广播IP的用途是在一个局域网或广域网中向所有设备发送消息,以便实现一对多的通信。通过发送广播消息,发送者可以将信息传递给网络上的所有设备,而不需要逐个发送给每个设备。

广播IP常用于网络中的服务发现、设备配置、通知和广告等场景。例如,DHCP服务器可以使用广播IP向网络上的所有设备提供IP地址分配;ARP协议可以使用广播IP来解析MAC地址;网络管理工具可以使用广播IP向所有设备发送配置或管理指令。

需要注意的是,广播IP地址只在本地网络中有效,它不能被路由器转发到其他网络。因此,广播消息的范围仅限于同一广播域(Broadcast Domain)内的设备。

问:

ipv6也是像ipv4那样去路由的吗?为什么说ipv6自带加密呢?ipv6类似127.0.0.1的地址是什么?

答:

IPv6和IPv4在路由方面有一些区别。

IPv6采用了更长的地址空间,使用128位地址,相比IPv4的32位地址更为庞大。IPv6的路由过程与IPv4类似,数据包通过路由器在网络中传递,每个路由器根据目标IPv6地址的前缀进行转发决策。IPv6的路由表维护了网络中不同子网的路由信息,以便正确地将数据包传递到目标地址。

关于IPv6自带加密的说法,IPv6并不直接提供加密功能。然而,IPv6支持IPsec(Internet Protocol Security)协议套件,该套件提供了一系列的加密和认证机制,用于保护IPv6通信的安全性和隐私性。IPsec可以在IPv6上层进行配置,实现数据包的加密、身份验证和完整性校验等安全功能。

IPv6的类似于IPv4中的"127.0.0.1"的地址是"::1",称为环回地址(Loopback Address)。环回地址用于在本地主机上进行测试和通信,类似于IPv4的环回地址。当一个应用程序尝试通过环回地址与同一主机上的其他应用程序进行通信时,数据包将被定向回到发送者,实现了本地回环的功能。

问:

路由器可以修改广播ip吗?如果路由器修改了,客户端是不是也需要进行相对应的更改

答:

路由器通常不会修改广播IP地址,因为广播IP地址是网络层的概念,由IP协议定义。广播IP地址是用于将数据包发送到一个网络中的所有设备。在IPv4中,广播IP地址是由特定的地址范围表示,例如,255.255.255.255是IPv4的广播地址。而在IPv6中,广播IP地址被称为多播地址,它们以特定的前缀和标识符表示。

一般情况下,路由器会根据网络层协议来处理广播IP地址,确保数据包能够正确地传递到网络中的所有设备。如果路由器对广播IP地址进行了更改,客户端设备可能无法正常接收广播消息。因此,在网络中修改广播IP地址是一项敏感的操作,需要谨慎考虑并确保所有相关设备都进行了相应的配置更改。

如果路由器修改了广播IP地址,客户端设备需要相应地调整其网络配置,以便正确地发送和接收广播消息。这可能涉及更改网络设置、更新DHCP服务器配置或手动配置客户端的广播地址。具体的操作取决于网络环境和设备的操作系统。

问:

in ipv6, what is "fe80" exactly? what is the usage for this net range? and you just said the route process of ipv6 is familliar with ipv4, what does it mean? plz answer me in Chinese. thank you

答:

在IPv6中,"fe80"代表链路本地地址(Link-Local Address)。链路本地地址是在IPv6网络中用于链路范围通信的特殊地址。它们只在特定的链路上有效,用于设备之间的通信,而不经过路由器。链路本地地址的前缀是"fe80",后面跟着设备的标识符。

链路本地地址的使用有以下几个主要目的:

  1. 链路发现和邻居发现:设备可以使用链路本地地址进行本地网络内的邻居发现和通信,例如发送路由器通告和邻居探测消息。
  2. 自动地址配置:设备可以使用链路本地地址进行IPv6地址的自动配置,例如使用状态无关地址自动配置(SLAAC)。
  3. 本地通信:设备可以使用链路本地地址与同一链路上的其他设备进行直接通信,无需通过路由器。

关于IPv6路由过程的类似性,是指IPv6与IPv4在路由方面的基本原理和机制是相似的,都涉及路由表的构建、路由选择、数据包转发等。但由于IPv6采用了新的地址结构和更复杂的协议机制,因此在细节上存在一些差异。但总体上说,IPv6的路由过程和IPv4的路由过程有一定的相似性。

请注意,尽管IPv6和IPv4在某些方面有相似之处,但它们是不同的网络协议。IPv6具有更大的地址空间、改进的安全性和支持新的功能,是未来互联网的发展方向。

问:

fe80 是不是相当于ipv4里面的192.168.1.1这样的子网地址呢?我知道fe80不是公网ipv6,但是如果我的网卡里出现了fe80,是不是意味着我可以访问ipv6网站?

答:

是的,你可以将链路本地地址(fe80::/10)类比为IPv4中的私有IP地址范围(如192.168.0.0/16、10.0.0.0/8等)。链路本地地址是在特定链路上使用的本地地址,用于设备之间的直接通信,类似于IPv4中的局域网通信。

如果你的网卡有一个fe80开头的链路本地地址,它意味着你的设备已经配置了IPv6,并且可以在本地网络中进行IPv6通信。但是请注意,链路本地地址只适用于本地通信,无法直接访问公网上的IPv6网站。要访问IPv6网站,你需要配置全球唯一的IPv6地址,并且网络中必须存在IPv6路由器来进行IPv6数据包的转发。

问:

“你需要配置全球唯一的IPv6地址,并且网络中必须存在IPv6路由器来进行IPv6数据包的转发”
这是什么意思?难道在ipv6中,我们不能像ipv4那样,即使我没有公网ipv4,但是用路由器分配的必入192.168.5.5这样的ip也可以访问ipv4网站,那么我用ipv6的fe80并不能访问ipv6网站而必须拥有公网ipv6才可以?

答:

在IPv4中,私有IP地址范围(如192.168.0.0/16、10.0.0.0/8等)用于局域网通信,但可以通过网络地址转换(NAT)将这些私有IP地址映射为公网IP地址,从而可以访问公网上的IPv4网站。

然而,在IPv6中,没有类似于IPv4中的私有IP地址范围和NAT的概念。每个IPv6设备都应该配置一个全球唯一的IPv6地址,这个地址是全球范围内唯一的,可以直接进行公网通信。如果你的设备只有一个链路本地地址(如fe80::/10),那么它只能在本地网络中与其他设备进行IPv6通信,无法直接访问公网上的IPv6网站。

要能够访问公网上的IPv6网站,你需要获得一个全球唯一的IPv6地址,这通常由你的互联网服务提供商(ISP)分配给你。此外,你还需要在网络中拥有IPv6路由器来进行IPv6数据包的转发,这样你的IPv6数据包才能在互联网上进行传输和交换。只有在满足这些条件的情况下,你才能够访问公网上的IPv6网站。

问:

你说ipv6没有nat的概念,那么ipv6是怎么做到路由的呢?

答:

在IPv6网络中,路由器使用IPv6路由协议(如OSPFv3、BGP等)来交换路由信息,并根据这些路由信息进行数据包的转发。IPv6的路由选择过程与IPv4类似,但具有一些特殊的特点:

  1. 路由前缀:IPv6地址通常包含一个64位的网络前缀,用于标识子网。路由器根据目标地址的前缀匹配来确定数据包的转发路径。

  2. 邻居发现:IPv6使用邻居发现协议(NDP)来获取和维护与邻近设备的连接。邻居发现协议允许设备发现和学习相邻设备的IPv6地址和MAC地址,以便进行直接通信。

  3. 路由表:路由器维护一个路由表,记录不同网络的前缀及其对应的出接口,以及下一跳的信息。当接收到数据包时,路由器会根据目标地址查询路由表,并选择合适的出接口进行转发。

  4. 路由选择协议:IPv6支持多种路由选择协议,如OSPFv3、BGP等。这些协议用于在不同的路由器之间交换路由信息,并通过算法计算最佳的路径。

总体而言,IPv6的路由过程与IPv4类似,通过路由协议、路由表和邻居发现等机制来实现数据包的转发和路由选择。然而,由于IPv6的地址空间更大且全球唯一,路由的处理方式也有所不同,以适应IPv6网络的特点。

PS"IPv6地址通常包含一个64位的网络前缀",这里可以参考下图mtr的结果,就明白啦:

问:

ipv4的路由协议有哪些?

答:

IPv4网络中常见的路由协议有以下几种:

  1. 静态路由:管理员手动配置的路由表项,用于指定特定目标网络的下一跳地址。

  2. RIP (Routing Information Protocol):基于距离向量的路由协议,使用跳数作为度量标准,并通过交换路由更新信息来学习网络拓扑。

  3. OSPF (Open Shortest Path First):基于链路状态的路由协议,通过交换链路状态信息来计算最短路径,并使用开销作为度量标准。

  4. EIGRP (Enhanced Interior Gateway Routing Protocol):Cisco私有的高级内部网关路由协议,结合了距离向量和链路状态的特点,具有快速收敛和低带宽消耗的特点。

  5. BGP (Border Gateway Protocol):用于在自治系统之间交换路由信息的外部网关协议,广泛应用于互联网中。

这些路由协议在实际网络中使用的广度和复杂度各不相同,根据网络规模和需求的不同选择合适的路由协议进行路由和转发。

问:

家用路由器一般用的DHCP属于路由协议吗?

答:

DHCP (Dynamic Host Configuration Protocol) 并不属于常规意义上的路由协议。它是一种用于自动分配 IP 地址和其他网络配置信息的网络协议。在家用路由器中,DHCP 通常用于自动分配 IP 地址给连接到路由器的设备,并配置相应的网络参数,如子网掩码、默认网关和 DNS 服务器等。

虽然 DHCP 在网络中起到了重要的作用,但它与路由协议的职责不同。路由协议主要负责学习和转发数据包,决定数据包从源地址到目标地址的路径。常见的路由协议如上述所提到的 RIP、OSPF、EIGRP 和 BGP。这些路由协议用于构建和维护路由表,并实现路由选择和转发功能。

因此,DHCP 和常规的路由协议在功能和用途上是不同的,尽管它们都与网络连接和通信有关。

问:

那家用路由器一般用的ipv4路由协议是什么?

答:

在家用路由器中,常用的路由协议是静态路由和默认路由。

  1. 静态路由:静态路由是手动配置的路由表项,管理员根据网络拓扑和需求,手动指定目的网络和下一跳路由器的地址。静态路由表项在路由器上设置并保持不变,用于指定数据包的转发路径。

  2. 默认路由:默认路由是一种特殊的静态路由,用于指定当路由表中没有匹配的目的网络时,数据包的转发路径。默认路由通常设置为指向互联网出口的下一跳路由器,用于将所有未知目的网络的数据包转发到互联网。

家用路由器通常使用这些简单而灵活的路由策略,因为它们的网络规模相对较小,且不需要复杂的动态路由协议来学习和维护路由信息。

问:

ipv6端口数量和ipv4一样多吗?为什么

答:

IPv6与IPv4在端口数量方面有所不同。

在IPv4中,端口号是一个16位的无符号整数,因此可以表示2^16(65536)个不同的端口号。这些端口号用于标识不同的网络应用或服务。

而在IPv6中,端口号是一个32位的无符号整数,可以表示2^32个不同的端口号。这意味着IPv6拥有更多的端口号可供分配,远远超过IPv4的数量。

然而,需要注意的是,端口号的分配不仅取决于协议本身,还受限于实际的应用和操作系统。不同的应用程序可能会占用不同的端口号,而操作系统也可能会对一些端口号进行保留或限制使用。因此,虽然IPv6拥有更多的端口号可用,但具体的端口分配仍然受到应用程序和操作系统的限制。

问:

linux如何查询ipv6路由表?

答:

在Linux上,您可以使用ip命令来查询IPv6路由表。

使用以下命令查看完整的IPv6路由表:

ip -6 route show

这将显示当前系统上的所有IPv6路由信息,包括目标地址、下一跳、路由类型等。

您也可以根据特定的目标地址查询IPv6路由表,例如:

ip -6 route get <目标地址>

<目标地址>替换为您要查询的具体IPv6地址。该命令将显示与目标地址匹配的最佳路由信息。

请注意,查询IPv6路由表可能需要root或具有适当权限的用户。

问:

"fd7a"这种开头的ipv6是什么?

答:

"fd7a" 是 IPv6 地址的一种特殊前缀,用于用于 Unique Local Address (ULA)。

ULA 是一种用于在私有网络中分配全局唯一的 IPv6 地址的机制。它类似于 IPv4 中的私有地址范围(例如 192.168.0.0/16),可以在本地网络中使用,而不需要向互联网注册或申请。

ULA 的地址前缀通常是 "fd" 后跟一个 8 位的标识符,其中 "fd" 表示该地址是 ULA。标识符的选择是随机的或根据特定规则生成的。

"fd7a" 是 "fd" 前缀的一个示例,它可以用于在私有网络中分配全局唯一的 IPv6 地址。每个网络管理员可以选择不同的 "fd" 前缀来确保在全球范围内的唯一性。

问:

linux如何开启ipv6支持

答:

要在 Linux 上启用 IPv6 支持,可以按照以下步骤进行操作:

  1. 打开终端或命令行界面。
  2. 编辑网络配置文件,具体文件位置可能因 Linux 发行版而异。以下是几个常见的配置文件路径:
    • Ubuntu/Debian:/etc/network/interfaces
    • CentOS/RHEL:/etc/sysconfig/network-scripts/ifcfg-<interface><interface> 是网卡名称,如 eth0
  3. 在配置文件中找到要启用 IPv6 的网卡配置部分。
  4. 确保以下内容存在或按需添加:
    • IPV6_METHOD=auto:自动获取 IPv6 地址(使用 DHCPv6)
    • IPV6INIT=yes:启用 IPv6
  5. 保存并关闭配置文件。
  6. 重启网络服务,使配置生效。可以使用以下命令之一:
    • Ubuntu/Debian:sudo systemctl restart networking
    • CentOS/RHEL:sudo systemctl restart network
  7. 确认 IPv6 是否已成功启用。运行 ifconfig 或者 ip addr 命令,在网卡配置信息中查找 IPv6 地址。

请注意,确保你的网络环境和网络提供商支持 IPv6,并且你的网络设备(如路由器)已正确配置和启用了 IPv6。

问:

10.0.0.1/8 这是什么意思?它的子网掩码是255.0.0.0h还是255.255.255.0

答:

"10.0.0.1/8" 是一个CIDR表示法的IPv4地址和子网掩码的组合。它表示一个IPv4地址范围,其中 "10.0.0.1" 是网络的起始地址,"/8" 表示子网掩码的长度。

子网掩码用于确定网络中网络地址和主机地址的边界。"/8" 表示子网掩码的前8位为网络部分,后24位为主机部分。这意味着地址范围从 "10.0.0.0" 到 "10.255.255.255",共有2^24个主机地址,可以用于构建具有约1677万个可用主机的大型网络。

对于表示为 "10.0.0.1/8" 的CIDR地址,子网掩码是255.0.0.0。CIDR表示法中的前缀长度(/8)指示了子网掩码中连续的网络位的数量,即前8位为网络部分,后24位为主机部分。因此,对于该CIDR地址,子网掩码为255.0.0.0,表示前8位为网络部分,后24位为主机部分。

问:

ipv6不是全球唯一的吗?为什么还可以通过这个指令自己手动分配ipv6?sudo ip -6 addr add 2001::1/64 dev enp0s3
是不是类似ipv4,比如我有一个地址1.1.1.1,这实际上已经是别人的公网ipv4,但是我依然可以在我的内网指定这个地址,对吗

答:

IPv6的地址空间确实是全球唯一的,每个IPv6地址都应该是唯一的。然而,你提到的命令 "sudo ip -6 addr add 2001::1/64 dev enp0s3" 是一种手动分配IPv6地址的方式。在本地网络环境中,你可以手动分配私有的IPv6地址,就像你在内网中分配私有的IPv4地址一样。

类似于IPv4中的私有地址范围(例如,192.168.0.0/16,10.0.0.0/8等),IPv6也有私有地址范围,例如,fc00::/7和fd00::/8。在本地网络中,你可以使用这些私有的IPv6地址进行内部通信,而不涉及互联网路由。

需要注意的是,这些手动分配的私有IPv6地址在全局范围内是不可路由的,它们只能在本地网络中使用。与IPv4类似,当你连接到互联网时,你的路由器会为你的网络分配全局唯一的IPv6地址,以便与其他互联网上的设备进行通信。

问:

我能否指定本机的ipv4为一个任意公网ip,比如说8.8.8.8
这个ip已经是别人的了,但是如果我在自己的内网中,不与外界互通,是不是也可以使用8.8.8.8这个ip呢?

答:

在一个本地网络环境中,你可以在内网中使用任何IPv4地址,包括已被其他组织使用的公网IPv4地址,只要在你的内网中不需要与外部网络进行通信。

在这种情况下,你可以在你的网络设备(如路由器或计算机)上手动配置120.76.61.253作为内部IP地址,以便在你的内网中使用。只要该地址在你的内网中是唯一的,不会与其他设备冲突,你就可以使用它。

需要注意的是,当你的内网需要与外部网络进行通信时,你不能使用已被其他组织分配的公网IP地址。在这种情况下,你应该使用由你的互联网服务提供商分配的合法公网IP地址。

问:

Unique Local Address可以和互联网通信吗?

答:

Unique Local Address (ULA) 是用于本地网络的全局唯一地址,其范围为fc00::/7。ULA不被设计用于直接与互联网通信,而是用于内部网络中的通信,以提供全局唯一性和避免与其他组织的地址冲突。

由于ULA不是为互联网路由设计的,因此路由器在互联网上不会直接路由到ULA地址。如果在内部网络中需要与互联网通信,你需要使用网络地址转换(NAT)或其他相关技术来将ULA地址转换为合法的公网IPv6地址。这样才能实现与互联网的通信。

需要注意的是,使用ULA地址进行互联网通信需要谨慎,并确保网络环境和配置正确。通常情况下,建议使用由互联网服务提供商分配的合法公网IPv6地址进行与互联网的通信。


阶段性理解总结(2023.7.11)


雨过天晴,在与chatgpt聊天以及看了若干文章后,可以做出如下总结:

  1. ipv4和ipv6除了位数不一样(一个是32位,一个是128位),其还有可以使用的端口数量不一样,一个是2162^{16}个,一个则是2322^{32}个。不过对于ipv6而言,能否使用超过65536的端口,也跟应用、操作系统有关。

  2. ipv6的路由方式与ipv4不太一样;由于ipv4地址枯竭,所以很多尤其是像中国大陆的网民使用的都是路由器套路由器,也就是所谓的NAT技术,也就是通过这种转发来实现内网设备与互联网的传输。而ipv6则主打一手直连,所有设备尽可能做到端对端。这两者具体协议上的区别可以查询上面的与chatgpt问答系列。所以,由此不同目的导向为出发点,ipv6有一些和ipv4不同的概念,其中让笔者最为留意的便是fe80fc00::/7这两个网段。在ipv4中,实际上诸如192.168.0.0/24这种网段,其既可以用来与内网设备通讯,也可以被NAT转发之后去与外网通讯。而在ipv6中,fe80网段仅可在同一链路中连接其他设备,相当于fe80网段开启了你的ipv6之旅,但没完全开启哈哈哈😂这个fe80因此就被称作为Link-local address... 而fc00这种网段又是咩意思呢?其名称是Unique Local Address,独一无二的内网地址。这是用来在专用内部网络进行通讯的,比如局域网,或者tailscale这种软件。这种ULA地址,是不会在互联网上被路由的,所以笔者猜测其在特属网络环境下是根据ipv6路由表来route这些ULA地址的。所以,从这个角度来说,其类似于ipv4的192.168.0.0/16但是,其还是不一样的,因为ipv6要端对端,而不是NAT,所以才把之前的ipv4的内网拆分成fe80和fc00::/7这两个部分

  3. 你必须有公网ipv6地址,才能够去访问ipv6世界互联网。ipv6虽然中国大陆基本上都开通了,但是其主要还是想允许用户去连接ipv6互联网站等等,因为ipv6主打一手端对端,如果你没有一个公网ipv6,那么你是无法访问其他的ipv6网站的。经过笔者测试,国内运营商(至少是校园网,校园网就算把22端口转成比如2222依然不行😓,云服务器直接22是可以的,家用宽带直接22不行,转换后的比如2222这种还没测试;需要注意的是,家宽动态分配的ipv4笔者记得应该22端口是直接可以用的没被禁,所以大概率家宽也不行...)应该是禁止了主动探测ipv6端口,所以,你如果想远程直接ssh你家里的机器,那便是不可能的了😭但是,也可以使用一些技术手段,比如UPnP技术等等,实现类似ipv4内网穿透(实际上就是),从而实现ipv6"被动"连接,让其端口能够被探测到并establish connection...

  4. 关于使用ipv6,

  • 对于ssh,其应该设置AddressFamily any,这代表sshd将监听ipv4同埋ipv6。当然,具体连接的时候请开启sshd的防火墙白名单;如果还连不上,可以先使用nc去测试端口开放的情况,再不行,可以可视化+强制ipv6ssh登陆,看一看debug一下,指令:ssh -v -6 ..... 针对ssh服务器,如何设置针对ipv6的规则呢?废话不多说,编辑/etc/ssh/sshd_config,直接看下面的例子就明白啦
Match Address 2001:250:3002::/48
  PasswordAuthentication yes
  • 对于域名解析,应当解析为AAAA记录,这个就代表ipv6解析。当然笔者发现,有一些机器,比如orchid, aureum这种,直接ping+domain就行了,不用管是不是ipv4还是ipv6;但是有一些机器,比如kunlun,MacOS等等,则需要使用指令ping6+domain才可以。
  • 对于用DNS解析ipv6地址,可以0参考优秀文章推荐中的"国内外IPv6的DNS"自行在/etc/resolv.conf里添加即可。需要注意的是,即使你的列表里完全没有ipv6的解析服务器,依然是可以解析的,因为现在基本运营商基本配置了默认的ipv4转发解析ipv6的办法,只不过慢一点罢了...如果你想优先用ipv6的DNS来解析ipv6域名,那就把这玩意放在最前面,比如下面这个样子:
❯ cat /etc/resolv.conf
nameserver 240c::6666

nameserver 211.66.128.1
nameserver 8.8.8.8
nameserver 114.114.114.114
#nameserver 202.116.64.1

不过笔者测试了一下,除了openwrt系统非常快,在linux机器上,不管怎么设置,ping或者ping6返回的结果都慢的一批,不知道咋肥四O_o,不过ssh等其他行为感觉还是不错的,先不管啦

  1. 最后,再次post上文章一开始优秀链接推荐的那篇文章里的图,以便未来加深理解反复查看的时候更方便一些:

心得记录20230713

今天在用orchid用ssh连接ipv6机器的时候,一直弹no route to host,但是ping又能ping的通,搞不清楚是什么情况....最后,使用指令ip -6 route show,看到ipv6路由表里的default(划重点),这里有两个出口,很莫名其妙的,对比aureum机器,把第二个莫名其妙的出口删除了,一切就ok了...真的是cmaksdjaskll1231233*&989...😠
所以,以后无论是ipv4还是ipv6,如果出现no route to host,甭管能不能ping通啥的(这东西走的协议和通道与tcp/udp不太一样,所以可能是因为这个导致了不同),先去查路由表,往外走的基本上都是default路由表,在这里一般就可以找到想要的答案了😓

配置记录20230714

今天参考教程Oracle Cloud (甲骨文云)为实例启用IPv6网络来实现为甲骨文机器分配ipv6,其中需要注意的是,该教程还少了两个步骤:

  1. ipv6 prefix要自己点进子网那里,手动去启动(教程可能有点过时了,毕竟现在是2023七月了)
  2. 还需要手动dhclient -6一下为小🐔获取已经分配好的ipv6

在成功实现后,发现arm-ubuntu,以及x86/64-centos7均可以正常okkk,但是centos8(oracle os?)系统屡屡出现问题,所以将针对centos8的调教记录整理下来如下,以供未来参考:

  1. 由于缺失了/etc/sysconfig/network-scripts/*下的文件,所以安装一下:
 yum install network-scripts -y
  1. 安装完后,虽然可以使用dhclient -6来分配ipv6了,但是ipv6的路由表却不全,这是因为网卡信息缺失导致的:发现/etc/sysconfig/network-scripts/*路径下依然没有关于ens3网卡的信息,所以我们简单粗暴点,手动创建即可,ifcfg-ens3的模版如下:
# Edied mannually by dingding, 20230714
NAME="ens3"
DEVICE="ens3"
ONBOOT=yes
NETBOOT=yes
UUID="031d52f9-176a-4412-afa5-ef345a97a7e9"
IPV6INIT=yes
BOOTPROTO=dhcp
TYPE=Ethernet
NM_CONTROLLED=no

其中比较需要注意的是UUID,这玩意怎么获取呢?使用如下命令即可:

systemctl start NetworkManager
nmcli con

即可查询到对应网卡的UUID
3. 手动编辑创建ifcfg-ens3之后,执行如下指令:

#吊起ens3网卡
ifup ens3
#如果没获取ipv6,则输入如下指令:
dhclient -6

然后查看ipv6的路由表ip -6 route show,便会发现里面出入口的情况就恢复正常了😄。
4. 需要注意的是,我们这里使用了dhclient来分配指定ip,其也会在每次重启后重写/etc/resolv.conf,所以对于使用DNS解锁的服务如openai,奈飞等等便不行了。同时,之前通过dnclient分配的ipv6也掉了;并且,笔者发现重启机器后,重新分配ipv6之后,还需要ifup ens3吊起这个网卡,如果不这么做的话,就会导致ipv6的路由表又回到之前那样了...所以比较好的解决办法就是,别重启了😓如果没办法的话,简单粗暴非优雅点,那就每次重启后记得操作如下:

  • 吊起ens3网卡,ifup ens3
  • 分配ipv6,dhclient -6
  • 重启NetworkManager, systemctl restart NetworkManager
  • 编辑/etc/resolv.conf 文件,改回dnsmasq分配的127.0.0.1即可

配置记录20230715

今天发现,对于同样都是centos7的机器astroslacker,其配置好dhclient -6后,ipv6路由表依旧没有default出口,但是/etc/sysconfig/network-scripts/*又一切正常,不知怎么回事,头疼哈哈哈,后面再解决啦
上面的问题解决方案: 由于astroslacker其实配置起来的东西,除了没有default gateway,其他的都一切正常,所以去参考了隶属同样区域的🇨🇭主机,发现果然这两个玩意的ipv6 default gateway是一模一样的(因为在一个内网嘛),索性直接按照其的结果添加至astroslacker啦,一切正常...添加指令如下:

  ip -6 route add default via fe80::200:17ff:fe1a:827d dev ens3

另外,针对上面每次开启都需要dhclient -6给机器重新获取ipv6,其实可以直接在文件/etc/sysconfig/network-scripts/ifcfg-ens3里添加一行"DHCPV6C=yes"就行了,这样就一切okkk了不用每次重启都输入一遍了😓
这样搞定之后,添加nginx的ipv6的listen端口,并且配置好AAAA解析记录,即可实现ipv4+6都支持的网页啦😂


对于纯ipv6的小🐔,可以使用DNS64技术(其实就是转发啦,让你可以访问ipv4的资源),可以参考优秀链接里面的东西哦😁

配置记录20230719

配置caddy使用ipv4和ipv6的时候,发现caddy是自己自动选取的,比如你把域名abc.com的A记录和AAAA记录都解析为test.abc.com,那么此时用caddy的话,对方来的如果是ipv6访问的,那么caddy就走ipv6,如果是ipv4那么就自动切ipv4
在网上查询了一下,发现说可以使用bind 0.0.0.0这样指定caddy必须走ipv4(反之亦然),不过好像没卵用😓,所以如果想区分,最简单的办法那就是把A记录和AAAA记录区分一下吧,比如A记录是test.abc.com,AAAA记录是test6.abc.com即可

心得记录20230726

如果你想当你的机器仅用ipv4去连接某个域名,比如ddog.host,那么应该怎么做呢?笔者进行了一波尝试,貌似找到了一些可行的办法(母鸡😓)。

众所周知,即使你在dnsmasq里设置了address=/ddog.host/11.22.33.44,但是你其他域名也需要解析呀,所以一般还会设置server=8.8.8.8来让其他域名顺利解析,不过在支持ipv6的机器上(在有些ipv4only的机器上也是),你是用google的DNS解析出来的可就不仅仅是ipv4了,还有ipv6,所以即使你使用了address的directive,你仅仅改变了ipv4的结果,依然还是会获得ipv6的地址...

所以你如果想获得仅ipv4的连接结果,思路是你可以使用一个ipv4only(最好,如果是双栈的也不是不行,可以尝试一下)的机器,在上面搭建一个dnsmasq服务器,然后你把你机器的dnsmasq配置里的server=/ddog.host/ipv4,然后你把你机器的dnsmasq配置里的address=/ddog.host/ipv4,这里的ipv4改成ipv4only的机器的ip,那么便只给你返回ipv4的解析结果了(缺陷很明显,只返回了一个地址,当然你可以手动添加一大堆,不过这些都是固定的,如果目标网站修改了解析记录,那么你又连不上了😓),笔者已经成功实现了chat.openai.com的仅ipv4连接,有兴趣可以参考笔者的另一篇文章:🙋使用Dnsmasq+Sniproxy来解锁chatgpt或其他流媒体

PS: 笔者猜测这一套东西的底层逻辑是这样的,
在支持ipv6(以及一些机器,比如london)的机器上,这种DNS的解析只会"主动请求一次",ipv4和ipv6各一次;就算你设置了本地dnsmasq里address=/ddog.host/11.22.33.44,这只是判定ipv4获取了结果,而且不是“主动请求”,服务器依然会去主动请求ipv6的解锁,于是调用了通用域名的解析server=8.8.8.8.... 而使用上面👆说的用类似london这种机器搭建dnsmasq服务器,然后在这上面再指定address=/ddog.host/11.22.33.44,同时你本地设置server=/ddog.host/london的ipv4,此时系统判定无论是ipv4还是v6都去用london上架设的DNS去解析“主动请求”过了,于是就不管了,从而这样过滤掉了ipv6的结果。

与gpt学习记录20231016

问:

对于192.168.0.0/22这个网段,网络地址是多少?广播地址又是多少?这个怎么判断呢

答:

对于子网 192.168.0.0/22,我们可以基于其子网掩码来确定网络地址和广播地址。

  1. 网络地址:

    对于子网 192.168.0.0/22,网络地址就是给出的地址,即 192.168.0.0

  2. 广播地址:

    要确定广播地址,我们需要查看子网掩码的位数,并将其主机部分(即CIDR值之后的所有位)都设置为1

    子网掩码 /22 在二进制中表示为:

    11111111.11111111.11111100.00000000
    

    这意味着前22位是网络部分,而后10位是主机部分。为了找到广播地址,我们将主机部分的所有位设置为1

    11111111.11111111.11111111.11111111
    

    这个二进制数字对应的十进制形式是 192.168.3.255,所以这就是广播地址。

总结:

  • 对于子网 192.168.0.0/22:
    • 网络地址是 192.168.0.0
    • 广播地址是 192.168.3.255

为了判断网络和广播地址,你需要知道子网掩码的位数(CIDR值),然后根据这个值来确定网络部分和主机部分。网络地址是子网中的第一个地址,广播地址是子网中的最后一个地址。

问:

广播地址可以更改吗?还有,广播地址是用来干嘛的?请给我举例说明

答:

  1. 广播地址是否可以更改?

    广播地址是根据网络地址和子网掩码自动计算出来的,并不能单独被更改。但是,你可以通过更改网络地址或子网掩码来间接地更改广播地址。例如,如果你更改子网掩码,这将影响子网的大小,从而影响广播地址。

  2. 广播地址的用途:

    广播地址用于在一个子网内向所有设备发送信息。当一个设备需要向子网内的所有其他设备发送数据时,它会将数据发送到广播地址。所有子网内的设备都会接收并处理发送到广播地址的数据。

  3. 实例说明:

    • ARP请求:当一个设备需要知道另一个设备的MAC地址(例如,它知道目标的IP地址,但不知道对应的MAC地址),它会在子网上发送一个ARP请求。这个请求是发送到广播地址的,因为发送设备不知道目标设备的确切地址。所有设备都会看到这个请求,但只有与请求中的IP地址匹配的设备会响应。

    • DHCP发现:当一个设备加入网络并希望从DHCP服务器获取IP地址时,它会发送一个DHCP发现消息。这个消息被发送到广播地址,因为设备还没有IP地址,所以它不知道DHCP服务器的地址。DHCP服务器会看到这个发现消息,并给设备分配一个IP地址。

    • 某些应用和服务:有些应用和服务可能需要在启动时向子网内的所有设备广播消息,以通知它们的存在或请求某些信息。

总之,广播地址允许设备在不知道目标确切地址的情况下与子网内的所有其他设备通信。但这也意味着广播消息可能会产生额外的网络流量,因为所有设备都必须处理它们,即使这些消息可能与大多数设备无关。因此,广播应该谨慎使用,以避免网络拥塞。


以下属于精!

问:

ipv6中 fe08这个网段到底是干嘛的?可否类比一下ipv4?以及,fd7a这种又是干嘛的?也类比一下

答:

IPv6 引入了多种新的地址范围以满足不同的用途。下面我们将详细介绍 fe08fd7a 这两个范围,并提供与 IPv4 的类比。

  1. fe08:

    实际上,IPv6 中通常用于链路本地地址的前缀是 fe80,而不是 fe08。链路本地地址类似于 IPv4 的 APIPA 地址(169.254.0.0/16 范围)。

    用途:链路本地地址主要用于单个网络段或链接的通信。这些地址不应该被路由到其他网络。

    IPv4 类比:IPv4 的 169.254.0.0/16 地址范围。当设备不能从 DHCP 服务器获得地址时,它可能会自动配置一个这样的地址。

  2. fd7a:

    fd7a 是一个随机生成的 IPv6 唯一本地地址(ULA)的开头部分。完整的 ULA 地址通常以 fd 开头,后面跟随40位随机数,形成一个/48前缀。

    用途:唯一本地地址用于组织内部的通信,不应该被路由到公共互联网。它们为组织提供了一个大量的私有地址空间,不需要与其他组织协调。

    IPv4 类比:IPv4 的私有地址空间,如 10.0.0.0/8172.16.0.0/12192.168.0.0/16。这些地址是为内部网络设计的,不应该直接出现在公共互联网上。

总结:fe80fdxx 是 IPv6 地址的两个重要范围,用于特定的局部通信。它们与 IPv4 的某些地址范围有相似的用途,但提供了更大的地址空间和更灵活的配置选项。

问:

fd7a 是一个随机生成的 IPv6 唯一本地地址
也就是说在本地网络中唯一,但是如果是其他的网络,比如本地是A,另外一个内网是B,那么A和B中可以拥有两个一模一样的fd7a的地址对吗?

答:

是的,你理解得对。fdxx 地址是唯一本地地址(ULA),这意味着它们在给定的本地网络中应该是唯一的。但是,由于这些地址是为私有网络设计的并且不会在公共互联网上路由,所以不同的组织或网络可以使用相同的 fdxx 地址。

例如,组织A和组织B都可以在其内部网络中使用相同的 fd7a:xxxx:xxxx::/48 地址范围,因为这些地址不会在互联网上相互冲突。但是,如果组织A和组织B在未来决定通过VPN或其他方式连接其网络,那么地址冲突可能会成为问题。为了避免这种潜在的地址冲突,建议组织在选择 fdxx 地址时使用随机生成的40位值,从而大大降低地址重复的风险。

总的来说,虽然两个独立的内部网络可以使用相同的 fdxx 地址,但为了避免未来的地址冲突,最好使用随机方法生成这些地址。

问:

址时使用随机生成的40位值
你给的例子prefix是48,这里应该用40还是48呢?

答:

对不起,我造成了混淆。让我澄清:

当我们说到IPv6的唯一本地地址(ULA),前缀通常是fd,后面跟随一个40位的随机数,这样总共是fd + 40位 = 42位。这确保了在不同的网络中生成的地址是唯一的,并且减少了地址冲突的风险。

但是,当我们通常谈论给组织分配的子网时,我们经常使用/48前缀,这意味着网络部分是48位。这为组织提供了足够的空间来进一步细分其网络。

所以,对于ULA地址,你会有如下结构:

  • fd(固定的2位)
  • 40位随机生成的值(确保ULA的唯一性)
  • 剩下的部分用于组织内的子网划分和主机地址

因此,当我提到随机生成的40位值时,我是指确保唯一性的那部分。但当我们讨论子网分配时,我们通常从这个/48前缀开始。

问:

IPv4 的 APIPA 地址是什么?是干嘛用的?

答:

APIPA(Automatic Private IP Addressing)是一个由Microsoft为Windows操作系统实现的功能。当一个设备设置为从DHCP服务器自动获取IP地址,但由于某种原因无法联系到DHCP服务器时,APIPA会自动为该设备分配一个IP地址。

APIPA的特点:

  1. 地址范围:APIPA为设备分配的IP地址在 169.254.0.1169.254.255.254 范围内。子网掩码通常是 255.255.0.0

  2. 无需手动配置:设备会自动检测网络上是否已经有其他设备使用了同样的APIPA地址,以确保不会发生地址冲突。

  3. 局限性:使用APIPA地址的设备只能与同一子网内的其他设备通信。它们不能访问互联网或其他子网,因为APIPA地址不会被路由器路由到其他网络。

APIPA的用途:

APIPA主要在以下情境中有用:

  1. DHCP服务器故障:如果DHCP服务器暂时不可用或出现故障,设备可以自动获得APIPA地址,使它们能够继续在本地网络上通信。

  2. 小型网络:对于没有DHCP服务器的小型家庭或办公室网络,APIPA提供了一个简单的方法,使设备能够自动分配IP地址并相互通信。

  3. 故障诊断:如果你的设备获得了一个 169.254.x.x 地址,这可能意味着它无法联系到DHCP服务器。这可以作为一个故障诊断的线索。

总之,APIPA是一个自动IP地址分配机制,用于在没有DHCP服务器的情况下为设备提供IP地址。虽然这提供了一个临时的通信解决方案,但在大多数正常的网络环境中,设备应该从DHCP服务器获得一个有效的IP地址。

问:

刚刚问你的40和48的问题,ipv6最终是128位,那40+48也不是128呀,怎么理解?

答:

对不起,我之前的解释确实存在一些混淆。让我们来澄清IPv6的唯一本地地址(ULA)的结构。

IPv6地址总共是128位。对于ULA(通常以fd为前缀),其结构如下:

  1. 前缀:首先是fd,这是8位。
  2. 随机生成的全局ID:接下来的40位是随机生成的,确保在不同的网络中地址的唯一性。
  3. 子网ID:在实际部署时,网络管理员通常使用接下来的16位来进行子网划分,这样组织就可以有65536个子网。
  4. 主机部分:剩下的64位是用于单个设备或主机的,确保在同一子网内的唯一性。

加起来就是:8位(前缀) + 40位(随机全局ID) + 16位(子网ID) + 64位(主机部分) = 128位。

所以,当我们提到/48前缀时,我们是指前8位的fd加上随机生成的40位全局ID,以及用于子网划分的16位。这样,每个组织可以有一个唯一的/48前缀,并可以进一步细分为多个子网。

问:

ipv6的gateway概念和ipv4区别是什么?比如我的ipv4中机器是192.168.1.122, 网关是192.168.1.1,那么我的数据会发送到192.168.1.1然后进行NAT,从而访问外部,这个过程描述的对吧?这个过程对于ipv6应该是怎样的呢?比如ipv6的地址,prefix是48,那么在这个网段下的ipv6请求如何去访问互联网呢?

答:

首先,你描述的IPv4过程是对的。在你给出的例子中,当你的设备(IP为 192.168.1.122)试图访问外部网络时,数据首先会被发送到网关(IP为 192.168.1.1)。如果你的网络配置了NAT(网络地址转换),那么网关会将源IP地址(即你的设备的内部IP)更改为其公共IP地址,并将数据发送到互联网。当响应返回时,NAT会根据之前的映射将数据恢复到原始的内部IP地址,并将其发送回你的设备。

现在,让我们谈谈IPv6:

  1. Gateway的概念:在IPv6中,网关的概念与IPv4相似。网关仍然是一个设备,它知道如何将数据从一个网络转发到另一个网络。

  2. NAT和IPv6:与IPv4不同,IPv6设计时考虑了一个非常大的地址空间,因此每个设备都可以有一个全球唯一的地址。这意味着在理论上,IPv6不需要NAT来解决地址不足的问题。然而,NAT仍然在某些情况下被使用,尤其是出于安全和隐私的考虑。

  3. 访问互联网:假设你有一个IPv6地址,它的前缀是/48(这意味着你有16位用于子网划分)。在这种情况下,你的设备会有一个特定的IPv6地址,和一个默认的网关地址。当你的设备需要访问互联网时,它会将数据发送到这个默认的网关。与IPv4相似,这个网关知道如何将数据路由到外部网络。

  4. 地址和路由:与IPv4类似,IPv6也使用路由表来确定如何转发数据包。如果数据包的目的地不在本地网络上,它会被转发到默认网关。从那里,它会根据IPv6的路由规则被正确地转发到目的地。

总的来说,IPv6的基本路由和转发概念与IPv4相似,但由于其更大的地址空间和不再需要NAT的设计,其实现细节存在一些差异。

问:

假设你有一个IPv6地址,它的前缀是/48(这意味着你有16位用于子网划分)
这是什么意思?为什么是16位,ipv6的长度不是128吗

答:

对不起,我理解了你的疑问。让我更明确地解释。

IPv6的地址长度确实是128位。当我们说一个地址有/48前缀时,这意味着前48位用于网络标识,而剩下的80位可以用于其他目的,如子网划分和主机标识。

如果你有一个/48前缀的IPv6地址块,这意味着你可以在这个块内使用16位进行子网划分,因为48(前缀)+ 16(子网)= 64。这将允许你创建65536个子网,每个子网都有/64前缀。对于每个/64子网,你还有64位来分配给具体的主机或设备。

所以,当我说“这意味着你有16位用于子网划分”时,我是指你可以使用这16位来在你的/48地址块内创建多个子网。每个子网都可以容纳大量的IPv6主机或设备。

问:

为什么一定是64?

答:

使用 /64 为每个子网的标准前缀长度在IPv6设计中是有意为之的,基于以下几个原因:

  1. 简化子网设计:使用固定的 /64 前缀为子网可以简化网络设计和计划。无论子网大小如何,每个子网都有足够的地址空间来容纳任何可能需要的设备。这消除了在IPv4中经常出现的地址不足或子网过大的问题。

  2. SLAAC(无状态地址自动配置):IPv6引入了SLAAC,这是一种让设备自动为自己分配一个IPv6地址的方法。在SLAAC中,设备使用其MAC地址的一部分来生成IPv6地址的最后64位。这需要子网长度为 /64 才能正常工作。

  3. 易于管理和理解:固定的 /64 子网长度使得地址更易于读取和理解,特别是当你考虑到SLAAC和其他IPv6特性时。

  4. 安全和隐私考虑:使用 /64 子网可以支持一些隐私增强的地址生成方法,这些方法可以定期更改地址的主机部分以提高用户隐私。

  5. 广泛的地址空间:尽管 /64 子网为每个子网提供了大量的地址,但IPv6的地址空间是如此之大,以至于这种分配方式不会导致地址浪费或不足。

尽管 /64 是推荐的子网长度,但在某些特定的情况和应用中,可能会使用其他长度的子网。然而,在大多数场景中,特别是在局域网和家庭网络中, /64 是标准和推荐的子网长度。

问:

ipv4的nat中,比如网关内网地址是192.168.1.1, 外网是172.16.209.252,当数据开始经过nat出去的时候,会分配网关的端口来实现路由对吧?这个端口是随机分配的吗?当数据从远处通过若干nat返回回来的时候,它怎么知道这个数据是给哪个内网的呢?以及,这种分配的nat端口,为什么我检测端口连通性的时候是不让我连通的?是不是因为其不是listen那种性质的?

答:

你的问题涉及到NAT(网络地址转换)的核心工作原理。让我一步一步地为你解释:

  1. 端口分配:当内部设备(例如IP为 192.168.1.2)尝试访问外部网络时,NAT设备(在这种情况下是你的网关,IP为 192.168.1.1)会为这个连接选择一个端口。这个端口通常是从所谓的“动态”或“私有”端口范围中随机选择的(在很多系统中,这个范围是49152-65535,但这可能会根据实现而有所不同)。

  2. NAT表:当NAT设备选择了一个端口,它会在NAT转换表中创建一个条目。这个条目包含了内部设备的IP和端口,以及为这个连接分配的外部IP和端口。因此,NAT设备知道从外部网络返回的数据应该转发给哪个内部设备。

  3. 数据返回:当外部服务器向 172.16.209.252 发送数据,并指定了之前分配的端口时,NAT设备会查找NAT表,找到与这个端口匹配的内部IP和端口,并将数据转发给正确的内部设备。

  4. 端口连通性:你提到的端口连通性问题与NAT的工作原理有关。这些动态分配的NAT端口通常不处于“监听”状态,除非它们已经被用于一个活动的连接。因此,除非有一个从内部设备发起的活动连接与之相关,否则外部尝试连接到这些端口的请求通常会被拒绝或忽略。这也是一个安全措施,以防止未经授权的外部连接尝试。

  5. NAT的局限性:正是因为这种端口映射机制,某些应用(例如某些P2P应用或某些游戏)可能在NAT背后运行起来有困难,因为它们依赖于从外部网络发起的连接。这通常需要配置所谓的“端口转发”或“UPnP”来解决。

总的来说,NAT通过维护一个转换表来跟踪哪些内部设备使用了哪些外部端口,从而使多个内部设备可以共享一个公共IP地址。这个机制使得IPv4网络能够继续运行,尽管可用的公共IPv4地址非常有限。

问:

看了你的回答,我还有两个疑问,1. 端口分配是随机的吗? 2. NAT表保存在哪里?

答:

很好的问题!让我来解答:

  1. 端口分配是否随机?

    端口的分配通常是“动态”的,但不一定总是完全随机的。多数NAT实现会从一个预定义的“动态”或“私有”端口范围中为新的外部连接选择一个端口。当一个内部设备尝试建立一个新的外部连接时,NAT设备会选择这个范围中的一个尚未使用的端口。这个选择过程可能是基于递增的、循环的或其他算法,但不一定是完全随机的。然而,从外部看,这看起来很像随机,因为一个特定的内部IP和端口组合每次可能都会映射到一个不同的外部端口。

  2. NAT表保存在哪里?

    NAT表存储在进行NAT操作的设备上,通常是路由器或防火墙。这是一个在内存中维护的动态表,用于跟踪内部IP和端口与外部IP和端口之间的映射关系。每当一个新的外部连接被建立或一个现有的连接被终止时,这个表都会被更新。NAT表的大小和持续时间(即条目在表中保持的时间)可能会根据设备和配置而有所不同。大多数现代的路由器和防火墙都有足够的内存来维护数千甚至数万个并发NAT映射。

    为了管理和故障排除,很多路由器和防火墙都提供了一个界面(通常是一个web界面或命令行界面),管理员可以用它来查看当前的NAT映射。这对于理解哪些内部设备正在与外部网络通信,以及它们使用的端口,非常有帮助。

与gpt学习记录20231019

内容是关于linux设备是否会缓存路由表,问答截图如下:

心得记录碎碎念20231129

代理下的DNS解析问题是一个复杂的问题,小猫咪😭的实现方式实际上就非常优秀切人性化,分流过后一切交给远端服务器,配置什么的也是随着远端服务器走。但是软路由上的酸酸乳+以及安卓版本的撒者奈特就有点蛋疼了,感觉它们处理DNS的方式都极其复杂且不直观,因为后台可以查看到实际上请求代理的链接已经是DNS解析过的结果了,但是软路由的酸酸乳+到底用哪个DNS服务器来解析? 是不是软路由上会有多个DNS解析的行为导致冲突了? 为什么chatgpt无法在软路由百名的分流模式走代理?为什么撒者奈特使用tls就更快但是直接用原始版本DNS就慢?...等等等这一系列问题着实让人很无语,推测应该是历史功能(处理DNS的方式,分流的方式等等)上继承的问题,导致现在这么多毛病...

Anyway,遵从心灵版本的“奥卡姆剃刀”原理,很多东西无法掌控的时候,我们一切从简,使用其能够正常使用的那条道路就行,其他无法实现的则也现阶段妥协一下咯,理清楚优先级活得更轻松哇哈哈哈😎

补充
如下图所示:

并不是这里软路由系统设置的DNS的问题,因为服务器端查询不到223.5.5.5的请求记录。
所以应该不是上文说的“因为多个DNS解析的行为导致冲突”
很可能跟所谓的DNS2SOCKS或者PDNSD TCP的实现方式有关系,未来有时间再进行查询与理解啦😄