IPv6 uses 16 bytes addresses compared to 4 byte addresses in IPv4. IPv6 address syntax and types are described in RFC 4291.
There are multiple IPv6 address types, that can be recognized by their prefix. RouterOS distinguishes the following:
- multicast (with prefix ff00::/8)
- link-local (with prefix fe80::/10)
- loopback (the address ::1/128)
- unspecified (the address ::/128)
- other (all other addresses, including the obsoleted site-local addresses, and RFC 4193 unique local addresses; they all are treated as global unicast).
One difference between IPv6 and IPv4 addressing is that IPv6 automatically generates a link-local IPv6 address for each active interface that has IPv6 support.
IPv6 automatically generated addresses consist of two parts:
- 64 bit long network prefix (usually manually configured for routers, and advertised via RADVD to host);
- 64 bit long unique identifier.
The 64 bit unique ID is generated from hardware serial numbers or MAC addresses. In case of a 48 bit MAC address, this so called EUI-64 (Extended Unique Identifier) is generated by the following algorithm:
- use the first 3 bytes of the MAC address (OUI) as the first 3 bytes for the EUI-64, except that the second-least significant bit of the most significant byte is inverted;
- insert 0xFF and 0xFE as 4th and 5th bytes respectively for the EUI-64;
- use the last 3 bytes of the MAC address as the last 3 bytes for the EUI-64;
In RouterOS, if the eui-64 parameter of an address is configured, the last 64 bits of that address will be automatically generated and updated using interface's MAC address. These last bits must be configured to be zero for this case. Example:
[admin@MikroTik] > ipv6 address add address=fc00:3::/64 interface=ether3 eui-64=yes [admin@MikroTik] > ipv6 address print Flags: X - disabled, I - invalid, D - dynamic, G - global, L - link-local # ADDRESS INTERFACE ADVERTISE ... 5 G fc00:3::20c:42ff:fe1d:3d4/64 ether3 yes [admin@MikroTik] > interface ethernet set ether3 mac-address=10:00:00:00:00:01 [admin@MikroTik] > ipv6 address print Flags: X - disabled, I - invalid, D - dynamic, G - global, L - link-local # ADDRESS INTERFACE ADVERTISE ... 5 G fc00:3::1200:ff:fe00:1/64 ether3 yes
Stateless address autoconfiguration
RouterOS has stateless IPv6 address autoconfiguration router-side support using Router Advertisement Daemon (RADVD). Prefixes of all addresses with 64 bit netmask are advertised by default. Example:
[admin@MikroTik] > ipv6 address print Flags: X - disabled, I - invalid, D - dynamic, G - global, L - link-local # ADDRESS INTERFACE ADVERTISE 0 G fc00:1::1/64 ether1 yes
'''/ipv6 nd prefixes print''' console command shows information about prefixes that are currently advertised:
[admin@MikroTik] > ipv6 nd prefix print Flags: X - disabled, I - invalid, D - dynamic 0 D prefix=fc00:1::/64 interface=ether1 on-link=yes autoconfig=yes valid-lifetime=4w2d preferred-lifetime=1w
On a host that is directly attached to the router we see that an address was added. The address consists of prefix part (first 64 bits) that takes prefix from the prefix advertisement, and host part (last 64 bits) that is automatically generated from local MAC address:
atis@atis-desktop:~$ ip -6 addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000 <b> inet6 fc00:1::21a:4dff:fe56:1f4d/64 scope global dynamic valid_lft 2588363sec preferred_lft 601163sec</b> inet6 fe80::21a:4dff:fe56:1f4d/64 scope link valid_lft forever preferred_lft forever
The host has received the fc00:1::/64 prefix from the router and configured an address with it.
There is also an option to redistribute DNS server information using RADVD:
[admin@MikroTik] > ip dns set secondary-dns=fc00:1::2 [admin@MikroTik] > ip dns print primary-dns: 10.0.0.1 secondary-dns: fc00:1::2 ... [admin@MikroTik] > ipv6 nd set [f] advertise-dns=yes
You will need a running client side software with Router Advertisement DNS support to take advantage of the advertised DNS information.
|address (Address/Netmask; Default: )||Ipv6 address. Allowed netmask range is 0..128|
|advertise (yes | no; Default: no)||Whether to enable stateless address configuration. The prefix of that address is automatically advertised to hosts using ICMPv6 protocol. The option is set by default for addresses with prefix length 64. Note that the prefix length must be equal to 64 for host autoconfiguration to work.
|comment (string; Default: )||Descriptive name of an item|
|disabled (yes | no; Default: no)||Whether address is disabled or not. By default it is disabled|
|eui-64 (yes | no; Default: no)||Whether to calculate last 64 bits of that address using interface's MAC address.
|interface (string; Default: )||Name of an interface on which Ipv6 address is set.|
|actual-interface (string)||Actual interface on which address is set up. For example, if address was configured on ethernet interface and ethernet interface was added to bridge, then actual interface is bridge not ethernet.|
|dynamic (yes | no)||Whether address is dynamically created|
|global (yes | no)||Whether address is global|
|invalid (yes | no)|
|link-local (yes | no)||Whether address is link local|