Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Apr 2022 16:22:47 -0500
From:      William Carson <freebsd@dsllsn.net>
To:        freebsd-net@freebsd.org
Subject:   IPv6 system not responding to Neighbor Solicitation
Message-ID:  <CB3E819B-1C30-4183-94C3-D9931F4E022F@dsllsn.net>

next in thread | raw e-mail | index | archive | help
Hello, recently after enabling ipv6_privacy in /etc/rc.conf and =
rebooting, I've been unable to get IPv6 connectivity to work in a hosted =
environment. (I don't know if this is a red herring or not.) I've tried =
disabling it, and even after rebooting, it still doesn't work. (Doesn't =
work meaning: I'm unable to ping6 hosts on the Internet that are =
reachable, e.g. ipv6.google.com.) I confirmed ipv6_privacy is actually =
disabled:

  # sysctl -a | grep tempaddr
  net.inet6.ip6.use_tempaddr: 0
  net.inet6.ip6.prefer_tempaddr: 0

If I boot into a Linux environment (the provider has a Rescue mode), I'm =
able to reach IPv6 just fine. Furthermore, if I then reboot back into =
FreeBSD 13.0-RELEASE-p10 it will work for around ~5 minutes and then =
connections time out.

Given the behavior and based on some tcpdumps, it looks like my system =
is not responding to the upstream router's Neighbor Solicitation =
messages. If I boot into Linux, it respond to the NS messages, the =
router caches the MAC address, and IPv6 works. If I'm fast enough and =
reboot into FreeBSD, IPv6 works until the the entry expires, and then I =
just see this:

13:24:58.901780 IP6 2600:3c00::f03c:91ff:feb0:a56f > =
2605:6400:10:968:22:da15:28a6:c800: ICMP6, echo request, seq 40, length =
16
13:24:59.277713 IP6 2600:3c00::8678:acff:fe1c:ec41 > ff02::1:ffb0:a56f: =
ICMP6, neighbor solicitation, who has 2600:3c00::f03c:91ff:feb0:a56f, =
length 32
13:24:59.277799 IP6 2600:3c00::8678:acff:fe1c:ec41 > ff02::1:ffb0:a56f: =
ICMP6, neighbor solicitation, who has 2600:3c00::f03c:91ff:feb0:a56f, =
length 32

3 packets, the echo request, then two NS requests, and no response -- =
and then it just repeats.=20

I confirmed b0:a5:6f is the Device ID part of my MAC:=20

  # ifconfig em0
  em0: flags=3D8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu =
1500
          =
options=3D481209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MA=
GIC,VLAN_HWFILTER,NOMAP>
          ether f2:3c:91:b0:a5:6f <---
          inet6 fe80::f03c:91ff:feb0:a56f%em0 prefixlen 64 scopeid 0x1
          inet6 2600:3c00::f03c:91ff:feb0:a56f prefixlen 64 autoconf
          inet6 2600:3c00:e000:137::1 prefixlen 128
          inet6 2600:3c00:e000:137::1:1 prefixlen 128
          inet6 2600:3c00:e000:137::2:1 prefixlen 128
          inet6 2600:3c00:e000:137::3:1 prefixlen 128
          inet6 2600:3c00:e000:137:cafe:8a2e:370:7334 prefixlen 128
          inet 96.126.127.161 netmask 0xffffff00 broadcast =
96.126.127.255
          inet 173.255.203.45 netmask 0xffffffff broadcast =
173.255.203.45
          inet 96.126.122.129 netmask 0xffffffff broadcast =
96.126.122.129
          inet 50.116.26.213 netmask 0xffffffff broadcast 50.116.26.213
          media: Ethernet autoselect (1000baseT <full-duplex>)
          status: active
          nd6 =
options=3D8023<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL,DEFAULTIF>

Therefore the Solicited-node multicast address ff02::1:ffb0:a56f looks =
to be correct. I've also confirmed the router's address is within the =
assigned SLAAC network (Router: 2600:3c00::8678:acff:fe1c:ec41, SLAAC =
address: 2600:3c00::f03c:91ff:feb0:a56f/64).Furthermore, the multicast =
address does show up in `ifmcstat`:

  # ifmcstat
  em0:
          inet6 fe80::f03c:91ff:feb0:a56f%em0 scopeid 0x1
          mldv2 flags=3D2<USEALLOW> rv 2 qi 125 qri 10 uri 3
                  group ff02::1:ff70:7334%em0 scopeid 0x1 mode exclude
                          mcast-macaddr 33:33:ff:70:73:34
                  group ff02::1:ff03:1%em0 scopeid 0x1 mode exclude
                          mcast-macaddr 33:33:ff:03:00:01
                  group ff02::1:ff02:1%em0 scopeid 0x1 mode exclude
                          mcast-macaddr 33:33:ff:02:00:01
                  group ff02::1:ff01:1%em0 scopeid 0x1 mode exclude
                          mcast-macaddr 33:33:ff:01:00:01
                  group ff02::1:ff00:1%em0 scopeid 0x1 mode exclude
                          mcast-macaddr 33:33:ff:00:00:01
          inet 96.126.127.161
          igmpv3 rv 2 qi 125 qri 10 uri 3
                  group 224.0.0.1 mode exclude
                          mcast-macaddr 01:00:5e:00:00:01
          inet6 fe80::f03c:91ff:feb0:a56f%em0 scopeid 0x1
          mldv2 flags=3D2<USEALLOW> rv 2 qi 125 qri 10 uri 3
                  group ff01::1%em0 scopeid 0x1 mode exclude
                          mcast-macaddr 33:33:00:00:00:01
                  group ff02::2:bdc6:c84d%em0 scopeid 0x1 mode exclude
                          mcast-macaddr 33:33:bd:c6:c8:4d
                  group ff02::2:ffbd:c6c8%em0 scopeid 0x1 mode exclude
                          mcast-macaddr 33:33:ff:bd:c6:c8
                  group ff02::1%em0 scopeid 0x1 mode exclude
                          mcast-macaddr 33:33:00:00:00:01
                  group ff02::1:ffb0:a56f%em0 scopeid 0x1 mode exclude =
<---
                          mcast-macaddr 33:33:ff:b0:a5:6f

I can even ping the address and it replies!

  # ping6 ff02::1:ffb0:a56f
  PING6(56=3D40+8+8 bytes) fe80::f03c:91ff:feb0:a56f%em0 --> =
ff02::1:ffb0:a56f
  16 bytes from fe80::f03c:91ff:feb0:a56f%em0, icmp_seq=3D0 hlim=3D64 =
time=3D0.451 ms
  16 bytes from fe80::f03c:91ff:feb0:a56f%em0, icmp_seq=3D1 hlim=3D64 =
time=3D0.446 ms
  16 bytes from fe80::f03c:91ff:feb0:a56f%em0, icmp_seq=3D2 hlim=3D64 =
time=3D0.618 ms
  ^C

Does anyone have any thoughts why it's not responding to the Neighbor =
Solicitation messages? I've been troubleshooting this for a few days now =
and can't figure it out. I also tried booting kernel.old (which I think =
is -p8 or -p9), but it made no difference. I've tried with and without =
pf enabled -- again, no difference.

I don't know if this is useful, but I validated routes are being =
discovered:

  # ndp -na
  Neighbor                             Linklayer Address  Netif Expire   =
 S Flags
  2600:3c00:e000:137::1:1              f2:3c:91:b0:a5:6f    em0 =
permanent R
  2600:3c00:e000:137::1                f2:3c:91:b0:a5:6f    em0 =
permanent R
  fe80::1%em0                          00:05:73:a0:0f:ff    em0 =
23h56m36s S R <---
  2600:3c00:e000:137::3:1              f2:3c:91:b0:a5:6f    em0 =
permanent R
  2600:3c00:e000:137::2:1              f2:3c:91:b0:a5:6f    em0 =
permanent R
  2600:3c00::f03c:91ff:feb0:a56f       f2:3c:91:b0:a5:6f    em0 =
permanent R
  fe80::f03c:91ff:feb0:a56f%em0        f2:3c:91:b0:a5:6f    em0 =
permanent R
  fe80::8678:acff:fe1c:ec41%em0        84:78:ac:1c:ec:41    em0 23h49m7s =
 S R <---
  2600:3c00:e000:137:cafe:8a2e:370:7334 f2:3c:91:b0:a5:6f   em0 =
permanent R

  # netstat -nr6
  Routing tables

  Internet6:
  Destination                       Gateway                       Flags  =
   Netif Expire
  ::/96                             ::1                           UGRS   =
     lo0
  default                           fe80::1%em0                   UG     =
     em0 <---
  ::1                               link#2                        UHS    =
     lo0
  ::ffff:0.0.0.0/96                 ::1                           UGRS   =
     lo0
  2600:3c00::f03c:91ff:feb0:a56f    link#1                        UHS    =
     lo0
  2600:3c00:e000:137::1             link#1                        UHS    =
     lo0
  2600:3c00:e000:137::1:1           link#1                        UHS    =
     lo0
  2600:3c00:e000:137::2:1           link#1                        UHS    =
     lo0
  2600:3c00:e000:137::3:1           link#1                        UHS    =
     lo0
  2600:3c00:e000:137:cafe:8a2e:370:7334 link#1                    UHS    =
     lo0
  fe80::/10                         ::1                           UGRS   =
     lo0
  fe80::%em0/64                     link#1                        U      =
     em0
  fe80::f03c:91ff:feb0:a56f%em0     link#1                        UHS    =
     lo0
  fe80::%lo0/64                     link#2                        U      =
     lo0
  fe80::1%lo0                       link#2                        UHS    =
     lo0
  ff02::/16                         ::1                           UGRS   =
     lo0

And here's the IPv6 part in my rc.conf:

  # ipv6
  rtsold_enable=3D"YES"
  rtsold_flags=3D"-aF"
  #ipv6_activate_all_interfaces=3D"YES"
  ipv6_network_interfaces=3D"em0"
  ipv6_default_interface=3D"em0"
  ifconfig_em0_ipv6=3D"inet6 accept_rtadv"
  ifconfig_em0_aliases=3D"\
                 inet6 2600:3c00:e000:0137::0:1/128 \
                 inet6 2600:3c00:e000:0137::1:1/128 \
                 inet6 2600:3c00:e000:0137::2:1/128 \
                 inet6 2600:3c00:e000:0137::3:1/128 \
                 inet6 2600:3c00:e000:0137:cafe:8a2e:0370:7334/128"

I'm at a complete loss. Any help troubleshooting this would be greatly =
appreciated.

Sincerely,
--wcarson=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CB3E819B-1C30-4183-94C3-D9931F4E022F>