如何使用 IPv6 ping 本地主机?

naf*_*fas 22 networking linux ping ipv6 localhost

我试图更好地理解IPv6

首先,我尝试ifconfig,我得到以下信息:

eth0      Link encap:Ethernet  HWaddr XXXXXXX
          inet addr:X.X.X.X  Bcast:X.X.X.X  Mask:XXXXXXXXX
          inet6 addr: XXXX::XXXX:XXX:XXXX:XXX/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:138752772 errors:0 dropped:0 overruns:0 frame:0
          TX packets:67894054 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:67347428211 (67.3 GB)  TX bytes:168368922639 (168.3 GB)
          Interrupt:43
Run Code Online (Sandbox Code Playgroud)

所以从上面我可以假设启用了 IPv6(如果我错了,请纠正我)。

现在,如果我使用ping localhost我得到:

64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.026 ms
64 bytes from localhost (127.0.0.1): icmp_req=2 ttl=64 time=0.019 ms
64 bytes from localhost (127.0.0.1): icmp_req=3 ttl=64 time=0.025 ms
...
Run Code Online (Sandbox Code Playgroud)

但是当我使用时,ping6 localhost我得到:

unknown host
Run Code Online (Sandbox Code Playgroud)

我如何使用ping6?或者更具体地说,需要进行哪些更改才能ping6 localhost工作(如果可能的话)?

Arc*_*mar 24

尝试:

ping6 ::1
Run Code Online (Sandbox Code Playgroud)

结果将如下所示:

# ping6 ::1
PING ::1(::1) 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.040 ms
(...)
64 bytes from ::1: icmp_seq=9 ttl=64 time=0.037 ms
^C
--- ::1 ping statistics ---
9 packets transmitted, 9 received, 0% packet loss, time 7998ms
rtt min/avg/max/mdev = 0.035/0.042/0.055/0.011 ms
Run Code Online (Sandbox Code Playgroud)

Ubuntu 14.04.1 LTS(可信赖的 Tahr):

# ping ::1
ping: unknown host ::1
# ping -6 ::1
ping: invalid option -- '6'
Usage: ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
        [-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
        [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
        [-w deadline] [-W timeout] [hop1 ...] destination
# ping -V
ping utility, iputils-s20121221
Run Code Online (Sandbox Code Playgroud)

(同样适用于ping6 -V。)

  • 较新版本的 `iputils` 没有单独的 `ping6` 实用程序,它与 `ping` 合并。对于那些版本,使用`ping -6 ::1` 或(因为`::1` 不是IPv4 地址)`ping ::1`。 (6认同)

Has*_*tur 16

简答[ rcf4291 ]

ping6 ip6-localhost    # Or the alias you have in /etc/hosts file (See below)
ping6 0:0:0:0:0:0:0:1  # Similar to `ping 127.0.0.1` with 7 `:` instead of 4 `.`
ping6 ::1              # The used analogous of `ping 127.0.0.1`
Run Code Online (Sandbox Code Playgroud)

改变工作 ping6 localhost

如果您localhost为两者都设置为别名,ping并且ping6在您的机器上还没有,那么在/etc/hosts文件中写入两行就足够了:

127.0.0.1       localhost
# ... and below
::1             localhost ipv6-localhost ipv6-loopback
Run Code Online (Sandbox Code Playgroud)

对于与系统上当前使用别名有关的内容,您可以检查您的主机文件/etc/hosts [ 1 ] 或如果在不同的系统[ 2 ]上的不同位置您可能会发现, , ,本身...
ip6-localhostip6-loopbackipv6-localhostipv6-loopbacklocalhost


多说几句

我确实理解您对我从rfc6761 中读到的关于“特殊用途域名” 6.3 [ 3 ]和名称localhost的困惑,

用户可能认为对localhost 名称的IPv4 和 IPv6 地址查询将始终解析为相应的 IP 环回地址

所以它应该是默认的, 但是:

  • 在当前更新和未受影响的Ubuntu 14.04.3 LTS 上, /etc/hosts我找到了以下部分ip6-localhostip6-loopback

    # The following lines are desirable for IPv6 capable hosts
    ::1     ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    
    Run Code Online (Sandbox Code Playgroud)
  • SUSE企业版10系统,我发现localhostipv6-localhostipv6-loopback

    # special IPv6 addresses
    ::1             localhost ipv6-localhost ipv6-loopback
    
    Run Code Online (Sandbox Code Playgroud)
  • 在一个旧 的Debian GNU / Linux的8.2 系统localhostip6-localhostip6-loopback

    # The following lines are desirable for IPv6 capable hosts
    ::1     localhost ip6-localhost ip6-loopback
    
    Run Code Online (Sandbox Code Playgroud)

这意味着,以我有限的经验,您应该查看您的/etc/host文件并对其进行修改或使用您会发现的内容,例如,

ping6 ipv6-localhost   # On some systems (maybe on Suse) 
ping6 ip6-localhost    # On some systems (maybe on Debian/*buntu)
Run Code Online (Sandbox Code Playgroud)


gog*_*ors 9

localhost是解析为127.0.0.1地址的主机名。您的/etc/hosts文件应该有一个单独的条目::1,可能是localhost6。所以试试这些:

ping6 ::1
ping6 localhost6
Run Code Online (Sandbox Code Playgroud)

  • 一个主机名可以一次解析为多个地址——尤其是当它们来自不同的协议时。大多数系统将 `localhost` 别名为 **both** `127.0.0.1` 和 `::1`。 (7认同)
  • @kasperd,来自 Gentoo `/etc/hosts`:`127.0.0.1 localhost`,`::1 localhost`;Windows Vista 是相同的(除了将文件放在“C:\Windows\System32\drivers\etc”中)。MacOSX 10.9.5 添加了`fe80::1%lo0 localhost` 作为它的第三个名称。 (3认同)
  • @kasperd:那时你还没有使用过很多系统。Windows、Arch、CentOS、Ubuntu 都将 `localhost` 映射到 `::1`。(我认为随着发行版采用 systemd 并启用 nss_myhostname,这将更加普遍。) (3认同)
  • CentOS 6 有 ::1 作为 localhost6,尽管 CentOS 7 有两者的 localhost。OpenWRT、Xenserver 和 Solaris 根本没有任何 IPv6 条目。 (2认同)