ipv6地址为什么显示两个 您所在的位置:网站首页 win10自动配置ip地址有两个 ipv6地址为什么显示两个

ipv6地址为什么显示两个

#ipv6地址为什么显示两个| 来源: 网络整理| 查看: 265

89a0dfc28231f6571c1a34846f76f446.gif

这篇文章旨在概述Windows,Linux和macOS这三个主要操作系统的基本IPv6故障排除方法和命令。对于这些操作系统(仅适用于某些特定任务),它包括“ IPv6 Rosetta Stone ”的更新版本,这是我经常向IPv6初学者介绍的网站,目的是识别特定于操作系统的相关命令。

我还将提供有关命令输出和一般IPv6复杂性的一些背景说明,请注意,与我写的其他文章相比,这篇文章主要是为IPv6新手准备的。我还想补充一点,虽然我可以在一定程度上使用这里所涉及的三种操作系统,但我并不认为自己是其中任何一种的专家,因此可能有更好的方法来执行某些操作。

102f0d0fdd276e593fe49da7a0d09ece.png确定接口的IPv6地址配置

在Windows操作系统中,我不知道使用 ‘ipconfig’ 仅显示特定界面的简单方法,但总的来说,这是查看适配器主要参数的最快方法,例如:

Connection-specific DNS Suffix . : hsd1.ca.comcast.net

IPv6 Address. . . . . . . . . . . : 2601:647:5b80:b60::d9cd

IPv6 Address. . . . . . . . . . . : 2601:647:5b80:b60:c165:b052:45b5:2d70

Temporary IPv6 Address. . . . . . : 2601:647:5b80:b60:6d58:d895:de31:494e

Link-local IPv6 Address . . . . . : fe80::c165:b052:45b5:2d70%17

IPv4 Address. . . . . . . . . . . : 10.0.0.193

Subnet Mask . . . . . . . . . . . : 255.255.255.0

Default Gateway . . . . . . . . . : 10.0.0.1

在Linux操作系统中,相对于使用 ‘ipconfig’ ,我更喜欢使用 ‘ip -6’ ,并且特定接口的最有效方式可能如下所示( ‘a s’ 缩写为 ‘address show’ ,而‘wlp2s0’ 是特定接口):

enno@labbook$ ip -6 a s wlp2s0

wlp2s0:  mtu 1500 state UP qlen 1000

inet6 2601:647:5b80:b60::b8d0/128 scope global dynamic noprefixroute valid_lft 604678sec preferred_lft 604678sec

inet6 2601:647:5b80:b60:d003:344b:61ea:1da1/64 scope global temporary dynamic valid_lft 3582sec preferred_lft 3582sec

inet6 2601:647:5b80:b60:e7d5:f51b:f500:33cb/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 3582sec preferred_lft 3582sec

inet6 fe80::edf9:e52e:686e:62b2/64 scope link noprefixroute valid_lft forever preferred_lft forever

在macOS操作系统中,我喜欢使用 ‘ifconfig en0 inet6’(其中 ‘en0’是特定的接口,而‘-L’ 选项可用于显示使用期限):

bash-3.2$ ifconfig -L en0 inet6

en0: flags=8863 mtu 1500

inet6 fe80::474:2318:f169:b89%en0 prefixlen 64 secured scopeid 0xa 

inet6 2601:647:5b80:b60:1086:2305:87bd:448b prefixlen 64 autoconf secured pltime 3599 vltime 3599 

inet6 2601:647:5b80:b60:75e4:235e:b46c:d2e7 prefixlen 64 autoconf temporary pltime 3599 vltime 3599 

inet6 2601:647:5b80:b60::18ba prefixlen 64 dynamic pltime 591997 vltime 591997 

nd6 options=201

让我们一起来看看来自相同网络中的三个示例系统的上述输出,从分析的角度来看,这有点复杂。我们可以看到,在每个输出中都有所谓的链路本地地址,它始终存在于支持ipv6的接口上,并且仅用于段内通信(例如,在VLAN中)。它总是以“fe80”开头,通常不能/不应该手动配置。此外,每个接口有三个全局单播地址(‘GUAs’)。这是该特定网络的某种配置方法的结果,从运营商的角度来看,可以描述如下:

1. 使用DHCPv6既提供前缀2601:647:5b80:b60::/64的地址(具有“短”接口标识符的地址),又提供两个DNS解析器(如稍后对DHCPv6数据包的分析将) 。

2. 另外,路由器说明中包含一个“前缀选项”(默认情况下通常这样做),并且已宣布的前缀实际上用于地址配置(因为设置了前缀选项中的“ a”标志,这也是常见的默认设置) 。另外,它们在特定选项 (‘number 25’)中还包含两个DNS解析器。

对于IPv6爱好者来说,这就是RA (在Wireshark输出,PCAP的请求):

00fb9b78b616e4ed69e142e253050809.png

这个配置可能是为了在Win 10 Creators Update更新之前同时支持Android设备(不支持DHCPv6)和Windows版本,因为旧版本只能通过DHCPv6学习IPv6 DNS解析器,具体请点此/详细了解。我不知道为什么IPv6专业人员要管理DHCPv6,并且我认为对于这种类型的网络来说,这不是一个很好的选择,但这将引起另一个讨论。

关键是,在这个三个操作系统上,这导致创建三个全局地址,一个来自DHCPv6,并且由于DHCPv6和SLAAC可以愉快地共存进行参数配置,而另外两个则来自经典IPv6 [地址]自动配置的方法称为“无状态地址自动配置”/ SLAAC。后两种地址中,一种被认为是更稳定的,另一种被认为是相对较短的一次性地址,因此被称为“临时地址”,主要用于从浏览器进行web冲浪等出站连接。对于IPv6初学者,可能很难在上面的接口配置输出中发现哪些来自DHCPv6,哪些来自SLAAC。在Linux输出中,第一个地址的“/128”给出了一些说明。在Windows系统中, “netsh int ipv6 sh add” 的说明和macOS上显示的以下内容,都会让你对DHCPv6有所了解:

bash-3.2$ ipconfig getv6packet en0

DHCPv6 REPLY (7) Transaction ID 0x587c7a Length 151

Options[5] = {

IA_NA (3) Length 66 IA_NA IAID=0 T1=302400 T2=483840 Options[2] = {

IAADDR (5) Length 24 IAADDR 2601:647:5b80:b60::18ba Preferred 604800 Valid=604800

STATUS_CODE (13) Length 22 STATUS_CODE Success (0) ‘Assigned an address.’

} SERVERID (2) Length 14 DUID LLT HW 1 Time 625146838 Addr 00:50:f1:80:00:00

CLIENTID (1) Length 14 DUID LLT HW 1 Time 620212912 Addr 38:f9:d3:51:a1:e5

PREFERENCE (7) Length 1 Data ff

DNS_SERVERS (23) Length 32 2001:558:feed::1

2001:558:feed::2

}

在任何情况下,从用户的角度来看,操作员选择的配置方法都会导致存在三个地址这一事实,并且不清楚将哪个地址用于实际的通信行为。

另外,一旦初始使用期限(3600秒/ 1小时)到期,尽管仍然存在RA,Windows系统(运行10.0.14393)将丢失所有IPv6配置(请注意下面的IPv6缺少默认gw)。

Connection-specific DNS Suffix . : hsd1.ca.comcast.net

IPv6 Address. . . . . . . . . . . : 2601:647:5b80:b60::d9cd

Link-local IPv6 Address . . . . . : fe80::c165:b052:45b5:2d70%17

IPv4 Address. . . . . . . . . . . : 10.0.0.193

Subnet Mask . . . . . . . . . . . : 255.255.255.0

Default Gateway . . . . . . . . . : 10.0.0.1

102f0d0fdd276e593fe49da7a0d09ece.png确定哪个地址用于出站通信

这不是一件容易的事,对于读者中的IPv6初学者来说,你可以安全地假定在此处介绍的三个系统上都将使用“临时地址”,*not* the nice short(DHCPv6提供的)地址显示为第一个在Windows和Linux上,以及在macOS上的最后一个。

在Linux和macOS上,可以执行以下操作进行验证:

1. 从一个终端窗口中ping你选择的IPv6地址,例如2620:fe::fe,它是Quad9项目的解析器的IPv6地址,第一行可能显示正在使用的源地址。

2. 在另一个终端窗口中运行 ‘tcpdump -n host 2620:fe::fe’( ' -n '需要看到实际的源地址,' host '后的地址当然必须与第一个终端窗口相同)。

102f0d0fdd276e593fe49da7a0d09ece.png是否想找出实际路由器/默认网关的IPv6地址?

1. Windows:查看相关界面的“ipconfig”输出中的“默认网关”部分;

2. Linux:‘ip -6 r s | grep def”是我常用的格式(“ rs”缩写为“ route show”):

enno@labbook:$ ip -6 r s | grep def

default via fe80::250:f1ff:fe80:0 dev wlp2s0 proto ra metric 600 pref medium

macOS: ‘netstat -rn inet6 | grep def | grep en0’(其中 ‘en0’ 是支持ipv6的示例接口)应该给出一个很好的指示:

bash-3.2$ netstat -rn inet6 | grep def | grep en0

default 10.0.0.1 UGSc 79 0 en0

default fe80::250:f1ff:fe80:0%en0 UGc en0

对路由器执行Ping操作是相当常见的故障排除步骤。

这里要记住两件事:

1. 在Windows和Linux上并不一定要强制ping使用IPv6,因为现在通常只使用' ping ',否则在Linux上就是' ping6 ',在Windows上就是' ping -6 ',但在macOS上是需要的:

bash-3.2$ ping6 fe80::250:f1ff:fe80:0%en0

PING6(56=40+8+8 bytes) fe80::474:3308:f169:b89%en0 –> fe80::250:f1ff:fe80:0%en0

16 bytes from fe80::250:f1ff:fe80:0%en0, icmp_seq=0 hlim=64 time=11.572 ms

2. 假设ping默认网关发生在本地子网(即IPv6区域中的“本地链接”)内,则链接本地地址开始起作用。由于它们仅在特定接口的上下文中具有本地意义,因此可以在一个系统上存在多个这样的“上下文”(每个支持ipv6的接口对应一个上下文)。为了区分具有地址和路由信息的各种本地链接上下文,需要一个称为区域标识符(在RFC 4007中定义)的东西。这是一个链接本地地址后面的部分,并以“%”符号隔开。在大多数情况下,你必须操作包括此内容的本地链接,例如:

Windows (get interface number from ‘route print’ if needed):

E:>ping fe80::250:f1ff:fe80:0%17

Pinging fe80::250:f1ff:fe80:0%17 with 32 bytes of data:

Reply from fe80::250:f1ff:fe80:0%17: time=4ms

Reply from fe80::250:f1ff:fe80:0%17: time=5ms

102f0d0fdd276e593fe49da7a0d09ece.pngDNS

这是一个特别有趣的例子,关键是DNS是“协议无关的”,服务器通常不关心L3协议(IPv4或IPv6)传输传入请求,因此可以通过IPv4完美地查询DNS服务器的AAAA记录(包含IPv6地址)。有问题的DNS服务器本身可能甚至没有IPv6,并且发送请求的客户端甚至可能不知道任何DNS服务器的IPv6地址。如今,这两种方法都是常见的方案。

102f0d0fdd276e593fe49da7a0d09ece.png显示系统使用的IPv6 DNS服务器

1.Windows:执行 ‘ipconfig /all’,然后查看相应的启用IPv6的接口部分的底部。

2.Linux:在一个系统控制的系统上(我的实验室系统是Ubuntu),我想到了以下内容(' wlp2s0 ' =支持ipv6的接口):

[…]

    DNSSEC supported: no

  Current DNS Server: 75.75.75.75

         DNS Servers: 75.75.75.75

                      75.75.76.76

                      2001:558:feed::1

                      2001:558:feed::2

          DNS Domain: ~.

                      hsd1.ca.comcast.net

3.macOS: ‘scutil –dns’ 可能是你最可靠的朋友,如下所示,最后一个 ‘grep’ 试图只捕获v6版本,假设它们的地址在某个地方有一个双冒号:

bash-3.2$ scutil –dns | grep nameserver | grep “::”

nameserver[0] : 2001:558:feed::1

nameserver[1] : 2001:558:feed::2

nameserver[0] : 2001:558:feed::1

nameserver[1] : 2001:558:feed::2

请求名称的' AAAA '记录,无论查询是在v4还是v6上执行的

1.Linux和macOS:‘dig +short AAAA heise.de’;

2.Windows:有两个选项,一个带有nslookup(我倾向于不使用),另一个带有Powershell命令 ‘resolve-dnsname’:

nslookup -q=aaaa heise.de

resolve-dnsname heise.de -type AAAA

对特定服务器/通过特定服务器执行通过IPv6的DNS解析:

Linux和macOS:‘dig +short -6 @2001:558:feed::1 AAAA heise.de’(使用Comcast的DNS),例如:

enno@labbook$ dig +short -6 @2001:558:feed::1 AAAA heise.de

2a02:2e0:3fe:1001:302::

Windows:

nslookup -q=aaaa heise.de 2001:558:feed::1

resolve-dnsname heise.de -type AAAA -server 2001:558:feed::1

102f0d0fdd276e593fe49da7a0d09ece.png使用的命令摘要

下表总结了本文中使用的各个命令,在后续的文章中,我将进一步介绍其他命令,并且我们将使用tcpdump。

c816f3391ffb8ca83eba8f717c326b85.png

本文翻译自:https://theinternetprotocolblog.wordpress.com/2019/11/04/basic-ipv6-troubleshooting-commands-i-ipv6-rosetta-stone-2019/

9bf4c7fe9f12c36461b8c68e0280b8e1.png

086903243ff95322b25ee42a85d28ca2.png



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有