10.6. IPV6
IPv6, successor to IPv4, is a new version of the IP protocol designed to fix its flaws, most notably the scarcity of available IP addresses. This protocol handles the network layer; its purpose is to provide a way to address machines, to convey data to their intended destination, and to handle data fragmentation if needed (in other words, to split packets into chunks with a size that depends on the network links to be used on the path and to reassemble the chunks in their proper order on arrival).
Debian kernels include IPv6 handling in the core kernel (with the exception of some architectures that have it compiled as a module named ipv6
). Basic tools such as ping
and traceroute
have their IPv6 equivalents in ping6
and traceroute6
, available respectively in the iputils-ping and iputils-tracepath packages.
The IPv6 network is configured similarly to IPv4, in /etc/network/interfaces
. But if you want that network to be globally available, you must ensure that you have an IPv6-capable router relaying traffic to the global IPv6 network.
例 10.10. Example of IPv6 configuration
- iface eth0 inet6 static
- address 2001:db8:1234:5::1:1/64
- # Disabling auto-configuration
- # autoconf 0
- # The router is auto-configured and has no fixed address
- # (accept_ra 1). If it had:
- # gateway 2001:db8:1234:5::1
IPv6 subnets usually have a netmask of 64 bits. This means that 264 distinct addresses exist within the subnet. This allows Stateless Address Autoconfiguration (SLAAC) to pick an address based on the network interface’s MAC address. By default, if SLAAC is activated in your network and IPv6 on your computer, the kernel will automatically find IPv6 routers and configure the network interfaces.
This behavior may have privacy implications. If you switch networks frequently, e.g. with a laptop, you might not want your MAC address being a part of your public IPv6 address. This makes it easy to identify the same device across networks. A solution to this are IPv6 privacy extensions (which Debian enables by default if IPv6 connectivity is detected during initial installation), which will assign an additional randomly generated address to the interface, periodically change them and prefer them for outgoing connections. Incoming connections can still use the address generated by SLAAC. The following example, for use in /etc/network/interfaces
, activates these privacy extensions.
例 10.11. IPv6 privacy extensions
- iface eth0 inet6 auto
- # Prefer the randomly assigned addresses for outgoing connections.
- privext 2
TIP Programs built with IPv6
Many pieces of software need to be adapted to handle IPv6. Most of the packages in Debian have been adapted already, but not all. If your favorite package does not work with IPv6 yet, you can ask for help on the debian-ipv6 mailing-list. They might know about an IPv6-aware replacement and could file a bug to get the issue properly tracked.
→ https://lists.debian.org/debian-ipv6/
IPv6 connections can be restricted, in the same fashion as for IPv4. nft
can be used to create firewall rules for IPv4 and IPv6 (see 第 14.2.3 节 “Syntax of nft
”).
10.6.1. Tunneling
CAUTION IPv6 tunneling and firewalls
IPv6 tunneling over IPv4 (as opposed to native IPv6) requires the firewall to accept the traffic, which uses IPv4 protocol number 41.
If a native IPv6 connection is not available, the fallback method is to use a tunnel over IPv4. Hurricane Electric is one (free) provider of such tunnels:
To use a Hurricane Electric tunnel, you need to register an account, login, select a free tunnel and edit the file /etc/network/interfaces
with the generated code.
You can install and configure the radvd
daemon (from the similarly-named package) if you want to use the configured computer as a router for a local network. This IPv6 configuration daemon has a role similar to dhcpd
in the IPv4 world.
The /etc/radvd.conf
configuration file must then be created (see /usr/share/doc/radvd/examples/simple-radvd.conf
as a starting point). In our case, the only required change is the prefix, which needs to be replaced with the one provided by Hurricane Electric; it can be found in the output of the ip a
command, in the block concerning the he-ipv6
interface.
Then run systemctl start radvd
. The IPv6 network should now work.