Системное администрирование

индекс
199,95

Настрой себе IPv6 в Debian и Ubuntu

Настрой себе IPv6 за несколько простых шагов.

Настраивать будем 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. В связи с появившимися копипастами напомнимаю, что перепечатка разрешена только с моего разрешения.
+93
28 января 2010, 19:56
193

комментарии (73)

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
+2
stigger #
чтобы смотреть на пляшущую черепашку и юзать гугл по ipv6.

вобщем, нахрен не нужно.
НЛО прилетело и опубликовало эту надпись здесь
+2
oldengremlin #
Сейчас не нужен. Но если посмотреть на стремительно уменьшающийся список IPv4 сетей то остаётся только лишь гадать о сроке — когда?!
Имхо, а быть готовым заранее, изучить технологию — это всегда дополнительный плюс нежели наоборот.
НЛО прилетело и опубликовало эту надпись здесь
+1
stigger #
а что, если мы щас всем хабром эту процедуру проделаем то кучу v4 ip'шников освободим? а если куча народу этого сделает то они уменьшаться перестанут?

как ситуация «с настроенным ipv6 туннелем» отличается от ситуации «как есть»? в чём смысл описанных выше действий?

целесообразность перехода на ipv6 вообще я сейчас не обсуждаю, я говорю о том что смысла никакого этот дополнительный туннель ставить не вижу. покажите мне его.
НЛО прилетело и опубликовало эту надпись здесь
–9
stigger #
IPv6 принципиально отличается от IPv4? по-моему нет. какие принципы тогда тут понимать надо?
НЛО прилетело и опубликовало эту надпись здесь
–3
stigger #
читал статью на вики.
НЛО прилетело и опубликовало эту надпись здесь
+3
stigger #
поставлю вопрос по-другому. даже на два разобью.

1) если я сейчас не настрою этот туннель и не прочитаю эту книжку (а также стандарты IPv6 и вообще дальше вики не пойду) — какие затруднения меня ждут в будущем, когда мой провайдер в один прекрасный день переведёт меня на IPv6?

2) какие из этих затруднений можно было бы избежать настроив сейчас туннель IPv6?
0
gribozavr #
1. Да. Например, вы обнаружите, что ваш прокси-сервер не поддерживает IPv6. Или что у вас не настроен IPv6 фаервол и вы вообще не в курсе как его настраивать.

2. Вы проверите что всё работает однократно и выключите туннель. Или оставите туннель включённым и увидите сразу любые проблемы, которые могут возникнуть при обновлении программ.
НЛО прилетело и опубликовало эту надпись здесь
+9
sergehog #
Отличная идея! Давайте попросим НЛО перевести хабр на IPv6, чтобы в IPv4 сайт был не доступен!

Конечно же посещаемость упадет, но это даже хорошо — отсеются школьники, секретарши и прочие не гики. Зато по-настоящему преданные читатели легко настроют себе туннель и продолжат общаться :-)))
(для непонятливых — здесь смайлик стоит)
НЛО прилетело и опубликовало эту надпись здесь
0
stigger #
кроме шуток — в чём идея запуска в ipv6-only? это элементарно невыгодно.
НЛО прилетело и опубликовало эту надпись здесь
+4
EvilShadow #
Меньше /24 не роутится? Ну и хрен с ним, зато пацанам покажу!
НЛО прилетело и опубликовало эту надпись здесь
0
Tbird #
Вопрос не в том, что провайдер переведет вас на ipv6, вопрос в том, что будет когда ipv4 закончатся и новые сервера будут ipv6-only?
+2
gribozavr #
Ни у кого из пользователей нет IPv6 -> никто из владельцев серверов не имеет IPv6 -> нет смысла пользователям включать IPv6. Замкнутый круг.

НЛО прилетело и опубликовало эту надпись здесь
0
navion #
Microsoft уже три года пользователей переводит, практически у всех, кто работает под вистой и 7, уже есть доступ к адресам IPv6.
+1
gribozavr #
Только почему-то «техники» моего провайдера когда подключают Windows машину всегда первым делом отключают IPv6. И когда звонишь в техподдержку это один из дежурных вопросов «а не включен ли случайно?..» И многие «крутые компьютерщики» поступают так же.

Я никого не защищаю, я просто рассказываю реально существующие ситуации.
+2
XolodIT #
В закладки однозначно.
Я понимаю что ipv4 кончаются, но не также, поэтому: а нафига? и так всё работает.
+1
gribozavr #
Лучше пораньше проверить, что ОС и ПО будет нормально работать с введением IPv6. И заодно самому получить немного новых знаний и навыков. Делать всё потом и в спешке — не лучший вариант.

+1
bondbig #
+1 Чем ближе час Х (кончатся ipv4 адреса), тем дороже и востребованней будут опытные специалисты по ipv6.
Спасибо за отличную статью, в мемориз. Жаль плюсануть не могу.
+2
Kastrulya #
ох не найду ссылку. в книге по ipv6 была ссылка, если ты коннектился к странице по ipv6, то черепашка на странице начинала танцевать(на обложке на книге написано «Учим черепашку танцевать»)
+2
gribozavr #
+1
Kakysha #
+1
GadPetrovich #
И буквы гугла, по адресу ipv6.google.com, начинают прыгать.
НЛО прилетело и опубликовало эту надпись здесь
+1
stigger #
tunnelbroker.net этот положили чтоли?… не открывается.
0
silentroach #
надо создать какой-нибудь блог «linux для домохозяек» и складывать туда такого вида самые простые мануалы.
0
sigito #
кто ищет, тот найдет:)
0
Veter9 #
Статья хорошая, обязательно попробую завтра на работе.
Правда немного страшновато и доконца весь этот ипв6 непонятно :)

Опять же — как будет работать впн? Как (пере)настраивать файрвол? А если у меня длинк вкачестве шлюза?)
Ну куча мелких, но беспокоящих вопросов.
+1
gribozavr #
> Опять же — как будет работать впн?

Как и раньше. Маршрутизацию IPv4 пакетов мы не трогали.

> Как (пере)настраивать файрвол?

Да, для IPv6 отдельные правила фаервола. Настройку ip6tables я не описал, но по объему это на отдельную статью потянет.

> А если у меня длинк вкачестве шлюза?)

Регистрировать туннель на его внешний адрес. Включить проброс протокола 41.
+2
Veter9 #
Хотите еще один золотой топик? Напишите как раз про ip6tables :)
0
stigger #
а объясните мне тёмному, пожалуйста.

1) выданные этой организации подсети — они насколько «официальные»? это будут мои личные белый IPv6 подсети? и никто их у меня не отберёт?
2) если ответ на первый вопрос «да» — то получается когда мой провайдер начнёт поддерживать IPv6, то я смогу с этими подсетями к нему прийти? а потом перейти к другому провайдеру, сохранив при этом адреса?
0
scamp #
Если нужны свои личные адреса — при наличии существующей AS можно взять себе PI-блок Ipv6-адресов у своего LIR-а.
Hurricane Electric поддерживает BGP через туннели.
0
stigger #
нет, нету у меня никакой AS. я просто хочу понять что за адреса тут раздают. получается hurricane electric просто таким образом раздаёт адреса из своего пула?
0
gribozavr #
Да, точно также как вам провайдер тоже должен будет дать /64 (насколько я помню, такая для них рекомендация).
+1
linx56 #
Раз уж пошел разговор, кто-нить может доступно объяснить зачем локальные адреса в IPv6 перетаскивать, просто для «единообразия»?
–2
gribozavr #
Компьютеры внутри локальной сети получат полноценные внешние IPv6 адреса — разве это не хорошо?
–2
linx56 #
Ммм боюсь быть неверно истолкованным, но: принцип «не трогай, пока работает» никто не отменял. Не совсем понятен профит назначения белых адресов внутри локалки, если к ним в интересах безопасности режется доступ снаружи на том же шлюзе которому конечно такой адрес нужен.

Может дело в костылях маршрутизации для такой сетки? Типа надо уметь ходить и по таким адресам и по «не таким»?
0
gribozavr #
> если к ним в интересах безопасности режется доступ снаружи на том же шлюзе

Не понял. В статье показано так, что ничего не режется. Это наоборот нужно кроме всего вышеперечисленного ещё фаервол настроить, и зарезать лишнее.
0
linx56 #
Пардон :) стоило уточнить, что я уже не про сетку из статьи, а просто о сферической сетке в вакууме. Обычно же все-таки режут доступ на шлюзе.
0
gribozavr #
Пусть режут, но режут лишнее. Ведь это удобно: торренты работают «из коробки», нет проблем с передачей файлов в Jabber или ICQ, можно заходить на машину по ssh не через промежуточный сервер, а сразу. В общем сразу отпадает необходимость в port forwarding.
0
gribozavr #
Наверное я вас неправильно понял. Клиентским компьютерам нужны IPv6 адреса чтобы иметь доступ в IPv6 интернет при помощи обычной маршрутизации. Если же клиенты ходят через прокси, то IPv6 достаточно только на проксе, а до прокси можно IPv4.
+1
differentlocal #
Эм. Внешние IP не отменяют firewall-а на шлюзе. В чем проблема?
+2
mazy #
глобальные ип внутри сетки… можно избаиться от ната. которій хорошо грузит роутер при большом кол-ве соединений с большим трафиком…
+2
CLaiN #
можно отказаться от NAT. резко снизится нагрузка на маршрутизатор.
+1
stigger #
вобщем ладно. уговорили. пойду поковыряю =)
+2
stigger #
по поводу назначения /48 на локальную подсеть: почему нельзя туннель и локальный интерфейс объединить в бридж и всем сидеть в /64?
0
gribozavr #
Можно. Но это немного сложнее настраивать.
0
GadPetrovich #
Можно все в одной подсетке на разных интерфейсах настроить.
0
naryl #
При регистрации туннеля выдаёт Error: Your IPv4 endpoint is unreachable or unstable. Please make sure ICMP is not blocked.

Роутер Netgear WGR614 v9. До меня ping доходит от знакомого немца. В чём может быть проблема?
0
naryl #
Вру. Не пингуюсь.
0
shortcaster #
Наверное глупый вопрос, но что значат цифры через слэш от IP?
0
shortcaster #
Типа 192.168.0.0/24?
0
bagyr #
Гуглить по слову «маска подсети».
0
shortcaster #
Спасибо
0
Andrey_Rogovsky #
Зареганные адреса будут за мной навсегда или это временное решение?
0
gribozavr #
Hurricane Electric раздаёт IPv6 подсети из своей сети как обычный провайдер раздаёт статические IPv4. То есть, к другому провайдеру с этими подсетями перейти не получится.
0
vanich #
192.168.0.0/24 — это маска 255.255.255.0

но я вообще подумал, может сразу ссылку дать
ru.wikipedia.org/wiki/CIDR
0
OldFornit #
По пункту 5 дополнение. Если, например, ваш DHCP отдаёт клиентским машинам домен вида компани.local ( а у некоторых системных администраторов есть такая привычка обзывать внутренний домен ), то есть большая вероятность того что avahi не будет работать нормально.
0
Lorien_Elf #
Было бы здорово, если бы вы описали настройку dnsmasq. Я сижу через небольшой сервер-роутер и мне не хочется ставить тяжеловесный bind только для кэширования.
0
gribozavr #
Приблизительно такой dnsmasq.conf:
no-resolv
no-poll
server=2001:470:20::2
interface=eth0
no-dhcp-interface=eth0

+1
Lorien_Elf #
О, круто! Спасибо!
0
deilux #
А что произойдёт с выделенными мне адресами, когда весь мир перейдёт на IPv6 и туннель больше не будет необходим?
0
gribozavr #
Эти адреса «ваши» в той же мере, в какой статический IPv4 адрес, выданный обычным провайдером «ваш» — он принадлежит провайдеру и во whois записаны данные провайдера. HE — тоже провайдер и фактически адреса ваших подсетей принадлежат ему. Как только вам они станут не нужны — удалите туннель и HE сможет выдать их кому-то другому. А вот что будет когда туннели в принципе не будут нужны? Я думаю, об этом говорить рано, но в принципе если провайдеру не нужна его подсеть, он тоже может её вернуть в пул.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.