Testing IPv6 connectivity using ping is one of the most fundamental network diagnostic tools available. This guide covers everything you need to know about ICMPv6, the ping6 command, and how to effectively test your IPv6 connectivity.
Internet Control Message Protocol version 6 (ICMPv6) is the IPv6 equivalent of ICMPv4, but it's much more than just a protocol update. ICMPv6 is integral to IPv6 operations and includes significantly expanded functionality compared to its IPv4 predecessor.
Protocol Integration: ICMPv6 consolidates several IPv4 protocols into one. It incorporates the functions of Address Resolution Protocol (ARP) and Internet Group Management Protocol (IGMP), both of which are separate protocols in IPv4 but are no longer needed with IPv6.
Neighbor Discovery Protocol: ICMPv6 includes the Neighbor Discovery Protocol (NDP), which handles address resolution, router discovery, and automatic address configuration. This replaces and enhances the functionality provided by ARP in IPv4.
Message Types: ICMPv6 includes all message types found in ICMPv4 but adds numerous additional types to support its broader functionality. For ping operations specifically:
Security Features: ICMPv6 incorporates more robust security features and can be used with IPsec for added encryption and authentication, providing a more secure communication channel.
Critical Importance: Unlike ICMPv4, which can be somewhat optional in IPv4 networks, ICMPv6 is absolutely essential for IPv6 to function properly. Blocking all ICMPv6 traffic will break fundamental IPv6 operations like address resolution and path MTU discovery.
The ping6 command (or ping -6 on some systems) is specifically designed for testing IPv6 connectivity using the ICMPv6 protocol.
On most Linux distributions, use the dedicated ping6 command:
# Ping an IPv6 address
ping6 2001:4860:4860::8888
# Ping a hostname (DNS will resolve to IPv6)
ping6 ipv6.google.com
# Send only 4 packets
ping6 -c 4 ipv6.google.com
# Ping with specific interval (0.5 seconds)
ping6 -i 0.5 2001:4860:4860::8888
On modern Linux distributions (Red Hat/CentOS, Arch Linux, and derivatives), you can also use the unified ping command with the -6 flag:
ping -6 ipv6.google.com
ping -6 2001:4860:4860::8888
For more detailed Linux IPv6 configuration instructions, see configure-ipv6-linux.md.
Link-local addresses require specifying the network interface:
# Link-local addresses start with fe80::
ping6 fe80::beae:c5ff:febe:a742%eth0
# Or use -I flag
ping6 -I eth0 fe80::beae:c5ff:febe:a742
macOS uses the ping6 command and requires the -I flag to specify the network interface:
# Most Macs use en0 or en1
ping6 -I en0 2001:4860:4860::8888
ping6 -I en1 ipv6.google.com
# For link-local addresses
ping6 -I en0 fe80::1
Windows uses the standard ping command with the -6 flag:
# Ping IPv6 address
ping -6 2001:4860:4860::8888
# Ping hostname
ping -6 ipv6.google.com
# Send 4 packets
ping -6 -n 4 ipv6.google.com
Windows will automatically detect the protocol if you provide an IPv6 address, so the -6 flag is optional when using addresses directly.
For more detailed Windows IPv6 configuration instructions, see configure-ipv6-windows.md.
Understanding the difference between testing with IP addresses versus hostnames is important:
ping6 2001:4860:4860::8888
This tests:
ping6 ipv6.google.com
This additionally tests:
If hostname ping fails but address ping succeeds, you likely have a DNS configuration issue rather than an IPv6 connectivity problem.
Here are reliable public IPv6 addresses you can use for testing:
ping6 2001:4860:4860::8888
ping6 2001:4860:4860::8844
These are the IPv6 equivalents of Google's well-known 8.8.8.8 and 8.8.4.4 DNS servers.
ping6 2606:4700:4700::1111
ping6 2606:4700:4700::1001
ping6 ipv6.google.com
ping6 ipv6.test-ipv6.com
PING 2001:4860:4860::8888(2001:4860:4860::8888) 56 data bytes
64 bytes from 2001:4860:4860::8888: icmp_seq=1 ttl=119 time=10.2 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=2 ttl=119 time=10.5 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=3 ttl=119 time=10.1 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=4 ttl=119 time=10.3 ms
--- 2001:4860:4860::8888 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 10.124/10.275/10.508/0.165 ms
This indicates:
connect: Network is unreachable
This typically means:
Check your IPv6 configuration with ip -6 addr (Linux) or ifconfig (macOS).
From 2001:db8::1 icmp_seq=1 Destination unreachable: Address unreachable
This indicates:
From 2001:4860:4860::8888: icmp_seq=1 timeout
Possible causes:
Note that some servers intentionally block ICMP ping as a security measure while still accepting other traffic (like DNS queries).
ICMPv6 is essential for IPv6 operations, but firewalls may block it as a security measure. Here's what you need to know:
Unlike ICMPv4 in IPv4 networks, you cannot simply block all ICMPv6 traffic. IPv6 requires certain ICMPv6 message types for basic functionality:
By default, Windows allows ICMPv6 echo requests only from the local subnet. To allow ping from anywhere:
If using iptables (ip6tables for IPv6):
# Allow ICMPv6 echo requests
sudo ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 128 -j ACCEPT
# Allow ICMPv6 echo replies
sudo ip6tables -A OUTPUT -p ipv6-icmp --icmpv6-type 129 -j ACCEPT
If using firewalld:
# Allow ICMPv6 echo requests
sudo firewall-cmd --add-icmp-block-inversion
sudo firewall-cmd --add-icmp-block=echo-request --permanent
Ensure your router allows ICMPv6 traffic. Many routers have specific ICMPv6 settings. At minimum, allow:
For more information on configuring firewalls for IPv6, see configure-ipv6-firewall.md.
# Send large packets to test fragmentation
ping6 -s 1400 2001:4860:4860::8888
IPv6 doesn't support fragmentation at routers, so path MTU discovery is critical.
# Test maximum throughput (use with caution)
sudo ping6 -f 2001:4860:4860::8888
This sends packets as fast as possible to test network capacity.
# Use [traceroute6](traceroute-ipv6) to see the path packets take
traceroute6 2001:4860:4860::8888
This shows each hop along the route to the destination.
Solution: Use ping -6 instead, or install the iputils package:
# Debian/Ubuntu
sudo apt-get install iputils-ping
# Red Hat/CentOS
sudo yum install iputils
This suggests:
If ping sometimes works and sometimes fails:
For more information on dual-stack testing, see dual-stack-test-explained.md.
For users who prefer a web-based approach or need to test without command-line access, visit test-ipv6.run for comprehensive IPv6 connectivity testing. This tool tests:
The web interface provides visual feedback and detailed scoring to help identify IPv6 configuration issues without requiring command-line tools.
For more comprehensive device testing methods, see check-device-ipv6-connectivity.md.
Testing IPv6 ping (ICMPv6) is essential for diagnosing network connectivity issues in modern IPv6-enabled networks. Key takeaways:
ping6 or ping -6 depending on your platformRegular IPv6 ping testing helps ensure your network is ready for the modern Internet where IPv6 adoption continues to grow rapidly.