Изложенный ниже материал не претендует на эксклюзивность. Однако мне пришлось собирать его по крупицам из разных источников, что-то проверяя экспериментально. После этого родилась идея систематизировать полученные знания и опыт, изложив все в одной заметке.
Linux Debian v7.XX, Ubuntu v14.XX
CentOS v6.XX
FreeBSD v10.XX
После внедрения поддержки IPv6, на хостинговой площадке компании в которой я работаю, у нас возникла необходимость автоматизировать настройку VDS соответствующим образом. Необходимо оговорится, что речь идет не о каком-либо туннелировании, а полноценной поддержке. Т.е. сетевая инфраструктура в дата-центре обеспечивает коммутацию и маршрутизацию IPv6, имеются соответствующие стыки по BGPv6 с магистральными провайдерами Internet.
Адреса назначаются и прописываются в настройках ОС статично, т.е. функционал автоматического конфигурирования IPv6 не задействуется. Это связано с особенностями учета адресного пространства и обеспечения безопасности. Задача осложняется тем, что адресов IPv4 и IPv6 у VDS может быть сразу несколько.
В достаточно свежих дистрибутивах ОС Linux уже присутствует полноценная поддержка IPv6. Поэтому доустанавливать что-либо вручную необходимости нет.
Рассмотрим пример настройки.
"/etc/network/interfaces"
Тут следует обратить внимание на два момента. Во-первых, все адреса IPv6 назначаются непосредственно на сам сетевой интерфейс: в отличие от IPv4 нет необходимости создавать виртуальные адаптеры типа «eth0:X». Во-вторых, шлюз по умолчанию для IPv6 указывается один раз для любого из адресов. Действовать он будет для всех.
Результат настроек в выводе команды «ifconfig»:
Базовую диагностику можно выполнить с помощью команд «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 замысловатее из-за того, что опций несколько больше, и они раскиданы по нескольким файлам.
"/etc/sysconfig/network"
"/etc/sysconfig/network-scripts/ifcfg-eth0"
"/etc/sysconfig/network-scripts/ifcfg-eth0:1"
"/etc/sysconfig/network-scripts/ifcfg-eth0:2"
В целом картина аналогична Debian. Виртуальные сетевые интерфейсы «eth0:X» необходимы только для IPv4. Опции «NETWORKING_IPV6» и «IPV6INIT» включают поддержку IPv6. В «IPV6_DEFAULTGW» указываем шлюз по умолчанию. Первый адрес IPv6 назначается в «IPV6ADDR», все остальные перечисляются в «IPV6ADDR_SECONDARIES».
Вывод команды «ifconfig» аналогичен Debian:
Инструменты для диагностики — те же самые, что используются в Debian.
В ОС FreeBSD уже также есть все необходимое для поддержки IPv6.
Рассмотрим пример настройки.
" /etc/rc.conf"
Основной адрес IPv6 указывается в опции «ifconfig_xn0_ipv6». Поскольку в FreeBSD механизм виртуальных сетевых интерфейсов для IPv4 не используется, то все дополнительные адреса, в том числе IPv6, перечисляются в «ifconfig_xn0_aliases».
Вывод команды «ifconfig» немного отличается от ОС Linux.
Инструмент для диагностики также немного другой: «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».
В данном случае адресом по умолчанию является тот, что указан самым последним в выводе команды: «2a04:XXXX:1::12».
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».
gotch
Подскажите для общего развития eth0:1 — это просто дополнительный адрес на интерфейсе, или это отдельный интерфейс в VLAN 1?
В чем фишка пачки адресов с маской 255.255.255.255?
VBKesha
Это просто дополнительный адрес.
ValdikSS
eth0:1 — алиас, который является костылем из-за невозможности использовать несколько адресов на одном сетевом интерфейсе через ifconfig, который не обновляется с 2001 года.
Непонятно, какого хрена автор вообще его использует в статье 2015 года, когда его нет уже во многих дистрибутивах по умолчанию.
Разумеется, Debian поддерживает iproute2 и назначение нескольких IP-адресов на одном интерфейсе:
Так что тоже неверна.
snp
С некоторого времени теперь можно подсеть через слэш задавать (о счастье!).
simnetworks
snp
Речь про Дебиан и Убунту — конфиг я для них упомянул. В Центоси вообще другой формат.
pavelsh
А автор и не пользуется ifconfig-ом на мой взгляд. Автор использует штатную конфигурацию интерфейсов из дистрибутива.
ValdikSS
В документации написано, что такой способ настройки — legacy, да и в статье автор везде пользуется ifconfig для просмотра состояния интерфейсов.
Borz
Legacy как раз таки «eth0:0». При этом, для iproute2 прямо написано: «Note however that this method is dangerous!»
gotch
То есть опасен медот iproute2, когда для алиасов не создаются lables для основного интерфейса?
Borz
да
simnetworks
simnetworks
simnetworks
gotch, для чего необходимы виртуальные сетевые интерфейсы «eth0:X» тут уже разъяснили достаточно развернуто, с VLAN они никак не связаны. Сетевая маска 255.255.255.255 служит для того, что бы один из дополнительных адресов IPv4 не использовался системой по умолчанию для исходящих подключений. Данная тема несколько выходит за рамки заметки, подробнее об этом написано, например, вот здесь: http://serverfault.com/a/422230