Настройка IPv6 в ОС Linux Debian v7.XX, Ubuntu v14.XX, CentOS v6.XX и FreeBSD v10.XX

На хостинговой площадке SIM-Networks была внедрена поддержка IPv6: http://www.sim-networks.com/vds/xen В связи с этим возникла необходимость автоматизировать настройку VDS соответствующим образом. Необходимо оговорится, что речь идет не о каком-либо туннелировании, а полноценной поддержке. Т.е. сетевая инфраструктура в дата-центре обеспечивает коммутацию и маршрутизацию IPv6, имеются соответствующие стыки по BGPv6 с магистральными провайдерами Internet.

$ ping6 -n -c 4 ipv6.google.com
PING ipv6.google.com(2a00:1450:4013:c01::66) 56 data bytes
64 bytes from 2a00:1450:4013:c01::66: icmp_seq=1 ttl=51 time=12.4 ms
64 bytes from 2a00:1450:4013:c01::66: icmp_seq=2 ttl=51 time=12.3 ms
64 bytes from 2a00:1450:4013:c01::66: icmp_seq=3 ttl=51 time=12.4 ms
64 bytes from 2a00:1450:4013:c01::66: icmp_seq=4 ttl=51 time=12.4 ms

--- ipv6.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3017ms
rtt min/avg/max/mdev = 12.393/12.423/12.465/0.028 ms

$ traceroute -n -6 -I ipv6.google.com
traceroute to ipv6.google.com (2a00:1450:4013:c01::66), 30 hops max, 80 byte packets
1 2a04:XXXX:1::1 11.684 ms 11.758 ms 11.753 ms
2 2a04:XXXX:0:103::1 0.978 ms 0.980 ms 0.977 ms
3 2001:1900:5:2:2::1939 11.640 ms 11.637 ms 11.633 ms
4 2001:1900:104:8::8 11.629 ms 11.699 ms 11.696 ms
5 2001:1900:5:3::276 11.692 ms 11.688 ms 11.683 ms
6 2001:4860::1:0:abf6 11.681 ms 10.735 ms 10.721 ms
7 2001:4860::8:0:abf1 10.705 ms 3.051 ms 3.036 ms
8 2001:4860::8:0:8f8e 5.778 ms 5.768 ms 5.756 ms
9 2001:4860::8:0:519f 9.570 ms 9.562 ms 9.544 ms
10 2001:4860::8:0:519e 23.371 ms 23.363 ms 12.068 ms
11 2001:4860::2:0:8652 12.659 ms 12.637 ms 12.625 ms
12 2a00:1450:4013:c01::66 12.339 ms 12.445 ms 12.426 ms

Адреса назначаются и прописываются в настройках ОС статично, т.е. функционал автоконфигурирования IPv6 не задействуется. Это связано с особенностями учета адресного пространства и обеспечения безопасности. Задача осложняется тем, что адресов IPv4 и IPv6 у VDS может быть сразу несколько.
Изложенный ниже материал не претендует на эксклюзивность. Однако мне пришлось собирать его по крупицам из разных источников, что-то проверять экспериментально. После этого родилась идея систематизировать полученные знания и опыт, изложив все в одной заметке.

Linux Debian v7.XX, Ubuntu v14.XX

В достаточно свежих дистрибутивах ОС Linux уже присутствует полноценная поддержка IPv6. Поэтому доустанавливать что-либо вручную необходимости нет.
Рассмотрим пример настройки.
"/etc/network/interfaces"

auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet static
address 185.XXX.208.119
network 185.XXX.208.0
netmask 255.255.255.0
broadcast 185.XXX.208.255
gateway 185.XXX.208.1

auto eth0:1
iface eth0:1 inet static
address 185.XXX.208.169
netmask 255.255.255.255

auto eth0:2
iface eth0:2 inet static
address 185.XXX.208.171
netmask 255.255.255.255

iface eth0 inet6 static
address 2a04:XXXX:1:0:0:0:0:12
netmask 48

iface eth0 inet6 static
address 2a04:XXXX:1:0:0:0:0:15
netmask 48

iface eth0 inet6 static
address 2a04:XXXX:1:0:0:0:0:16
netmask 48
gateway 2a04:XXXX:1::1

Тут следует обратить внимание на два момента. Во-первых, все адреса IPv6 назначаются непосредственно на сам сетевой интерфейс, в отличие от IPv4 нет необходимости создавать виртуальные адаптеры типа "eth0:X". Во-вторых, шлюз по умолчанию для IPv6 указывается один раз для любого из адресов. Действовать он будет для всех.
Результат настроек в выводе команды "ifconfig":

# ifconfig -a
eth0     Link encap:Ethernet HWaddr 00:16:3e:34:80:fe
inet addr:185.XXX.208.119 Bcast:185.XXX.208.255 Mask:255.255.255.0
inet6 addr: fe80::216:3eff:fe34:80fe/64 Scope:Link
inet6 addr: 2a04:XXXX:1::12/48 Scope:Global
inet6 addr: 2a04:XXXX:1::16/48 Scope:Global
inet6 addr: 2a04:XXXX:1::15/48 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:823965 errors:0 dropped:0 overruns:0 frame:0
TX packets:1223 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:450489490 (429.6 MiB) TX bytes:158298 (154.5 KiB)
Interrupt:26

eth0:1   Link encap:Ethernet HWaddr 00:16:3e:34:80:fe
inet addr:185.XXX.208.169 Bcast:185.XXX.208.169 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:26

eth0:2   Link encap:Ethernet HWaddr 00:16:3e:34:80:fe
inet addr:185.XXX.208.171 Bcast:185.XXX.208.171 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:26

lo       Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Базовую диагностику можно выполнить с помощью команд "ping6 -n -c 4 ipv6.google.com" и "traceroute -n -6 -I ipv6.google.com". Проверить MAC-адреса соседей: "ip -6 neighbor show". Изучить таблицу маршрутизации: "route -n6" или "ip -6 route show". Выяснить, какой из адресов IPv6 используется системой по умолчанию для исходящих подключений: "ip -6 route get 2a00:1450:4013:c01::65".

CentOS v6.XX

Настройка CentOS замысловатее из-за того, что опций несколько больше, и они раскиданы по нескольким файлам.

"/etc/sysconfig/network"

NETWORKING=yes
GATEWAY=185.XXX.209.1
HOSTNAME=ipv6.test
NETWORKING_IPV6=yes
IPV6_AUTOCONF=no
IPV6_AUTOTUNNEL=no
IPV6_DEFAULTDEV=eth0
IPV6_DEFAULTGW=2a04:XXXX:1::1

"/etc/sysconfig/network-scripts/ifcfg-eth0"

TYPE=Ethernet
DEVICE=eth0
ONBOOT=yes
IPADDR=185.XXX.209.208
NETWORK=185.XXX.209.0
NETMASK=255.255.255.0
BROADCAST=185.XXX.209.255
GATEWAY=185.XXX.209.1
IPV6INIT=yes
IPV6_DEFAULTGW=2a04:XXXX:1::1
IPV6ADDR=2a04:XXXX:1:0:0:0:0:12/48
IPV6ADDR_SECONDARIES="2a04:XXXX:1:0:0:0:0:15/48 2a04:XXXX:1:0:0:0:0:16/48"

"/etc/sysconfig/network-scripts/ifcfg-eth0:1"

TYPE=Ethernet
DEVICE=eth0:1
ONBOOT=yes
IPADDR=185.XXX.209.213
NETMASK=255.255.255.255

"/etc/sysconfig/network-scripts/ifcfg-eth0:2"

TYPE=Ethernet
DEVICE=eth0:2
ONBOOT=yes
IPADDR=185.XXX.209.232
NETMASK=255.255.255.255

В целом картина аналогична Debian. Виртуальные сетевые интерфейсы "eth0:X" необходимы только для IPv4. Опции "NETWORKING_IPV6" и "IPV6INIT" включают поддержку IPv6. В "IPV6_DEFAULTGW" указываем шлюз по умолчанию. Первый адрес IPv6 назначается в "IPV6ADDR", все остальные перечисляются в "IPV6ADDR_SECONDARIES".
Вывод команды "ifconfig" аналогичен Debian:

$ ifconfig -a
eth0     Link encap:Ethernet HWaddr 00:16:3E:18:BF:3A
inet addr:185.XXX.209.208 Bcast:185.XXX.209.255 Mask:255.255.255.0
inet6 addr: 2a04:XXXX:1::12/48 Scope:Global
inet6 addr: 2a04:XXXX:1::15/48 Scope:Global
inet6 addr: 2a04:XXXX:1::16/48 Scope:Global
inet6 addr: fe80::216:3eff:fe18:bf3a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:80834 errors:0 dropped:0 overruns:0 frame:0
TX packets:67 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:40241487 (38.3 MiB) TX bytes:11895 (11.6 KiB)
Interrupt:245

eth0:1   Link encap:Ethernet HWaddr 00:16:3E:18:BF:3A
inet addr:185.XXX.209.213 Bcast:185.XXX.209.213 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:245

eth0:2   Link encap:Ethernet HWaddr 00:16:3E:18:BF:3A
inet addr:185.XXX.209.232 Bcast:185.XXX.209.232 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:245

lo       Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

Инструменты для диагностики те же самые, что используются в Debian.

FreeBSD v10.XX

В ОС FreeBSD уже также есть все необходимое для поддержки IPv6.
Рассмотрим пример настройки.
" /etc/rc.conf"

hostname="ipv6.test"
defaultrouter="185.XXX.209.1"
ifconfig_xn0="inet 185.XXX.209.41 netmask 255.255.255.0"
ipv6_defaultrouter="2a04:XXXX:1::1"
ifconfig_xn0_ipv6="2a04:XXXX:1:0:0:0:0:12/48"
ifconfig_xn0_aliases="inet6 2a04:XXXX:1:0:0:0:0:15/48 inet6 2a04:XXXX:1:0:0:0:0:16/48 inet 185.XXX.209.104 netmask 255.255.255.255 inet 185.XXX.209.131 netmask 255.255.255.255"

Основной адрес IPv6 указывается в опции "ifconfig_xn0_ipv6". Поскольку в FreeBSD механизм виртуальных сетевых интерфейсов для IPv4 не используется, то все дополнительные адреса, в том числе IPv6, перечисляются в "ifconfig_xn0_aliases".
Вывод команды "ifconfig" немного отличается от ОС Linux.

# ifconfig -a
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
inet 127.0.0.1 netmask 0xff000000
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
xn0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=503<RXCSUM,TXCSUM,TSO4,LRO>
ether 00:16:3e:f4:17:6c
inet 185.XXX.209.41 netmask 0xffffff00 broadcast 185.XXX.209.255
inet6 fe80::216:3eff:fef4:176c%xn0 prefixlen 64 scopeid 0x2
inet6 2a04:XXXX:1::12 prefixlen 48
inet 185.XXX.209.104 netmask 0xffffffff broadcast 185.XXX.209.104
inet 185.XXX.209.131 netmask 0xffffffff broadcast 185.XXX.209.131
inet6 2a04:XXXX:1::15 prefixlen 48
inet6 2a04:XXXX:1::16 prefixlen 48
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
media: Ethernet manual
status: active

Инструмент для диагностики также немного другой: "ping6 -n -c 4 ipv6.google.com" и "traceroute6 -n ipv6.google.com". Проверить MAC-адреса соседей: "ndp -an". Изучить таблицу маршрутизации: "netstat -rn6". Выяснить, какой из адресов IPv6 используется системой по умолчанию для исходящих подключений: "route -nv6 get 2a00:1450:4013:c01::65".

# route -nv6 get 2a00:1450:4013:c01::65
RTA_DST: inet6 2a00:1450:4013:c01::65; RTA_IFP: link ; RTM_GET: Report Metrics: len 240, pid: 0, seq 1, errno 0, flags:<UP,GATEWAY,HOST,STATIC>
locks: inits:
sockaddrs: <DST,IFP>
2a00:1450:4013:c01::65 link#0
route to: 2a00:1450:4013:c01::65
destination: ::
mask: ::
gateway: 2a04:XXXX:1::1
fib: 0
interface: xn0
flags: <UP,GATEWAY,DONE,STATIC>
recvpipe sendpipe ssthresh rtt,msec   mtu       weight   expire
0         0         0         0     1500        1         0

locks: inits:
sockaddrs: <DST,GATEWAY,NETMASK,IFP,IFA>
:: 2a04:XXXX:1::1 :: xn0:0.16.3e.f4.17.6c 2a04:XXXX:1::12

В данном случае адресом по умолчанию является тот, что указан самым последним в выводе команды: "2a04:XXXX:1::12".

Поделиться ссылкой:

Оставить комментарий


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>