How to solve "IPv6 addrconf: prefix with wrong
length 48"
While reading some log files on one of the co-located servers at
UK2.net , I've noticed
dmesg log was filling in with
tons of junk messages like:
[4288245.609762] IPv6 addrconf: prefix with wrong length
48
[4288445.984153] IPv6 addrconf: prefix with wrong length 48
[4288646.296110] IPv6 addrconf: prefix with wrong length 48
[4288846.609119] IPv6 addrconf: prefix with wrong length 48
[4289046.922604] IPv6 addrconf: prefix with wrong length 48
[4289247.267273] IPv6 addrconf: prefix with wrong length 48
[4289447.545800] IPv6 addrconf: prefix with wrong length 48
[4289647.857789] IPv6 addrconf: prefix with wrong length 48
[4289848.169308] IPv6 addrconf: prefix with wrong length 48
[4290048.595104] IPv6 addrconf: prefix with wrong length 48
[4290248.808497] IPv6 addrconf: prefix with wrong length 48
[4290449.103503] IPv6 addrconf: prefix with wrong length 48
[4290649.418747] IPv6 addrconf: prefix with wrong length 48
[4290849.742731] IPv6 addrconf: prefix with wrong length
48
After checking the message to make sure it would not suddeny lead
to server hang ups I figured out
the message is not
dangerous but just an annoying warning that some other
(routing) host on the same network as mine is advertising something
using IPv6, that doesn't fit with my IPv6 server config.
Actually the server doesn't use the IPv6 configuration at all, and
the assigned configuration is just some kind of auto set IPv6 IP
address.
The server, where this message appeared is powered by
64 bit
Debian GNU / Linux Squeeze
To resolve the annoying message, two of the kernel sysctl settings
needs to be modified with cmds:
debian:~# sysctl net.ipv6.conf.all.accept_ra=0
debian:~# sysctl net.ipv6.conf.all.autoconf=0
debian:~# sysctl net.ipv6.conf.lo.autoconf=0
debian:~# sysctl net.ipv6.conf.eth0.autoconf=0
debian:~# sysctl net.ipv6.conf.eth1.autoconf=0
Furthermore to prevent the
IPv6 addrconf: prefix with wrong
length 48 to re-appear after future server reboots / boots the
two sysctl values of course needs to be included in
/etc/sysctl.conf e.g.:
debian:~# echo 'net.ipv6.conf.all.accept_ra = 0' >>
/etc/sysctl.conf
debian:~# echo 'net.ipv6.conf.all.autoconf = 0' >>
/etc/sysctl.conf
echo 'net.ipv6.conf.lo.autoconf = 0' >>
/etc/sysctl.conf
echo 'net.ipv6.conf.eth0.autoconf = 0' >>
/etc/sysctl.conf
echo 'net.ipv6.conf.eth1.autoconf = 0' >>
/etc/sysctl.conf
My server has 2 etherhet interfaces,
eth0 and
eth1
that's the reason I had to set up autoconf kernel the two vars
net.ipv6.conf.eth0.autoconf and net.ipv6.conf.eth1.autoconf
, for more interfaces more kernel vars (eth2, eth3) etc. needs to
be set to
"0"
I've seen posts online of people complaining about a similar errors
to
IPv6 addrconf: prefix with wrong length 48, like:
IPv6 addrconf: prefix with wrong length 96
IPv6 addrconf: prefix with wrong length
128
The solution to this messages is also done by setting the above
described sysctl kernel vars. Setting the vars will suppress the
messages which by the way with time could take up A LOT of disk
space and fills
/var/log/dmesg with this useless message,
hence applying the "fix" is a must ;)
Another thing, I've noticed while I was researching about the error
and the respective fix is that people on other deb based
distributions like
Ubuntu as well as on
Fedora GNU /
Linux had also experienced the issue.