Filtering IPv6 ICMPv6 messages

icmpv6ipv6networking

So I'm playing around with IPv6 on my home network a bit more, and I'm doing things a bit old-fashioned — setting up static addresses and such. This means I don't really want or care for all the automatic configuration built into IPv6 via the various ICMPv6 messages. But running wireshark and capturing only IPv6 traffic, two of my IPv6 systems running Linux are proving to be chatty little things. They're constantly exchanging "Neighbor Solicitation", "Neighbor Advertisement", and ICMPv6 Multicast Listener Report" packets. They do this both on the statically-assigned ULA address I have set for each machine and on the automatically-configured link-local address.

My question is, how can I disable these in Linux? I've found several guides for Windows via the 'netsh' command (which has surprised me — Windows seems to be FAR more tunable in this aspect than Linux is). So far, it seems my only choice in Linux is to use ip6tables to block specific ICMPv6 message types. However, looking at RFC4890, they imply that these messages must not be blocked if an IPv6 host is to participate in an IPv6 network successfully.

My reading of the IPv6 protocol suggests it was heavily influenced by problems faced in large, enterprise networks. The protocol engineers seemed to have little regard for small, private networks. This is great if you're a sysadmin of a large corporate or other such enterprise network, but a tad annoying if you're just "some guy" trying to play with the protocol on a home network to learn it. My method of learning means establishing something like my IPv4 network as a baseline, and then enabling features as I need them.

So I ask the experts, should I disable these three message types on my Linux and windows hosts? Will it horribly break my internal IPv6 setup if I do? How will it affect external IPv6 when I reach that stage (my ISP has not yet allocated IPv6 addresses for customers yet, so there is no external IPv6 routing as of yet and no 6-to-4 tunnels)? Are ip6tables my only option in Linux?

I also assume I'm stuck with the link-local addresses, right? No way to get rid of them? They're impossible to memorize…(maybe that's he point?)

Best Answer

Disabling ICMP for IPv6 can completely break it. It's used for a lot more stuff in v6 than v4. It's used for error reporting, neighbour discovery (as you've found out), and a lot more.

By blocking ICMPv6 at any level you can serious hinder IPv6's ability to do its job. There's a (brief) wikipedia arcticle on it along with the normal very comprehensive RFC.