Project

General

Profile

Bug #7609

IPv6 connectivity unstable for static ipv6-only (configuration fails to set auto_linklocal)

Added by Dennis Kögel over 5 years ago. Updated about 4 years ago.

Status:
Resolved
Priority:
Nice to have
Assignee:
Josh Paetzel
Category:
Middleware
Target version:
Seen in:
Severity:
New
Reason for Closing:
Reason for Blocked:
Needs QA:
Yes
Needs Doc:
Yes
Needs Merging:
Yes
Needs Automation:
No
Support Suite Ticket:
n/a
Hardware Configuration:
ChangeLog Required:
No

Description

Fresh install of 9.3S, IPv6 only (static)

Observed behaviour, quite weird:
- Box is reachable only for short periods of time (10-30s), then is unavailable for some time (usually 1-2min)
- When unreachable, it's gone completely (upstream router doesn't even have NDP entries)
- Initiating traffic from the box to the outside helps (e.g. pinging the router's ip address; outgoing traffic apparently helps the router maintain a neighbor entry)
- tcpdump shows that the freenas box receives neighbor solicitations, but silently fails to respond

After turning on net.inet6.icmp6.nd6_debug on the freenas box, this is visible:

Jan 21 08:34:15 freenas kernel: nd6_na_output: source can't be determined: dst=fe80:4::215:17ff:fecf:2ec6, error=51

Configuration:

- Interface bce3 is configured w/ static ipv6 address only
- Autoconf is not enabled
- No ipv4 is configured, neither static nor DHCP
- No aliases
- No other interfaces configured yet

Or in the database's words:

sqlite> select * from network_interfaces where int_interface='bce3';
int_v6netmaskbit|int_ipv4address|int_name|int_ipv6address|int_options|int_dhcp|int_v4netmaskbit|int_ipv6auto|int_interface|id
64||management|2001:db8:0:7e57::8||0||0|bce3|1

Cause:
The interface bce3 was configured without an automatic link-local address and thus was unable to reply with a neighbor advertisement.

Root cause:
rc.conf.local:_interface_config() fails to properly set ifconfig variables:
- ifconfig_bce3 is empty (correct), but
- ifconfig_bce3_ivp6 contains merely "2001:db8:0:7e57::8/64" -- the "inet6" keyword is missing (the boot messages complain about this as well), and, more importantly, the "auto_linklocal" keyword is missing

Fix:

[root@freenas] ~# diff -uw /tmp/rc.conf.local /conf/base/etc/rc.conf.local
--- /tmp/rc.conf.local    2015-01-21 09:46:42.899128869 -0800
+++ /conf/base/etc/rc.conf.local    2015-01-21 09:02:38.955061314 -0800
@@ -141,7 +141,7 @@
                         echo rtsold_enable=\"YES\" 
         else
             if [ -n "${ipv6addr}" ]; then
-                echo ifconfig_${interface}_ipv6=\"${ipv6addr}/${ipv6netmask}\" 
+                echo ifconfig_${interface}_ipv6=\"inet6 ${ipv6addr}/${ipv6netmask} auto_linklocal\" 
                         elif [ ${has_ipv6} -gt 0 ]; then
                                 echo ifconfig_${interface}_ipv6=\"inet6 auto_linklocal\" 
                         fi

This is necessary only if no inet6 aliases have been defined (thus no $has_ipv6), and SLAAC is not enabled (thus no $doipv6auto).

After this change, the interface gets a link-local address and responds to NDP as it should.

BTW, while I'm here: The console setup dialog does not accept IPv6 DNS resolvers (silently returns to main menu).

Associated revisions

Revision c6baa711 (diff)
Added by Josh Paetzel over 5 years ago

Fix IPv6 static configuration. Ticket: #7609

Revision c482b1f6 (diff)
Added by Josh Paetzel over 5 years ago

Fix IPv6 static configuration. Ticket: #7609 (cherry picked from commit c6baa711df2fbc9db3e0ba593587ea19a2b27348)

History

#1 Updated by Josh Paetzel over 5 years ago

  • Status changed from Unscreened to Screened
  • Assignee set to Josh Paetzel
  • Target version set to Unspecified

#2 Updated by Josh Paetzel over 5 years ago

  • Status changed from Screened to Ready For Release

#3 Updated by Jordan Hubbard over 5 years ago

  • Status changed from Ready For Release to Resolved

#4 Avatar?id=14398&size=24x24 Updated by Kris Moore about 4 years ago

  • Target version changed from Unspecified to N/A

Also available in: Atom PDF