Настрой себе IPv6 за несколько простых шагов.
Настраивать будем Debian Squeeze. В Ubuntu в принципе то же самое.
Заходим на сайт Hurricane Electric, регистрируемся. Логинимся на сайте, и создаём туннель: вписываем свой IPv4 адрес и выбираем сервер поближе. Нам выделяют одну /64 подсеть, в которой будут находиться сервер и клиент как конечные точки туннеля.
В подсети /64 туннеля первый адрес — адрес сервера, второй — адрес клиента (то есть, наш).
Если у вас есть локальная сеть и вы хотите чтобы все машины в ней тоже получили IPv6 адреса, то запрашиваем ещё одну /64 подсеть («routed /64»). Если у вас 2 или более локальных сети за роутером, то запрашиваем /48 подсеть («routed /48»), которую будем нарезать на нужное количество /64. Все выделенные нам подсети будут маршрутизироваться через наш сервер.
Настраиваем туннель — интерфейс he-ipv6. Здесь используем подсеть /64 для туннеля. Вместо «переменных» вводим то, что получили на первом шаге.
Дописываем в конец /etc/network/interfaces
Включаем и проверяем:
К сожалению, ipv6.google.com — единственная DNS запись Google, которая резолвится в IPv6 для всех. Google решил пока не резолвить все сервисы в IPv6 из-за того, что на довольно большом числе машин он неправильно настроен или неправильно отключен, в связи с чем пользователь может увидеть задержку пока браузер пытается соединиться с сервером по IPv6, а на самом деле IPv6 соединения нет.
Подробнее: www.google.com/intl/en/ipv6
Таким образом, Google решил включать IPv6 в DNS в масштабе отдельных провайдеров. Hurricane Electric относится как раз к таким провайдерам. Они предоставляют DNS сервер 2001:470:20::2, через который все домены сервисов Google резолвятся в том числе и в IPv6 адреса.
Можно сразу вписать в /etc/resolv.conf этот сервер, а можно поднять локальный кеширующий bind и немного выиграть в скорости.
Есть два способа настройки: можно резолвить через этот сервер только адреса Google (но нужно знать их список), а можно резолвить вообще всё (и не использовать DNS серверы провайдера вообще). Предлагаю второй способ, он проще, и к тому же у меня нет списка всех адресов сервисов Google.
Правим файл /etc/bind/named.conf.options
Проверяем:
Если всё хорошо, то можно использовать. Вписываем в /etc/resolv.conf
Если нет локальной сети — то всё готово :)
Для настройки машин в локальной сети предлагаю использовать stateless autoconfiguration. Это чем-то напоминает DHCP, но разница в том, что этот протокол staleless, то есть, сервер не хранит список выданных адресов. Принцип работы следующий: серверу выделяется одна /64, из которой он раздаёт адреса клиентам. Уникальность полученного IPv6-адреса обеспечивается тем, что в него включается MAC адрес клиента (немного преобразованный).
Пусть у нас на eth0 локальная сеть, а на eth1 — провайдер. Пока что IPv6 настроен только на интерфейсе he-ipv6. Поэтому eth0, смотрящий в локальную сеть должен получить статический IPv6-адрес для установки соединений с клиентами. Но мы не может назначить eth0 адрес из нашей туннельной /64, так как тогда получится что два интерфейса смотрят в одну и ту же подсеть. Можно разбить нашу /64 на две, но тогда не будет работать stateless autoconfiguration. Поэтому мы взяли себе ещё одну /64, из которой будем раздавать адреса в локальную сеть (важно подчеркнуть: это настоящие внешние IPv6 адреса). Пусть нам выдали 2001:XXXX:YYYY:ZZZZ::/64.
Если у нас несколько сетей за маршрутизатором, то мы взяли себе ещё и /48, из которой будем использовать необходимое количество подсетей /64. Пусть нам выдали 2001:XXXX:YYYY::/48. Дописываем ещё номер сети — будет занимать целых 2 байта и получаем: 2001:XXXX:YYYY:1::/64. Таким образом, у нас могло бы быть аж 65536 разных сетей. Адресом сервера будет 2001:XXXX:YYYY:1::1. Дальше пример с несколькими сетями не развиваю, думаю что довольно просто обобщить конфигурационные файлы на случай нескольких сетей.
Итак, у нас одна сеть за маршрутизатором, 2001:XXXX:YYYY:ZZZZ::/64. Дописываем в конец /etc/network/interfaces
Устанавливаем демона для stateless autoconfiguration:
/etc/radvd.conf
Включаем форвардинг:
/etc/sysctl.conf
Перезапускаем radvd:
Теперь все компьютеры из локальной сети должны автоматически получить IPv6 адреса и адрес шлюз. За процессом можно следить на сервере при помощи команды radvdump, а на клиентах проверять наличие адреса при помощи ip -6 a.
DNS-сервер придётся прописать клиентам вручную, stateless autoconfiguration этого не умеет.
Так как адреса клиентов основываются на MAC адресах, то в результате получаются адреса вида: 2001:528d:d4b6:1:215:f2ff:fe55:2d85. Работать с этим довольно тяжело, запомнить — невозможно. На помощь приходит multicast dns и его реализация в виде Avahi.
Проверяем наличие в /etc/avahi/avahi-daemon.conf строк:
Теперь все компьютеры в локальной сети получат имена вида hostname.local. Эти имена будут резолвиться по умолчанию в IPv4 адреса. Чтобы они резолвились по умолчанию в IPv6, правим строчку в /etc/nsswitch.conf.
Было:
Стало:
Теперь можно использовать имена hostname.local и по умолчанию будут устанавливаться IPv6 соединения.
Держите кеширующий прокси в локальной сети? Небольшая проблема: Squid получил полноценную поддержку IPv6 только в версии 3.1.0.x, которая сейчас находится в репозитории experimental. На самом деле ничего особо экспериментального, у меня нормально работает уже 4 месяца.
Устанавливаем squid3, в разрешающий ACL вписываем наши сети /64 и /48.
Удачных экспериментов!
UPD. На linuxforum заметили, что Hurricane Electric выдаёт две /64, поэтому запрашивать /48 с одной локальной сетью не нужно. Обновил топик.
UPD2. В связи с появившимися копипастами напомнимаю, что перепечатка разрешена только с моего разрешения.
Настраивать будем Debian Squeeze. В Ubuntu в принципе то же самое.
Шаг 1. Регистрируем туннель
Заходим на сайт Hurricane Electric, регистрируемся. Логинимся на сайте, и создаём туннель: вписываем свой IPv4 адрес и выбираем сервер поближе. Нам выделяют одну /64 подсеть, в которой будут находиться сервер и клиент как конечные точки туннеля.
В подсети /64 туннеля первый адрес — адрес сервера, второй — адрес клиента (то есть, наш).
Если у вас есть локальная сеть и вы хотите чтобы все машины в ней тоже получили IPv6 адреса, то запрашиваем ещё одну /64 подсеть («routed /64»). Если у вас 2 или более локальных сети за роутером, то запрашиваем /48 подсеть («routed /48»), которую будем нарезать на нужное количество /64. Все выделенные нам подсети будут маршрутизироваться через наш сервер.
Шаг 2. Настраиваем IPv6
Настраиваем туннель — интерфейс he-ipv6. Здесь используем подсеть /64 для туннеля. Вместо «переменных» вводим то, что получили на первом шаге.
Дописываем в конец /etc/network/interfaces
auto he-ipv6
iface he-ipv6 inet6 v4tunnel
address $CLIENT_IPv6
netmask 64
endpoint $SERVER_IPv4
local $CLIENT_IPv4
gateway $SERVER_IPv6
ttl 64
Включаем и проверяем:
# ifup he-ipv6
# ping -n ipv6.google.com
Шаг 3. DNS и Google
К сожалению, ipv6.google.com — единственная DNS запись Google, которая резолвится в IPv6 для всех. Google решил пока не резолвить все сервисы в IPv6 из-за того, что на довольно большом числе машин он неправильно настроен или неправильно отключен, в связи с чем пользователь может увидеть задержку пока браузер пытается соединиться с сервером по IPv6, а на самом деле IPv6 соединения нет.
Подробнее: www.google.com/intl/en/ipv6
Таким образом, Google решил включать IPv6 в DNS в масштабе отдельных провайдеров. Hurricane Electric относится как раз к таким провайдерам. Они предоставляют DNS сервер 2001:470:20::2, через который все домены сервисов Google резолвятся в том числе и в IPv6 адреса.
Можно сразу вписать в /etc/resolv.conf этот сервер, а можно поднять локальный кеширующий bind и немного выиграть в скорости.
# apt-get install bind9
Есть два способа настройки: можно резолвить через этот сервер только адреса Google (но нужно знать их список), а можно резолвить вообще всё (и не использовать DNS серверы провайдера вообще). Предлагаю второй способ, он проще, и к тому же у меня нет списка всех адресов сервисов Google.
Правим файл /etc/bind/named.conf.options
acl mynetworks {
localhost;
192.168.0.0/16; // наша локальная сеть, если есть
2001:XXXX:XXXX:XXXX::/64; // наша IPv6 /64
2001:XXXX:XXXX::/48; // наша IPv6 /48, если есть
};
options {
directory "/var/cache/bind";
allow-query { mynetworks; };
forwarders {
2001:470:20::2;
};
auth-nxdomain no;
listen-on-v6 { any; };
};
Проверяем:
# dig +short google.com @::1 AAAA
2a00:1450:8003::63
2a00:1450:8003::67
2a00:1450:8003::68
2a00:1450:8003::69
2a00:1450:8003::6a
2a00:1450:8003::93
Если всё хорошо, то можно использовать. Вписываем в /etc/resolv.conf
nameserver ::1
Если нет локальной сети — то всё готово :)
Шаг 4. Маршрутизация
Для настройки машин в локальной сети предлагаю использовать stateless autoconfiguration. Это чем-то напоминает DHCP, но разница в том, что этот протокол staleless, то есть, сервер не хранит список выданных адресов. Принцип работы следующий: серверу выделяется одна /64, из которой он раздаёт адреса клиентам. Уникальность полученного IPv6-адреса обеспечивается тем, что в него включается MAC адрес клиента (немного преобразованный).
Пусть у нас на eth0 локальная сеть, а на eth1 — провайдер. Пока что IPv6 настроен только на интерфейсе he-ipv6. Поэтому eth0, смотрящий в локальную сеть должен получить статический IPv6-адрес для установки соединений с клиентами. Но мы не может назначить eth0 адрес из нашей туннельной /64, так как тогда получится что два интерфейса смотрят в одну и ту же подсеть. Можно разбить нашу /64 на две, но тогда не будет работать stateless autoconfiguration. Поэтому мы взяли себе ещё одну /64, из которой будем раздавать адреса в локальную сеть (важно подчеркнуть: это настоящие внешние IPv6 адреса). Пусть нам выдали 2001:XXXX:YYYY:ZZZZ::/64.
Если у нас несколько сетей за маршрутизатором, то мы взяли себе ещё и /48, из которой будем использовать необходимое количество подсетей /64. Пусть нам выдали 2001:XXXX:YYYY::/48. Дописываем ещё номер сети — будет занимать целых 2 байта и получаем: 2001:XXXX:YYYY:1::/64. Таким образом, у нас могло бы быть аж 65536 разных сетей. Адресом сервера будет 2001:XXXX:YYYY:1::1. Дальше пример с несколькими сетями не развиваю, думаю что довольно просто обобщить конфигурационные файлы на случай нескольких сетей.
Итак, у нас одна сеть за маршрутизатором, 2001:XXXX:YYYY:ZZZZ::/64. Дописываем в конец /etc/network/interfaces
iface eth0 inet6 static
address 2001:XXXX:YYYY:ZZZZ::1
netmask 64
Устанавливаем демона для stateless autoconfiguration:
# apt-get install radvd
/etc/radvd.conf
interface eth0
{
AdvSendAdvert on;
MaxRtrAdvInterval 30;
prefix 2001:XXXX:YYYY:ZZZZ::1/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
AdvValidLifetime 300;
AdvPreferredLifetime 120;
};
};
Включаем форвардинг:
/etc/sysctl.conf
net.ipv6.conf.all.forwarding=1
# sysctl -w net.ipv6.conf.default.forwarding=1
# echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
Перезапускаем radvd:
# invoke-rc.d radvd restart
Теперь все компьютеры из локальной сети должны автоматически получить IPv6 адреса и адрес шлюз. За процессом можно следить на сервере при помощи команды radvdump, а на клиентах проверять наличие адреса при помощи ip -6 a.
DNS-сервер придётся прописать клиентам вручную, stateless autoconfiguration этого не умеет.
Шаг 5. Avahi
Так как адреса клиентов основываются на MAC адресах, то в результате получаются адреса вида: 2001:528d:d4b6:1:215:f2ff:fe55:2d85. Работать с этим довольно тяжело, запомнить — невозможно. На помощь приходит multicast dns и его реализация в виде Avahi.
# apt-get install avahi-daemon avahi-utils
Проверяем наличие в /etc/avahi/avahi-daemon.conf строк:
[server]
use-ipv4=yes
use-ipv6=yes
Теперь все компьютеры в локальной сети получат имена вида hostname.local. Эти имена будут резолвиться по умолчанию в IPv4 адреса. Чтобы они резолвились по умолчанию в IPv6, правим строчку в /etc/nsswitch.conf.
Было:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
Стало:
hosts: files mdns_minimal [NOTFOUND=return] dns mdns
Теперь можно использовать имена hostname.local и по умолчанию будут устанавливаться IPv6 соединения.
Шаг 6. Squid + IPv6
Держите кеширующий прокси в локальной сети? Небольшая проблема: Squid получил полноценную поддержку IPv6 только в версии 3.1.0.x, которая сейчас находится в репозитории experimental. На самом деле ничего особо экспериментального, у меня нормально работает уже 4 месяца.
Устанавливаем squid3, в разрешающий ACL вписываем наши сети /64 и /48.
Удачных экспериментов!
UPD. На linuxforum заметили, что Hurricane Electric выдаёт две /64, поэтому запрашивать /48 с одной локальной сетью не нужно. Обновил топик.
UPD2. В связи с появившимися копипастами напомнимаю, что перепечатка разрешена только с моего разрешения.