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

от автора

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

Linux Debian v7.XX, Ubuntu v14.XX
CentOS v6.XX
FreeBSD v10.XX

После внедрения поддержки IPv6, на хостинговой площадке компании в которой я работаю, у нас возникла необходимость автоматизировать настройку VDS соответствующим образом. Необходимо оговорится, что речь идет не о каком-либо туннелировании, а полноценной поддержке. Т.е. сетевая инфраструктура в дата-центре обеспечивает коммутацию и маршрутизацию IPv6, имеются соответствующие стыки по BGPv6 с магистральными провайдерами Internet.

Spoiler

$ 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».

ссылка на оригинал статьи http://habrahabr.ru/post/270611/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *