This is the first part of a multi step project in getting IPv6 to work on my network. The top level post is here. The first step in getting things working is to get two hosts on the same network talking. This is the simplest configuration… No routers, no DNS, no DHCP, just two hosts and a switch. We’ll add the rest of the bits in a later post.
So, my 2 VM’s are both running Linux. One is Centos 6 and one is Centos 7. My network configuration looks like this (on the Centos 6 host):
[root@localhost ~]# more /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="dhcp" IPV6INIT="yes" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet"
Nothing out of the ordinary with the exception of having IPV6 turned on. The same is true on the Centos 7 host. I can see it running by looking at the interface output:
[root@localhost ~]# ip addr | grep -E '(^[0-9]|inet6)' 1: lo:mtu 65536 qdisc noqueue state UNKNOWN inet6 ::1/128 scope host 2: eth0: mtu 1500 qdisc mq state UP qlen 1000 inet6 fe80::20c:29ff:fe1e:178e/64 scope link
Couple things to note is the scope part of the address. IPv6 addresses have an addition piece of information that helps the system figure out where the send packets. So, if I have multiple addresses I can use the scope to tell the server which interface traffic goes through (See the Wikipedia IPV6 page on zones for more information). In our case we are using link local addresses which aren’t globally routable but are used for traffic on the same subnet.
But, it works for us since our hosts are on the same subnet:
[root@a ~]# ping6 -I eno16777984 fe80::20c:29ff:fe1e:178e PING fe80::20c:29ff:fe1e:178e(fe80::20c:29ff:fe1e:178e) from fe80::20c:29ff:fecc:a0ad eno16777984: 56 data bytes 64 bytes from fe80::20c:29ff:fe1e:178e: icmp_seq=1 ttl=64 time=0.569 ms 64 bytes from fe80::20c:29ff:fe1e:178e: icmp_seq=2 ttl=64 time=0.379 ms 64 bytes from fe80::20c:29ff:fe1e:178e: icmp_seq=3 ttl=64 time=0.374 ms 64 bytes from fe80::20c:29ff:fe1e:178e: icmp_seq=4 ttl=64 time=0.366 ms ^C --- fe80::20c:29ff:fe1e:178e ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3001ms rtt min/avg/max/mdev = 0.366/0.422/0.569/0.085 ms
And if we look at the tcpdump from the other host, we’ll see the bidirectional traffic
[root@localhost ~]# tcpdump -i eth0 ip6 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 11:16:25.259154 IP6 fe80::20c:29ff:fecc:a0ad > fe80::20c:29ff:fe1e:178e: ICMP6, echo request, seq 1, length 64 11:16:25.259226 IP6 fe80::20c:29ff:fe1e:178e > fe80::20c:29ff:fecc:a0ad: ICMP6, echo reply, seq 1, length 64
So the next step is to bring a router into the picture which is the hard part of this project.