Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: [Mini FAQ] Безболезненный переход с IPv4 на IPv6.  (Прочитано 27062 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн koshev

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1639
  • חתול המדען
    • Просмотр профиля
version 0.0.9
Переходим с IPv4 на IPv6
На примере локальной сети.
Многие наверняка уже знают что такое IPv6, зачем он нужен, и когда заработает в полную силу. Я решил не оставаться в стороне от этого события и даже немного опередить его.
Сегодня некоторые провайдеры уже предоставляют доступ по IPv6, однако большинство предпочитает дожидаться "жареного петуха".
Для тех, кто не знает что такое IPv6, рекомендую заглянуть хотя бы в Википедию.
Итак начнём.
Действующие лица: PC-марштуизатор на Ubuntu 10.04 с поддержкой IPv6, туннельный брокер, radvd (bird, dnsmasq), bind9 (totd), dhcp 4.0 (dnsmasq), tayga, статический внешний IPv4-адрес.
Вот примерно так выглядит сеть.
Код: Text
  1.    __________________                             ____________________
  2.   /                  \                           /                    \
  3.   |   IPv4 Internet  |                           |    IPv6 Internet   |
  4.   \__________________/                           \____________________/
  5.                      \                           /
  6.                       \                         /
  7.                        \                       /
  8.                        _\_____________________/_
  9.                       /                          \
  10.                       |  IPv6+IPv4 Маршутизатор  |
  11.                       \__________________________/
  12.                                    |
  13.                                    |
  14.                                    |
  15.                             _______|________
  16.                            /                \
  17.                            | Наша IPv6 сеть |
  18.                            \________________/

I. Туннельный брокер

Первый шаг, который необходимо сделать - зарегистрировать и создать туннель, с маршрутизируемой routed/48 сетью. Российских туннельных брокеров в настоящее время нет, поэтому самым ближним от меня брокером, дающий routed/48 был украинский http://tb.netassist.ua, там я и зарегистрировал туннель.
Server IPv4 address - адрес брокера
Client IPv4 address - мой статический внешний IP
Server IPv6 address - IPv6-адрес на конце туннеля брокера
Client IPv6 address - IPv6-адрес на нашем конце туннеля
Routed /48 IPv6 network - Маршрутизируемая IPv6-сеть. Можно сказать моя :)
В итоге в /etc/network/interfaces случилась следующая запись:
Код: Bash
  1. auto na0
  2. iface na0 inet6 v4tunnel
  3.         address 2a01:d0:ffff:124::2
  4.         netmask 64
  5.         gateway 2a01:d0:ffff:124::1
  6.         endpoint 62.205.132.12
  7.         local 31.130.39.2
  8.         ttl 255
  9.         up ip l s dev $IFACE mtu 1280
  10.         post-down ip tunnel del $IFACE
Как результат в ifconfig появился псевдо-интерфейс na0:
Код: Text
  1. @localhost:~$ ifconfig na0
  2. na0       Link encap:IPv6-in-IPv4
  3.           inet6 addr: fe80::d58d:8829/128 Scope:Link
  4.           inet6 addr: 2a01:d0:ffff:124::2/64 Scope:Global
  5.           UP POINTOPOINT RUNNING NOARP  MTU:1280  Metric:1
  6.           RX packets:547813 errors:0 dropped:0 overruns:0 frame:0
  7.           TX packets:898840 errors:21 dropped:0 overruns:0 carrier:21
  8.           collisions:0 txqueuelen:0
  9.           RX bytes:49542195 (49.5 MB)  TX bytes:955494086 (955.4 MB)
  10.  
  11. @localhost:~$
Можно проверить работу:
Код: Text
  1. @localhost:~$ ping6 -n -c4 ipv6.yandex.ru
  2. PING ipv6.yandex.ru(2a02:6b8:0:261::1) 56 data bytes
  3. 64 bytes from 2a02:6b8:0:261::1: icmp_seq=1 ttl=58 time=105 ms
  4. 64 bytes from 2a02:6b8:0:261::1: icmp_seq=2 ttl=58 time=104 ms
  5. 64 bytes from 2a02:6b8:0:261::1: icmp_seq=3 ttl=58 time=104 ms
  6. 64 bytes from 2a02:6b8:0:261::1: icmp_seq=4 ttl=58 time=104 ms
  7.  
  8. --- ipv6.yandex.ru ping statistics ---
  9. 4 packets transmitted, 4 received, 0% packet loss, time 3003ms
  10. rtt min/avg/max/mdev = 104.092/104.765/105.885/0.746 ms
  11. @localhost:~$
С почином! Доступ к IPv6-интернету есть.

II. Router advertisement ( radvd | bird ) и sysctl.conf

Следующим шагом для достижения моей цели было конфигурирование параметров ядра, интерфейса IPv6 для локальной сети, установка и настройка RA.
Разрешаю форвадинг IPv6 пакетов:
Код: Bash
  1. sudo -s
  2. echo -e "net.ipv6.conf.all.forwarding = 1\nnet.ipv6.conf.default.forwarding = 1" >> /etc/sysctl.conf
  3. sysctl -p
Конфигурирую интерфейс локальной сети, у меня он обзывается vlan8, у вас может быть другим. Необходимо отметить небольшой ньюанс, для верной работы RA в режиме SLAAC (Stateless Address Autoconfiguration), маска локальной подсети обязательно должна быть равна /64. Я взял первую routed64 подсеть из моей routed48-сети.
Т.е если есть моя routed48 сеть:
2a01:00d0:8124:0000:0000:0000:0000:0000 - 2a01:00d0:8124:ffff:ffff:ffff:ffff:ffff
Тогда первая routed64:
2a01:00d0:8124:0000:0000:0000:0000:0000 - 2a01:00d0:8124:0000:ffff:ffff:ffff:ffff
/etc/network/interfaces
Код: Bash
  1. auto vlan8
  2. iface vlan8 inet6 static
  3.         address 2a01:d0:8124::1
  4.         netmask 64
  5.         vlan-raw-device eth0
Можно проверить:
Код: Text
  1. @localhost:~$ ifconfig vlan8
  2. vlan8     Link encap:Ethernet  HWaddr 70:71:bc:d5:37:00
  3.           inet6 addr: fe80::7271:bcff:fed5:3700/64 Scope:Link
  4.           inet6 addr: 2a01:d0:8124::1/64 Scope:Global
  5.           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
  6.           RX packets:12558 errors:0 dropped:0 overruns:0 frame:0
  7.           TX packets:12670 errors:0 dropped:0 overruns:0 carrier:0
  8.           collisions:0 txqueuelen:0
  9.           RX bytes:3004490 (3.0 MB)  TX bytes:4360278 (4.3 MB)
  10.  
  11. @localhost:~$
(Нажмите, чтобы показать/скрыть)
(Нажмите, чтобы показать/скрыть)
Необходимо дать некоторые пояснения относительно параметра RDNSS - этот параметр отвечает за передачу адреса DNS для Linux-хостов, на которых установлен rdnssd, для Windows нужен DHCP, ну или руками выставлять сетевые реквизиты, что, как нетрудно догадаться, задача в IPv6 сетях тривиальная.

III. DHCP

Поддержка IPv6 в ISC DHCP появилась с версии 4.0.
В более младших дистрибутивах UBUNTU DCHP 4.0 включен в состав, мне же пришлось бэкпортировать сервер на 10.04 и изменить startup-скрипт для запуска DHCP в IPv6-режиме. Ниже представлю небольшой патч:
Код: Diff
  1. --- /etc/init.d/isc-dhcp-server 2013-02-11 14:34:56.633980586 +0400
  2. +++ /etc/init.d/isc-dhcp-server-ipv6    2013-02-11 14:57:39.537930379 +0400
  3. @@ -17,11 +17,11 @@
  4.  PATH=/sbin:/bin:/usr/sbin:/usr/bin
  5.  
  6.  # Default config file
  7. -CONFIG_FILE=/etc/dhcp/dhcpd.conf
  8. +CONFIG_FILE=/etc/dhcp/dhcpd6.conf
  9.  
  10.  # Allow ltsp to override
  11. -if [ -f /etc/ltsp/dhcpd.conf ]; then
  12. -       CONFIG_FILE=/etc/ltsp/dhcpd.conf
  13. +if [ -f /etc/ltsp/dhcpd6.conf ]; then
  14. +       CONFIG_FILE=/etc/ltsp/dhcpd6.conf
  15.  fi
  16.  
  17.  test -f /usr/sbin/dhcpd || exit 0
  18. @@ -37,18 +37,18 @@
  19.  
  20.  # Read init script configuration (so far only interfaces the daemon
  21.  # should listen on.)
  22. -[ -f /etc/default/isc-dhcp-server ] && . /etc/default/isc-dhcp-server
  23. +[ -f /etc/default/isc-dhcp-server-ipv6 ] && . /etc/default/isc-dhcp-server-ipv6
  24.  
  25.  NAME=dhcpd
  26. -DESC="ISC DHCP server"
  27. -DHCPDPID=/var/run/dhcp-server/dhcpd.pid
  28. +DESC="ISC DHCPv6 server"
  29. +DHCPDPID=/var/run/dhcp-server/dhcpd6.pid
  30.  
  31.  test_config()
  32.  {
  33. -       if ! /usr/sbin/dhcpd -t -q -cf $CONFIG_FILE > /dev/null 2>&1; then
  34. +       if ! /usr/sbin/dhcpd -6 -t -q -cf $CONFIG_FILE > /dev/null 2>&1; then
  35.                 echo "dhcpd self-test failed. Please fix the config file."
  36.                 echo "The error was: "
  37. -               /usr/sbin/dhcpd -t -cf $CONFIG_FILE
  38. +               /usr/sbin/dhcpd -6 -t -cf $CONFIG_FILE
  39.                 exit 1
  40.         fi
  41.  }
  42. @@ -77,14 +77,14 @@
  43.                 # allow dhcp server to write lease and pid file
  44.                 mkdir -p /var/run/dhcp-server
  45.                 chown dhcpd:dhcpd /var/run/dhcp-server
  46. -               [ -e /var/lib/dhcp/dhcpd.leases ] || touch /var/lib/dhcp/dhcpd.leases
  47. -               chown dhcpd:dhcpd /var/lib/dhcp /var/lib/dhcp/dhcpd.leases
  48. -               if [ -e /var/lib/dhcp/dhcpd.leases~ ]; then
  49. -                   chown dhcpd:dhcpd /var/lib/dhcp/dhcpd.leases~
  50. +               [ -e /var/lib/dhcp/dhcpd6.leases ] || touch /var/lib/dhcp/dhcpd6.leases
  51. +               chown dhcpd:dhcpd /var/lib/dhcp /var/lib/dhcp/dhcpd6.leases
  52. +               if [ -e /var/lib/dhcp/dhcpd6.leases~ ]; then
  53. +                   chown dhcpd:dhcpd /var/lib/dhcp/dhcpd6.leases~
  54.                 fi
  55.  
  56.                 start-stop-daemon --start --quiet --pidfile $DHCPDPID \
  57. -                       --exec /usr/sbin/dhcpd -- -q -pf $DHCPDPID -cf $CONFIG_FILE $INTERFACES
  58. +                       --exec /usr/sbin/dhcpd -- -q -pf $DHCPDPID -6 -cf $CONFIG_FILE $INTERFACES
  59.                 sleep 2
  60.  
  61.                 if check_status -q; then
  62.  
Следует скопировать /etc/default/isc-dhcp-server в /etc/default/isc-dhcp-server-ipv6, и указать интерфейс, который будетслушать DHCPv6-сервер.
Смысл использования DHCP 4.0 прост. Как известно, в Майкрософте читают RFC по-своему, и только для передачи Windows-хостам адреса DNS-сервера нужен DHCP, поэтому я указал одну единственную опцию - передачу DNS.
/etc/dhcp/dhcpd.conf
Код: Bash
  1. ddns-update-style interim;
  2. default-lease-time 43200;
  3. max-lease-time 86400;
  4. log-facility local7;
  5. subnet6 2a01:d0:8124::/64 {
  6.         option dhcp6.name-servers 2a01:d0:8124::1;
  7. }
  8.  
Основная задача по конфигурированию IPv6 сети сделана. Но нашей сети будет доступен только IPv6 интернет, а что же делать с IPv4?

IV. Tayga (NAT64)

Официальная станица проекта - http://www.litech.org/tayga/
В кратце этот демон транслирует IPv4 в IPv6. Для настройки мне нужно было выделить еще одну подсеть из моей routed48-сети, но с маской /96 - туда аккурат влезает весь IPv4-интернет. Я взял 2a01:d0:8124:2:ffff::/96
Конфигурация выглядит следующим образом:
/etc/tayga.conf
Код: Bash
  1. tun-device nat64 # Интерфейс транслирования IPv4 в IPv6
  2. ipv4-addr 192.168.255.1 # Адрес IPv4 для NAT
  3. ipv6-addr 2a01:d0:8124::2 # Адрес IPv6 для NAT64
  4. prefix 2a01:d0:8124:2:ffff::/96 # Сеть для трансляции IPv4 в IPv6
  5. dynamic-pool 192.168.255.0/24 # Сеть IPv4 для NAT
  6. data-dir /var/spool/tayga # Файлы с данными
Также небходимо добавить правило NAT iptables для NAT64:
Код: Text
  1. iptables -t nat -A POSTROUTING -s 192.168.255.0/24 -j MASQUERADE
Так как для Ubuntu нет собранных пакетов, то вполне можно занять их у папаши Debian'а
http://packages.debian.org/sid/tayga - init-скрипт сам добавит NAT
Или собрать самому.
Проверяю работу:
Код: Text
  1. @localhost:~$ ifconfig nat64
  2. nat64     Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
  3.           UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
  4.           RX packets:8529 errors:0 dropped:0 overruns:0 frame:0
  5.           TX packets:8529 errors:0 dropped:0 overruns:0 carrier:0
  6.           collisions:0 txqueuelen:500
  7.           RX bytes:4359464 (4.3 MB)  TX bytes:4336364 (4.3 MB)
  8.  
  9. @localhost:~$

Код: Text
  1. C:\>tracert 2a01:d0:8124:2:ffff::212.1.224.34
  2.  
  3. Трассировка маршрута к 2a01:d0:8124:2:ffff:0:d401:e022 с максимальным числом прыжков
  4.  
  5.   1    <1 мс    <1 мс    <1 мс  2a01:d0:8124::1
  6.   2    <1 мс    <1 мс    <1 мс  2a01:d0:8124::2
  7.   3     *        *        *     Превышен интервал ожидания для запроса.
  8.   4    <1 мс     1 ms    <1 мс  2a01:d0:8124:2:ffff:0:d401:fe73
  9.   5    <1 мс    <1 мс    <1 мс  2a01:d0:8124:2:ffff:0:d401:fc21
  10.   6     1 ms     1 ms     1 ms  2a01:d0:8124:2:ffff:0:d401:fbb2
  11.   7     1 ms     1 ms     1 ms  2a01:d0:8124:2:ffff:0:d401:e022
  12.  
  13. Трассировка завершена.
  14.  
  15. C:\>
Видно, что 2a01:d0:8124:2:ffff: это моя сеть, а 0:d401:e022 - это преобразованный в часть ipv6-адреса - 212.1.224.34.
Как же быть с именами?

V. DNS. Bind9 или totd

totd - маленький dns64-форвадер, преобразует FQDN в ipv6 адреса заданной подсети. Есть в репазитарии. Чрезвычайно прост.
/etc/totd.conf
Код: Text
  1. forwarder 212.1.224.34 port 53 # Откуда брать имена
  2. prefix 2a01:d0:8124:2:ffff:: # NAT64 - подсеть
  3. port 53 # Какой порт слушать
  4. pidfile /var/run/totd.pid
  5. interfaces lo vlan6 # Какие интерфейсы слушать
Bind9 - знаменитый DNS-сервер, ньюанс заключается в том, что функция dns64 в нем появилась с версии 9.8.0, поэтому опять пришлось заниматься бэкпортированием  на 10.04
Настройка dns64 сводится к тому, что в опцию добавляется следующее:
/etc/bind/named.conf.options
Код: Bash
  1. options {
  2.         // Skip
  3.         dns64 2a01:d0:8124:2:ffff::/96 // Моя NAT64 - подсеть
  4.         {
  5.                 clients { 2a01:d0:8124::/64; }; // Моя routed64 подсеть
  6.         };
  7.         // Skip
  8. };
  9.  

VI. DNSmasq. (вместо пунктов II, III, и частично V)

Что же, тем кому знаком этот сервер, приятно будет узнать, что он вполне себе может работать как RouterAdvertisement, DHCPv6, и кеширующий DNS, правда использовать его пока можно в первых двух эпостасиях, (функция dns64 ему пока не доступна). Испробовано на v2.62. Пример конфигурации /etc/dnsmasq.conf
Код: Text
  1. port=0
  2. enable-ra
  3. # конфигурация dhcp6
  4. dhcp-range=2a01:d0:8124::2, 2a01:d0:8124::ffff, 64, 12h
  5. dhcp-option=option6:dns-server,[2a01:d0:8124::1]
  6. # конфигурация SLAAC
  7. dhcp-range=2a01:d0:8124::2, 2a01:d0:8124::ffff:ffff, slaac, 64, 12h
  8.  
Примечание: Для корректной работы в сетях ipv6, с DHCPv6-сервером, версия dhclient должна быть >= 4.1. Такая версия dhclient поставляется с дистрибутивом Ubuntu 11.10 и младше.

VII. Заключение

Этот мини-ЧаВо не претеднует на пошаговое действие, он лишь пытается объяснить принцип настройки оборудования для небольшой сети, предоставив возможность перейти на IPv6.
Так сейчас выглядит хост в этой сети, с которого и был написан этот пост.
Код: Text
  1. C:\>ipconfig -all
  2.  
  3. Настройка протокола IP для Windows
  4.  
  5.    Имя компьютера  . . . . . . . . . : workstation
  6.    Основной DNS-суффикс  . . . . . . :
  7.    Тип узла. . . . . . . . . . . . . : Смешанный
  8.    IP-маршрутизация включена . . . . : Нет
  9.    WINS-прокси включен . . . . . . . : Нет
  10.    Порядок просмотра суффиксов DNS . : linux.lan
  11.  
  12. Ethernet adapter Подключение по локальной сети 2:
  13.  
  14.    DNS-суффикс подключения . . . . . :
  15.    Описание. . . . . . . . . . . . . : Microsoft Windows Mobile Remote Adapter
  16.    Физический адрес. . . . . . . . . : 80-00-60-0F-E8-00
  17.    DHCP включен. . . . . . . . . . . : Да
  18.    Автонастройка включена. . . . . . : Да
  19.    IPv4-адрес. . . . . . . . . . . . : 169.254.2.2(Основной)
  20.    Маска подсети . . . . . . . . . . : 255.255.255.0
  21.    Аренда получена. . . . . . . . . . : 16 марта 2012 г. 11:10:58
  22.    Срок аренды истекает. . . . . . . . . . : 15 апреля 2012 г. 11:10:58
  23.    Основной шлюз. . . . . . . . . :
  24.    DHCP-сервер. . . . . . . . . . . : 169.254.2.1
  25.    NetBios через TCP/IP. . . . . . . . : Включен
  26.  
  27. Ethernet adapter Подключение по локальной сети:
  28.  
  29.    DNS-суффикс подключения . . . . . : linux.lan
  30.    Описание. . . . . . . . . . . . . : NVIDIA nForce 10/100/1000 Mbps Ethernet
  31.    Физический адрес. . . . . . . . . : F4-6D-04-94-C8-1D
  32.    DHCP включен. . . . . . . . . . . : Да
  33.    Автонастройка включена. . . . . . : Да
  34.    IPv6-адрес. . . . . . . . . . . . : 2a01:d0:8124:0:183c:3cb0:45c3:38d6(Основной)
  35.    Локальный IPv6-адрес канала . . . : fe80::183c:3cb0:45c3:38d6%11(Основной)
  36.    Основной шлюз. . . . . . . . . : fe80::7271:bcff:fed5:3700%11
  37.    IAID DHCPv6 . . . . . . . . . . . : 250899716
  38.    DUID клиента DHCPv6 . . . . . . . : 00-01-00-01-15-BC-2F-8E-F4-6D-04-94-C8-1D
  39.    DNS-серверы. . . . . . . . . . . : 2a01:d0:8124::1
  40.    NetBios через TCP/IP. . . . . . . . : Отключен
  41.  
  42. C:\>tracert forum.ubuntu.ru
  43.  
  44. Трассировка маршрута к forum.ubuntu.ru [2a01:d0:8124:2:ffff:0:d56c:fc99]
  45. с максимальным числом прыжков 30:
  46.  
  47.   1    <1 мс    <1 мс    <1 мс  ipv6-gw.linux.lan [2a01:d0:8124::1]
  48.   2    <1 мс    <1 мс    <1 мс  nat64.linux.lan [2a01:d0:8124::2]
  49.   3    <1 мс    <1 мс    <1 мс  2a01:d0:8124:2:ffff:0:1f82:2702
  50.   4     1 ms    <1 мс    <1 мс  2a01:d0:8124:2:ffff:0:1f82:2701
  51.   5    <1 мс    <1 мс    <1 мс  2a01:d0:8124:2:ffff:0:1f82:27fe
  52.   6    <1 мс    <1 мс    <1 мс  2a01:d0:8124:2:ffff:0:d56d:1ffb
  53.   7    <1 мс    <1 мс    <1 мс  2a01:d0:8124:2:ffff:0:c0a8:c8fd
  54.   8     1 ms     1 ms     1 ms  vl-989.br1.msk1.ip.di-net.ru [2a01:d0:8124:2:ffff:0:c1e8:f458]
  55.   9     1 ms     1 ms     1 ms  vl-711.br2.msk1.ip.di-net.ru [2a01:d0:8124:2:ffff:0:d5f8:388]
  56.  10     2 ms     2 ms     1 ms  te1-4.sr3.msk7.ip.di-net.ru [2a01:d0:8124:2:ffff:0:d5f8:3bf]
  57.  11     2 ms     2 ms     2 ms  2a01:d0:8124:2:ffff:0:59d0:883e
  58.  12     3 ms     2 ms     2 ms  s2.ubuntu.ru [2a01:d0:8124:2:ffff:0:d56c:fc99]
  59.  
  60. Трассировка завершена.
  61.  
  62. C:\>
  63.  
В более новых дистрибутивах наверняка нет проблем с бэкпортированием и все необходимые пакеты, надеюсь, будут присутствовать в репозитарии.
Трудности, которые могут возникнуть в работе IPv6-сети, связаны с программным обеспечением, которое до сих пор не научилась работать с протоколом новой версии, такие, как например как Skype и операционных систем Microsoft старше Windows Vista, которые не могут полностью отказаться от IPv4, из-за проблем с DNS.   (опять привет Microsoft'у).
Спасибо за внимание!

Добавлено (09.IX.2013): Поинтересуйтесь у провайдера, в доступности протокола 41 абонентам, как выяснилось, некоторые провайдеры могут блокировать его.

VIII Эпилог. PREFIX DELEGATION. DHCPv6-PD

Что это такое и зачем оно нужно.
Prefix Delegation (далее PD) — это совокупность условий при котором абонентскому маршрутизатору выделяется собственная подсеть, машрутизируемая в Интернет.
Сразу хочу отметить, что механизм работы похожий на PD можно получить и в ipv4, в ipv6 PD является частью сетевого протокола.
В кратце, как это выглядит:
- Абонентский маршутизатор формирует dhcpv6 пакет с запросом на PD.
- Провайдерский dhcpv6-сервер отвечает пакетом, в котором содержится информация о выделяемой подсети, посылает информацию на провайдреский маршрутизатор о машруте на выделяемую подсеть через link-local абоненского маршрутизатора, провайдерский маршрутизатор добавляет маршрут на выделяемую подсеть.
В примере будет рассмотрен частный случай, когда dhcpv6-сервер и шлюз находятся на одной машине, если кто-то хочет дополнить пример, когда шлюз и dhcpv6-сервер находятся на разных хостах, буду только рад.
О недостатках в программном обеспечении ISC.
dhclient вплоть до крайних версий содержит достаточно странную конфигурацию, когда на интерфейс присваивается адрес с префиксом 64 и меньше, из-за этого могут возникать некторые коллизии в таблице маршрутизации, чтобы избежать этого, необходимо присваивать адрес с префиксом 128 (кстати говоря, Windows это делает искаропки).  Чтобы добиться этого, для isc-dhcp-client версий =<4.2 необходимо применить патч
(Нажмите, чтобы показать/скрыть)
Для версий >=4.3 применить вот такой
(Нажмите, чтобы показать/скрыть)
Другие dhcp-клиенты (dhcp6c/udhcpc/wide-dhcp/dibbler) не рассматривал. Заработало в "штатной" поставке.
Рассмотрим два варианта, первом случае будем пытаться запросить PD у провайдера, во втором случае сами будем выступать в роли провайдера.
Для получения PD у провайдера достаточно запустить dhclient c нужными флагами. В общем случае, смотрим man dhclient и в if-up.d/ пишем скрипт следующего содержания.
Код: Bash
  1. #!/bin/sh
  2. # if-up script for dhcpv6-pd
  3. # default wan iface - eth0
  4. test -x $(which dhclient) && DHCL=$(which dhclient) || exit 0
  5. case $IFACE in
  6.         eth0)
  7.                 $DHCL -6 -P -N -cf /etc/dhcp/dhclient6.conf \
  8.                         -lf /var/lib/dhcp/dhclient6.${IFACE}.lease \
  9.                         -pf /var/run/dhclient6.${IFACE}.pid $IFACE
  10.         ;;
  11.         *)
  12.                 exit 0
  13.         ;;
  14. esac
  15.  
  16. exit $?
   
где:
-6 - переходить в режим ipv6
-P - запрашивать PD (ia-pd)
-N - запрашивать адрес (ia-na)
-cf - путь к конфиг файлу
-lf - путь к файлу с лизами (leases)
-pf - путь к PID-файлу
и dhclient6.conf следующего содержания:
Код: Text
  1. # file: /etc/dhcp/dhclient6.conf
  2.  request dhcp6.domain-search, dhcp6.name-servers, dhcp6.reconf-accept, dhcp6.ia-pd, dhcp6.ia-na;
В случае успеха провайдер Вам выделит подсеть, её значение можно подсмотреть в /var/lib/dhcp/dhclient6.${IFACE}.lease, который мы указали в if-up.d
 
Код: Text
  1. awk '/iaprefix/{print $2}' /var/lib/dhcp/dhclient6.eth0.lease
Дальнейшая настройка описана выше и с этим более-менее понятно.
 Так-как провайдеры обычно делегируют префиксы сетей 48, 56, 64 то в адренду нам достаётся туева хуча адресного пространства, которое грех не поделить на подсетки поменьше, выдавая их уже своим локальным клиентам, эдакое Prefix Delegation after Prefix Delegation. Уже есть вопросы, а типа нахрена? Отвечу в украинской манере: "а щоб було!". Если в протоколе есть этот функционал, надо его использовать! Масштабируемость сети — задел на будущее. ;)
Изучая этот вопрос и проводя эксперименты на стенде выяснил, что вполне себе можно делегировать ЛЮБОЙ префикс. Для простоты понимания приведу пример с префиксом /120, который по ёмкости аналог /24 в четвёртой версии протокола.
Принцип прост как яичница: при DHCP-запросе на сервер, необходимо составить триггер, который бы реагировал на опцию PD в запросе dhcp-клиентов, записывая маршут на сеть через link-local абоненского машрутизатора, а так же удалял его при истечении аренды PD. Вероятно существует и другое ПО способное выдавать PD, не искал. В моём случае выбор пал на ISC-DHCP версии 4.3.1. Почему именно 4.3.1?
Дело в том, что в isc-dhcpd есть замечательная опция execute, которая позволяет выполнить произвольные команды на сервере, однако в версии 4.2 при работе сервера в режиме ipv6 это не работает, а в версиях выше уже ограничили PD префиксами <= /64 в пределах объявленной subnet6. 4.3.1 выполняет execute в режиме v6 с ЛЮБЫМИ префиксами и ЛЮБЫМИ сетями.
Честно говоря, конфигурация получилась нетривиальная, пришлось подглядеть её тут http://bnpcs.blogspot.com/2013/05/isc-dhcpd-programming-fun-attempting-to.html
Вот, что получилось:
(Нажмите, чтобы показать/скрыть)
Конфигурация клиентских роутеров на Linux требует принудительно указывать на каком интерфейсе слушать Route Advertisement. Это можно сделать в interfaces, указав в строфе с wan-интефейсом accept_ra 2
Код: Text
  1. # example of interfaces file
  2. auto eth0
  3. iface eth0 inet manual
  4.         up ip l s dev $IFACE up
  5.         accept_ra 2
  6.         down ip l s dev $IFACE down
Либо в /etc/sysctl.conf
Код: Text
  1. net.ipv6.conf.eth0.accept_ra = 2
Дальнейшая настройка описана выше  и не требует дополнительной конфигурации при условии, что клиенты за абонентским маршрутизатором получают адреса по dhcpv6.
PS Пользуясь случаем, хочется передать привет разработчикам  Android, в котором до сих пор не реализована поддержка ipv6-stateful.
« Последнее редактирование: 10 Август 2015, 22:55:21 от koshev »
Debian GNU\Linux 7.11; ICH7; r8169; Linux 4.6.0-atomd525mv-ja1 (i686)

Оффлайн koshev

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1639
  • חתול המדען
    • Просмотр профиля
Обновлено.
Добавлен пример конфигурации RA с помощью демона маршрутизации BIRD.
Добавлен пример для DNSmasq.
Debian GNU\Linux 7.11; ICH7; r8169; Linux 4.6.0-atomd525mv-ja1 (i686)

Оффлайн ee99393

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Спасибо за статью. Очень полезно.
Только почему у Вас префикс 2a01:d0:8124:2:ffff::
Разве не 0:0:0:ffff:: для трансляции?
У Вас там сейчас прохи открытый.

Оффлайн koshev

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1639
  • חתול המדען
    • Просмотр профиля
Баг в ifupdown c методом получения IPv6 с помощью DHCPv6-сервера. #1013597.
Актуально для текущего LTS - Ubuntu 12.04.

Пользователь решил продолжить мысль 07 Июль 2012, 22:38:38:
Только почему у Вас префикс 2a01:d0:8124:2:ffff::
Разве не 0:0:0:ffff:: для трансляции?
Не для этого случая.
http://www.litech.org/tayga/
Цитировать
prefix 2001:db8:1:ffff::/96              (replace with an unused /96 prefix from your site's address range)
У Вас там сейчас прохи открытый
Даже больше скажу, там сейчас и ссх наружу торчит ;)
« Последнее редактирование: 07 Июль 2012, 22:38:38 от KT315 »
Debian GNU\Linux 7.11; ICH7; r8169; Linux 4.6.0-atomd525mv-ja1 (i686)

Оффлайн Malamut

  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3306
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Re: [Mini FAQ] Безболезненный переход с IPv4 на IPv6.
« Ответ #4 : 08 Январь 2013, 01:14:29 »
Тема прикреплена.
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

Оффлайн Humpty

  • Новичок
  • *
  • Сообщений: 41
    • Просмотр профиля
    • BarList.RU - рецепты коктейлей
Настраивал по мануалу.

Клиент у меня линуксовый, ubuntu 12.10
Всё вроде работает, адреса и DNS выдаются, гугл по ipv6 пингуется, сайты открываются по 4 и по 6, черепашка на kame пляшет.

Вопрос 1
Что за фигня в таблице маршрутизации, нахрена дефолтных гейтвеев два, и оба идут через link-local:
ksh@svs ~ $ ip -6 r
2a01:d0:8852::/64 dev eth0  proto kernel  metric 256  expires 86026sec
fe80::/64 dev eth0  proto kernel  metric 256
default via fe80::230:18ff:fea0:fd43 dev eth0  proto static  metric 1
default via fe80::230:18ff:fea0:fd43 dev eth0  proto kernel  metric 1024  expires 1415sec

Вопрос 2
Через SLAAC интерфейс получает 2 адреса, один на основе MAC, другой случайный для целей приватности. Если ходить на V6-ресурсы, то заходишь именно со случайного адреса. А на базе MAC даётся всегда один и тот же, чтобы скажем "приколотить" хост например в DNS.
А вот почему же в нём мой MAC искажается (50 заменяется на 52)?

ksh@svs ~ $ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 50:e5:49:e4:e7:37 brd ff:ff:ff:ff:ff:ff
    inet 192.168.50.11/25 brd 192.168.50.127 scope global eth0
    inet6 2a01:d0:8852:0:1855:e799:2ece:ebb4/64 scope global temporary dynamic
       valid_lft 86279sec preferred_lft 14279sec
    inet6 2a01:d0:8852:0:52e5:49ff:fee4:e737/64 scope global dynamic
       valid_lft 86279sec preferred_lft 14279sec
    inet6 fe80::52e5:49ff:fee4:e737/64 scope link
       valid_lft forever preferred_lft forever
Дельфин будет жить. А я умру.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 24216
    • Просмотр профиля
1.
default via fe80::230:18ff:fea0:fd43 dev eth0  proto static  metric 1

Маршрут прописан руками, я так полагаю.

2.
А вы уверены, что у вас нигде подмена мака не настроена?
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн koshev

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1639
  • חתול המדען
    • Просмотр профиля
Вопрос 1
Что за фигня в таблице маршрутизации, нахрена дефолтных гейтвеев два, и оба идут через link-local:
ksh@svs ~ $ ip -6 r
2a01:d0:8852::/64 dev eth0  proto kernel  metric 256  expires 86026sec
fe80::/64 dev eth0  proto kernel  metric 256
default via fe80::230:18ff:fea0:fd43 dev eth0  proto static  metric 1
default via fe80::230:18ff:fea0:fd43 dev eth0  proto kernel  metric 1024  expires 1415sec
Что касается link-local, то так работает router advertisement, что касается двух гетвеев, поищите баги в багтрекере на этот предмет, вероятно, Вы сможете прикрепить новый тикет ;) От себя лишь могу добавить, что при получении адреса методом dhcp с маской больше 64, ifupdown всё равно присваивает маску 64 ( у меня две сети /120 и /125 ), хотя сами_знаете_в_какой_ОС все отлично.
Вопрос 2
Через SLAAC интерфейс получает 2 адреса, один на основе MAC, другой случайный для целей приватности. Если ходить на V6-ресурсы, то заходишь именно со случайного адреса. А на базе MAC даётся всегда один и тот же, чтобы скажем "приколотить" хост например в DNS.
А вот почему же в нём мой MAC искажается (50 заменяется на 52)?

(Нажмите, чтобы показать/скрыть)
А потому что адрес назначается не на основе MAC, а на основе link-local.
Debian GNU\Linux 7.11; ICH7; r8169; Linux 4.6.0-atomd525mv-ja1 (i686)

Оффлайн Humpty

  • Новичок
  • *
  • Сообщений: 41
    • Просмотр профиля
    • BarList.RU - рецепты коктейлей
Что касается link-local, то так работает router advertisement, что касается двух гетвеев, поищите баги в багтрекере на этот предмет, вероятно, Вы сможете прикрепить новый тикет ;)

По поводу двух гейтвеев.
Интерфейс, походу, один раз маршрут получает через ifupdown, второй раз - через networkmanager.
Если в networkmanager-е поставить на вкладке IPV6 "игнорировать", то адреса всё равно конфигурируются, а таблица маршрутизации приобретает вполне кошерный вид:

(Нажмите, чтобы показать/скрыть)

Но настройки DNS при этом машина не получает.

Странно, что /etc/network/interfaces при этом девственно чист. Это баг ifupdown или фича такая?

(Нажмите, чтобы показать/скрыть)

Цитировать
А потому что адрес назначается не на основе MAC, а на основе link-local.

Ну а link-local на основе чего назначается?
Почему к первому октету плюсуется 2? Посмотрел на сервере - та же самая ситуация, +2 к первому октету.
« Последнее редактирование: 01 Март 2013, 23:20:45 от Humpty »
Дельфин будет жить. А я умру.

Оффлайн koshev

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1639
  • חתול המדען
    • Просмотр профиля
Цитировать
Ну а link-local на основе чего назначается?
На основе hardware address, но это вовсе не означает, что оно должно его повторить его в точности.
Такое поведение описано в RFC4862.
Debian GNU\Linux 7.11; ICH7; r8169; Linux 4.6.0-atomd525mv-ja1 (i686)

Оффлайн AT-2000

  • Новичок
  • *
  • Сообщений: 33
  • Zp.ua
    • Просмотр профиля
Цитировать
I. Туннельный брокер
Первый шаг, который необходимо сделать - зарегистрировать и создать туннель, с маршрутизируемой routed/48 сетью.
А вообще без него можно? в windows7 без него

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6942
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
AT-2000, можно. Miredo Вам в помощь.
sudo apt-get install miredoТакой вопрос к знающим людям: Если сидишь за NAT, то брокер бесполезен?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 24216
    • Просмотр профиля
Цитировать
I. Туннельный брокер
Первый шаг, который необходимо сделать - зарегистрировать и создать туннель, с маршрутизируемой routed/48 сетью.
А вообще без него можно? в windows7 без него
Можно, если у вас есть свой IPv4 адрес, либо провайдер предоставляет IPv6.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн koshev

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1639
  • חתול המדען
    • Просмотр профиля
Если сидишь за NAT, то брокер бесполезен?
По идее бесполезен, как и 6to4.
Debian GNU\Linux 7.11; ICH7; r8169; Linux 4.6.0-atomd525mv-ja1 (i686)

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6942
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Ну miredo даёт доступ к ipv6 сайтам, но ip серый, так что доступ только к реальному IP, как я понимаю. Например http://ipv6.yandex.ru/ у меня открывается. Правильно ли я понимаю, что соединение между двумя таким компьютерами невозможно без доступа к маршрутиризатору и осуществлению проброса портов, но соединение между одним компьютером за натом и другим компьютером с реальным IPv6 будет проходить без проблем, независимо от того, кто является инициатором соединения?

 

Страница сгенерирована за 0.523 секунд. Запросов: 23.