Friday, May 23, 2025

IPv6 - Part 3 - FreeBSD IPv6 configuration for Vodafone (ex-UPC)

Vodafone is one of the internet providers I use in my home lab setup here in Czechia.

I have been told they can enable IPv6 in my modem/router on request and it is not enabled by default. Anyway, it took them few minutes to reconfigure my modem/router to support IPv6. After this reconfiguratio, I connected my FreeBSD machine to the network segment we use as point-to-point (P2P /30) for IPv4. For IPv6, there is /64 subnet, where I can connect my IPv6 device.

Logical Network schema is depicted below.

Logical Network Schema


Let's start with configuration.

IPv6 Configuration

IPv6 settings can be set dynamically (SLAAC, DHCP6) or statically.
 

SLAAC Configuration


My FreeBSD System Configuration /etc/rc.conf

hostname="test-ipv6-01.home.uw.cz"
rtsold_enable="YES" # router solicitation daemon
rtsold_flags="-i -m vmx0"
ifconfig_vmx0_ipv6="inet6 accept_rtadv" # WAN Upstream - SLAAC

To apply rc.conf and test SLAAC, I run following commands
  • rm /etc/resolv.conf /var/run/resolvconf/interfaces/vmx0:slaac # to test if DNS will be assigned
  • service netif restart vmx0 # to apply network configuration from /etc/rc.conf
In such configuration, the WAN interface (vmx0) and routing table looks like this ...
 root@test-ipv6-01:~ # ifconfig vmx0  
 vmx0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500  
      options=4e403bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,VLAN_HWTSO,RXCSUM_IPV6,TXCSUM_IPV6,HWSTATS,MEXTPG>  
      ether 00:50:56:81:6e:14  
      inet6 fe80::250:56ff:fe81:6e14%vmx0 prefixlen 64 scopeid 0x1  
      inet6 2a02:830a:b00d:5600:250:56ff:fe81:6e14 prefixlen 64 autoconf pltime 2501271 vltime 3365271  
      media: Ethernet autoselect  
      status: active  
      nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>  
 root@test-ipv6-01:~ # netstat -rn -f inet6  
 Routing tables  
 Internet6:  
 Destination                            Gateway                       Flags     Netif Expire  
 ::/96                                  link#3                        URS       lo0  
 default                                fe80::ae22:5ff:fe2c:9485%vmx0 UG        vmx0  
 ::1                                    link#3                        UHS       lo0  
 ::ffff:0.0.0.0/96                      link#3                        URS       lo0  
 2a02:830a:b00d:5600::/64               link#1                        U         vmx0  
 2a02:830a:b00d:5600:250:56ff:fe81:6e14 link#3                        UHS       lo0  
 fe80::%lo0/10                          link#3                        URS       lo0  
 fe80::%vmx0/64                         link#1                        U         vmx0  
 fe80::250:56ff:fe81:6e14%lo0           link#3                        UHS       lo0  
 fe80::%lo0/64                          link#3                        U         lo0  
 fe80::1%lo0                            link#3                        UHS       lo0  
 ff02::/16                              link#3                        URS       lo0  
 root@test-ipv6-01:~ #   
  • WAN interface has local-link address fe80::250:56ff:fe81:6e14%vmx0
  • Default router (Vodafone router) with local-link address fe80::ae22:5ff:fe2c:9485%vmx0 has been assigned and add it to routing table. 
  • WAN interface has globaly-routable address 2a02:830a:b00d:5600:250:56ff:fe81:6e14
  • I can ping Vodafone router fe80::ae22:5ff:fe2c:9485%vmx0
  • I can ping Google's DNS server 2001:4860:4860::8888
  • I can ping Vodafone's DNS server 2a00:11b4:4110::a assigned via SLAAC

SLAAC Configuration + DHCP6

DHCP client is not required because SLAAC works correctly in Vodafone/UPC network.

Static IPv6 Configuration

Static IPv6 configuration is not required because SLAAC works correctly in Vodafone/UPC network.


IPv6 Network Performance Testing 

Everything must be thoroughly tested before it can be considered production-ready. Let's do some tests.

traceroute6

 root@test-ipv6-01:~ # traceroute6 www.google.com  
 traceroute6 to www.google.com (2a00:1450:4014:80f::2004) from 2a02:830a:b00d:5600:250:56ff:fe81:6e14, 64 hops max, 28 byte packets  
  1 2a02:830a:b00d:5600:ae22:5ff:fe2c:9485 4.042 ms 3.326 ms 3.482 ms  
  2 * * *  
  3 2a02:8300:52::1 19.250 ms 14.334 ms 13.564 ms  
  4 2a02:8300::ffff:b9bc:b8aa 13.491 ms 15.313 ms 11.252 ms  
  5 * * *  
  6 2001:4860:0:1::7f3d 10.505 ms 18.152 ms  
   2001:4860:0:1::7eab 15.795 ms  
  7 2001:4860:0:1::50df 12.066 ms 15.013 ms 13.213 ms  
  8 prg03s13-in-x04.1e100.net 13.675 ms 13.636 ms 11.836 ms  
 root@test-ipv6-01:~ #   

ping

 root@test-ipv6-01:~ # ping -c 15 www.google.com  
 PING(56=40+8+8 bytes) 2a02:830a:b00d:5600:250:56ff:fe81:6e14 --> 2a00:1450:4014:80f::2004  
 16 bytes from 2a00:1450:4014:80f::2004, icmp_seq=0 hlim=119 time=13.387 ms  
 16 bytes from 2a00:1450:4014:80f::2004, icmp_seq=1 hlim=119 time=12.760 ms  
 16 bytes from 2a00:1450:4014:80f::2004, icmp_seq=2 hlim=119 time=7.231 ms  
 16 bytes from 2a00:1450:4014:80f::2004, icmp_seq=3 hlim=119 time=7.446 ms  
 16 bytes from 2a00:1450:4014:80f::2004, icmp_seq=4 hlim=119 time=7.512 ms  
 16 bytes from 2a00:1450:4014:80f::2004, icmp_seq=5 hlim=119 time=7.071 ms  
 16 bytes from 2a00:1450:4014:80f::2004, icmp_seq=6 hlim=119 time=6.949 ms  
 16 bytes from 2a00:1450:4014:80f::2004, icmp_seq=7 hlim=119 time=7.544 ms  
 16 bytes from 2a00:1450:4014:80f::2004, icmp_seq=8 hlim=119 time=7.009 ms  
 16 bytes from 2a00:1450:4014:80f::2004, icmp_seq=9 hlim=119 time=8.523 ms  
 16 bytes from 2a00:1450:4014:80f::2004, icmp_seq=10 hlim=119 time=7.483 ms  
 16 bytes from 2a00:1450:4014:80f::2004, icmp_seq=11 hlim=119 time=6.647 ms  
 16 bytes from 2a00:1450:4014:80f::2004, icmp_seq=12 hlim=119 time=7.766 ms  
 16 bytes from 2a00:1450:4014:80f::2004, icmp_seq=13 hlim=119 time=6.949 ms  
 16 bytes from 2a00:1450:4014:80f::2004, icmp_seq=14 hlim=119 time=7.195 ms  
 --- www.google.com ping statistics ---  
 15 packets transmitted, 15 packets received, 0.0% packet loss  
 round-trip min/avg/max/stddev = 6.647/8.098/13.387/2.000 ms  
 root@test-ipv6-01:~ #   

IPv6 response time 8.1 ms is better than IPv4 12.34 ms.

iperf3 (Throughput) upload test 

 root@test-ipv6-01:~ # iperf3 -c iperf3.moji.fr -t60 -i5  
 Connecting to host iperf3.moji.fr, port 5201  
 [ 5] local 2a02:830a:b00d:5600:250:56ff:fe81:6e14 port 18574 connected to 2a06:c484:6::3:1 port 5201  
 [ ID] Interval      Transfer   Bitrate     Retr Cwnd  
 [ 5]  0.00-5.01  sec 15.1 MBytes 25.3 Mbits/sec 131  177 KBytes      
 [ 5]  5.01-10.01 sec 14.9 MBytes 25.0 Mbits/sec  1  196 KBytes      
 [ 5] 10.01-15.01 sec 14.8 MBytes 24.8 Mbits/sec  8  176 KBytes      
 [ 5] 15.01-20.01 sec 14.6 MBytes 24.6 Mbits/sec  5  178 KBytes      
 [ 5] 20.01-25.01 sec 14.6 MBytes 24.5 Mbits/sec  1  173 KBytes      
 [ 5] 25.01-30.00 sec 14.8 MBytes 24.8 Mbits/sec  2  163 KBytes      
 [ 5] 30.00-35.00 sec 14.8 MBytes 24.7 Mbits/sec  2  173 KBytes      
 [ 5] 35.00-40.01 sec 14.8 MBytes 24.7 Mbits/sec  1  171 KBytes      
 [ 5] 40.01-45.01 sec 14.8 MBytes 24.8 Mbits/sec  3  171 KBytes      
 [ 5] 45.01-50.01 sec 14.8 MBytes 24.7 Mbits/sec  4  166 KBytes      
 [ 5] 50.01-55.01 sec 14.8 MBytes 24.8 Mbits/sec  5  160 KBytes      
 [ 5] 55.01-60.00 sec 14.6 MBytes 24.6 Mbits/sec  2  156 KBytes      
 - - - - - - - - - - - - - - - - - - - - - - - - -  
 [ ID] Interval      Transfer   Bitrate     Retr  
 [ 5]  0.00-60.00 sec  177 MBytes 24.8 Mbits/sec 165      sender  
 [ 5]  0.00-60.04 sec  177 MBytes 24.7 Mbits/sec         receiver  
 iperf Done.  
 root@test-ipv6-01:~ #  

iperf3 (Throughput) dowload test 

 root@test-ipv6-01:~ # iperf3 -c iperf3.moji.fr -t60 -i5 -R  
 Connecting to host iperf3.moji.fr, port 5201  
 Reverse mode, remote host iperf3.moji.fr is sending  
 [ 5] local 2a02:830a:b00d:5600:250:56ff:fe81:6e14 port 22380 connected to 2a06:c484:6::3:1 port 5201  
 [ ID] Interval      Transfer   Bitrate  
 [ 5]  0.00-5.02  sec  140 MBytes  235 Mbits/sec           
 [ 5]  5.02-10.01 sec  147 MBytes  246 Mbits/sec           
 [ 5] 10.01-15.02 sec  140 MBytes  234 Mbits/sec           
 [ 5] 15.02-20.01 sec  147 MBytes  246 Mbits/sec           
 [ 5] 20.01-25.02 sec  140 MBytes  235 Mbits/sec           
 [ 5] 25.02-30.01 sec  147 MBytes  246 Mbits/sec           
 [ 5] 30.01-35.02 sec  140 MBytes  235 Mbits/sec           
 [ 5] 35.02-40.01 sec  147 MBytes  246 Mbits/sec           
 [ 5] 40.01-45.02 sec  140 MBytes  235 Mbits/sec           
 [ 5] 45.02-50.01 sec  147 MBytes  246 Mbits/sec           
 [ 5] 50.01-55.02 sec  140 MBytes  235 Mbits/sec           
 [ 5] 55.02-60.00 sec  146 MBytes  247 Mbits/sec           
 - - - - - - - - - - - - - - - - - - - - - - - - -  
 [ ID] Interval      Transfer   Bitrate     Retr  
 [ 5]  0.00-60.04 sec 1.68 GBytes  241 Mbits/sec  0      sender  
 [ 5]  0.00-60.00 sec 1.68 GBytes  241 Mbits/sec         receiver  
 iperf Done.  
 root@test-ipv6-01:~ #  
 

Conclusion

In Vodafone/UPC network, globally-routed IPv6 unicast address is assigned dynamically along with local-link address.

I can achieve the expected asymmetric 240/25 Mbps throughput on both protocols versions, so network throughput works perfectly fine.

I can achieve better response time on IPv4,which is expected because IPv6 has benefits in routing efficiency (Fixed Length Header, No NAT, Built-in Hierarchical Addressing).

  • PING IPv6 response time 8.1 ms
  • PING IPv4 response time 12.34 ms

  • I'm pretty happy with IPv6 testing in Vodafone. I'm probably ready to plan switching my network from IPv4 to IPv6.
     

    Series

    No comments:

    Post a Comment