Руководство по развертыванию IPv6-маршрутизатора

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page IPv6 router guide and the translation is 100% complete.

Other languages:
English • ‎español • ‎français • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어
Предупреждение
This article has been flagged as dirty as of February 3, 2016 for not conforming to the wiki guidelines. It is now grouped in the list of articles to be cleaned.

Предварительные настройки

Основные настройки ядра

Любое из доступных в Gentoo ядер версии 2.6 без проблем поддерживает соединения IPv6. Новый стек IPv6 (USAGI) интегрирован в ядро начиная с версии Linux 2.6.0.

root #emerge --ask sys-kernel/gentoo-sources

Теперь мы готовы перейти в каталог с исходным кодом ядра и начать его конфигурацию.

root #cd /usr/src/linux
root #make menuconfig
Заметка
Предполагается, что символьная ссылка /usr/src/linux ссылается на исходный код ядра, который будет использоваться как часть этого гайда.
Ядро Параметры для 'make menuconfig'
Networking support --->
  Networking options --->
    <*> The IPv6 protocol --->
## (Параметы IPv6 ниже этого элемента меню могут пригодиться для многих других приложений,
## но не требуются для базовой установки)
 
## (Этот параметр требуется только когда для преобразования 6to4 используется ptrtd)
Device Drivers --->
  Network device support --->
    <*> Universal TUN/TAP device driver support

Проверка поддержки IPv6

После включения рекомендуемых параметров, перекомпилируйте ядро с поддержкой IPv6 и перезагрузитесь.

Если программа iproute2 все еще не установлена, сделать это настоятельно рекомендуется. iproute2 — это набор инструментов для конфигурации сети, содержащий ip — замечательную замену для ifconfig, route, iptunnel и других программ…

root #emerge --ask sys-apps/iproute2
Предупреждение
Использование ifconfig может вызвать серьезные неприятности при наличии нескольких туннельных устройств. Туннели нужно убирать в обратном порядке, что означает, что самый последний из созданных должен быть убран первым.

Если IPv6 работает, loopback-устройство должно показывать IPv6-адрес:

root #ip -6 addr show lo
1: lo: <LOOPBACK,UP> mtu 16436
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
    ## (Строки выше показывают, что все работает)

Перед тем, как продолжить, убедитесь, что ipv6 находится в списке переменных USE в файле make.conf, чтобы пакеты, которые будут установлены позже, включали поддержку IPv6.

Настройка туннеля

Основная конфигурация

Большинство провайдеров все еще не предоставляют нативные соединения IPv6. Для обхода этого ограничения есть разбросанные по всему миру провайдеры туннелей (tunnel brokers), предлагающие свободные IPv6-туннели. Благодаря им можно туннелировать IPv6-соединения через IPv4.

Поставщик Местоположение
Hurricane Electric Северная Америка, Европа, Азия
Freenet6 США
SixXS Европа (начиная с апреля 2016г. SixXS больше не удовлетворяют запросы на предоставления новых туннелей или подсетей)
Singnet Сингапур
Aarnet Австралия и Океания

Ниже приведены два примера настройки туннеля с двумя популярными североамериканскими туннелями: Hurricane Electric (также применимо к non-heartbeat туннелям sixxs.net) и Freenet6.

Hurricane Electric

Hurricane Electric (сокращенно — HE) предлагает свободные IPv6-туннели и выделяет для клиента адреса блоками /64. Также позволяет настроить обратную DNS-зону. Получение туннеля от HE — простая процедура, сводится к переходу по ссылке https://www.tunnelbroker.net/ и заполнению одностраничной формы.

Заметка
Регистрация включает разную информацию, например домашний адрес и номер телефона.

После выделения туннеля и блока /64, пришло время настроить систему. HE предоставляет образцы настроек, основанные на утилитах ifconfig и iproute. В двух примерах предполагается следующая конфигурация:

Local IPv4 Address (eth0) 68.36.91.195
HE IPv4 Address 64.71.128.82
Local IPv6 tunnel Address 2001:470:1F00:FFFF::2
Remote IPv6 tunnel Address 2001:470:1F00:FFFF::1
IPv6 Block 2001:470:1F00:296::/64

Используя команду ip из пакета sys-apps/iproute2, выполните следующее.

Создайте туннель между локальным адресом IPv4 (eth0) и удаленным IPv4-адресом Hurricane Electric:

root #ip tunnel add he6 mode sit remote 64.71.128.82 local 68.36.91.195 ttl 64 dev eth0

Выведите издержки туннелирования (tunneling overhead) из MTU:

root #ip link set he6 mtu 1280

Поднимите туннель:

root #ip link set he6 up

Назначьте ему IPv6-адрес:

root #ip addr add 2001:470:1F00:FFFF::2 dev he6

Направьте все глобальные unicast-IPv6-адреса через туннельное устройство 'he6':

root #ip route add 2000::/3 dev he6

В следующем примере показано, как создать это во время загрузки:

Код Пример netifrc
iptunnel_he6="mode sit remote 64.71.128.82 local 68.36.91.195 ttl 64 dev eth0"
depend_he6="net.eth0"
config_he6="2001:470:1F00:FFFF::2/64"
routes_he6="default via 2001:470:1F00:FFFF::1 dev he6"
mtu_he6="1280"

Сделайте это, чтобы устройство загружалось во время загрузки:

root #cd /etc/init.d
root #ln -s net.lo net.he6
root #rc-update add net.he6 default
Заметка
Если нет политики по умолчанию ACCEPT для IPv4 iptables, то необходимо добавить:
root #iptables -A INPUT -i eth0 -p ipv6 -j ACCEPT

Если туннель IPv6 поверх IPv4, то пакеты сперва попадают в цепочку IPv4, а затем переходят в цепочку IPv6.

Freenet6

Freenet6 — это еще один свободный сервис туннелей. Необязательная регистрация требует только имени пользователя и действующий email-адреса. Управление туннелем сведено к системе клиент-сервер и созданию клиента gogoCLIENT. Данный клиент доступен в системе Portage. Для его установки выполните:

root #emerge --ask net-misc/gogoc

Теперь при выборе соединения с аутентификацией потребуется настроить gogoCLIENT, отредактировав файл /etc/gogoc/gogoc.conf. Нужно только изменить поля userid и passwd для соответствия полям, назначенным Freenet6, и изменить сетевой шлюз. Ниже приведен пример файла конфигурации.

Код Пример gogoc.conf
auth_method=any
userid=anonymous
passwd=foobar
template=linux
server=broker.freenet6.net

Проверка соединения

Теперь, когда туннель настроен, необходимо протестировать соединение. Самым легким способом это сделать является использование утилиты ping6 для проверки связи с хостом IPv6.

root #emerge --ask iputils
user $ping6 www.kame.net
PING www.kame.net(orange.kame.net) 56 data bytes
64 bytes from orange.kame.net: icmp_seq=1 ttl=52 time=290 ms
64 bytes from orange.kame.net: icmp_seq=2 ttl=52 time=277 ms
64 bytes from orange.kame.net: icmp_seq=3 ttl=52 time=280 ms
64 bytes from orange.kame.net: icmp_seq=4 ttl=52 time=279 ms
64 bytes from orange.kame.net: icmp_seq=5 ttl=52 time=277 ms
 
--- www.kame.net ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4038ms
rtt min/avg/max/mdev = 277.040/281.041/290.046/4.699 ms

Ведется дальнейшая работа по добавлению лучшей поддержки IPv6 в сетевой init-скрипт. Чтобы узнать статус разработки или помочь, пожалуйста, отправьте сообщение на latexer@gentoo.org.

Поддержка IPv6 в приложениях

Переустановка пакетов

Если USE="ipv6" в файле /etc/portage/make.conf уже установлен, возможно, необходимо переустановить группу пакетов для их компиляции с поддержкой IPv6. Для получения списка всех установленных пакетов, затронутых изменениями USE-флага, используйте параметр Portage --newuse (-N):

root #emerge -uDNav @world

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

Заметка
Некоторые пакеты (ошибочно) обнаруживают поддержку IPv6 автоматически и, следовательно, не имеют USE-флага ipv6. Таким образом, не все пакеты, которые должны поддерживать IPv6, будут поддерживать его, если они скомпилированы на ядре без поддержкой IPv6.

Пакеты для работы с IPv6

Существует несколько пакетов для работы с IPv6. Большинство из них находятся в каталоге /usr/portage/net-misc.

Пакет Описание
net-misc/ipv6calc Преобразует IPv6-адрес в сжатый формат
net-misc/netcat6 Версия netcat с поддержкой IPv6 и IPv4
dev-perl/Socket6 Связанная с IPv6 часть директив define и манипуляторов из файла socket.h языка C

Настройка DNS

IPv6 и DNS

Также как DNS использует для IPv4 записи A, аналогично используются AAAA записи для IPv6. (это потому что IPv4 имеет адресное пространство 2^32, в то время как IPv6 имеет адресное пространство 2^128). Для обратных запросов DNS, стандарт INT устарел, но все еще широко поддерживается. ARPA является самым новым стандартом. Поддержка формата ARPA описывается далее в этом руководстве.

Настройка BIND

Последние версии BIND включают поддержку IPv6. Для прочтения этого раздела требуется минимальное знание о конфигурации и использовании BIND. Предполагается, что BIND не запущен в chroot. Если это предположение ошибочно, просто добавьте префикс chroot к большинству частей следующего раздела.

Сначала добавьте записи для файлов "прямой" (forward) и "обратной" (reverse) зоны DNS в /etc/bind/named.conf.

Файл /etc/bind/named.confЗаписи named.conf
## (Мы разрешаем bind слушать IPv6-адреса.
## Использование 'any' является единственным способом это выполнить для версий bind ранее 9.3)
options {
    [...]
    listen-on-v6 { any; }
    [...]
};
## (Этот раздел предусматривает прямой DNS для домена 'ipv6-rules.com':)
zone "ipv6-rules.com" IN {
    type master;
    file "pri/ipv6-rules.com";
};
## (Данный формат обратного DNS является "побитовым." Это выполняется взятием префикса IPv6,
## переставлением чисел в обратном порядке и размещением точки между каждым числом)
zone "6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa" {
        type master;
        file "pri/rev-ipv6-rules.com.arpa";
};

Теперь требуется создать эти файлы зоны и добавить записи для каждого из хостов.

Файл /etc/bind/pri/ipv6-rules.com
$TTL    2h
@       IN      SOA     ipv6-rules.com. webmaster.ipv6-rules.com.  (
                                2003052501 ; Serial
                                28800      ; Refresh
                                14400      ; Retry
                                3600000    ; Expire
                                86400 )    ; Minimum
                NS      ns1.ipv6-rules.com
 
IN      AAAA    2001:470:1f00:296::1 ; address for ipv6-rules.com
host1   IN      AAAA    2001:470:1f00:296::2 ; address for host1.ipv6-rules.com
host2   IN      AAAA    2001:470:1f00:296::3:3 ; address for host2.ipv6-rules.com
Файл /etc/bind/pri/ipv6-rules.com.arpa
$TTL 3d ; Default TTL (bind 8 needs this, bind 9 ignores it)
@       IN SOA ipv6-rules.com. webmaster.ipv6-rules.com. (
                        2003052501      ; Serial number (YYYYMMdd)
                        24h             ; Refresh time
                        30m             ; Retry time
                        2d              ; Expire time
                        3d )            ; Default TTL
        IN      NS     ns1.ipv6-rules.com.
; IPv6 PTR entries
$ORIGIN 6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa.
 
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN      PTR     ipv6-rules.com.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN      PTR     host1.ipv6-rules.com.
3.0.0.0.3.0.0.0.0.0.0.0.0.0.0.0 IN      PTR     host2.ipv6-rules.com.

Настройка DJBDNS

Для DJBDNS существует несколько патчей от сторонних разработчиков, доступных по адресу http://www.fefe.de/dns/ , которые позволяют выполнение запросов DNS для IPv6. DJBDNS может быть установлен с этими патчами, если в список USE-флагов добавлен ipv6.

Предупреждение
Не все типы записей поддерживаются этими патчами. В частности, записи NS и MX не поддерживаются.
root #emerge --ask djbdns

После установки djbdns, его нужно настроить, запустив команду tinydns-setup и ответив на несколько вопросов о том, к каким адресам нужно осуществлять привязку, куда устанавливать tinydns, и т. д.

root #tinydns-setup

Предположим, мы установили tinydns в /var/tinydns. Теперь мы можем отредактировать /var/tinydns/root/data. Этот файл содержит все данные, необходимые tinydns для обработки DNS для делегирования IPv6.

Код Образец файла данных
## (*.ipv6-rules.com авторитативно обрабатываются 192.168.0.1)
.ipv6-rules.com:192.168.0.1:a:259200
## (Авторитативный обратный DNS для 2001:470:1f00:296::/64)
.6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa:192.168.0.1:a
## (Укажите IP-адреса для хостов host1 и host2)
6host1.ipv6-rules.com:200104701f0002960000000000000001:86400
6host2.ipv6-rules.com:200104701f0002960000000000000002:86400
## (Направьте www на host1)
3www.ipv6-rules.com:200104701f0002960000000000000002:86400

Для строк с префиксом 6 будут созданы обе записи: AAAA и PTR. Для строк с префиксом 3 будет создана только запись AAAA. Помимо редактирования файла data вручную, можно использовать скрипт add-host6 и add-alias6 для добавления новых записей. После внесения изменений в файл data, необходимо запустить make из /var/tinydns/root. В результате будет создан файл /var/tinydns/root/data.cfb, который будет использоваться tinydns в качестве источника информации для DNS-запросов.

IPv6-маршрутизатор

Настройка маршрутизации

Для использования системы в качестве маршрутизатора для других клиентов, которым требуется соединение через IPv6, необходима дальнейшая настройка. Нам потребуется включить переадресацию пакетов IPv6. Это можно сделать двумя способами.

Либо мы установим значение 1 в псевдо-файле переадресации:

root #echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

Или необходимо использовать команду sysctl:

root #sysctl -w net.ipv6.conf.all.forwarding=1
Предупреждение
Init-скрипт radvd, объясняемый в следующем разделе, включает (и отключает) переадресацию, делая следующий шаг ненужным.

Чтобы включить переадресацию при загрузке, нужно отредактировать файл /etc/sysctl.conf и добавить в него следующую строчку.

Код Редактирование sysctl.conf
## (Когда используется radvd, эта настройка не требуется)
net.ipv6.conf.default.forwarding=1

Теперь трафик с этого компьютера должен быть переадресован через туннель, который был установлен ранее с выбранным нами сервисом.

Чтобы назначить клиентам адреса IPv6, в спецификации IPv6 разрешается stateless и stateful назначение IP. Stateless назначение использует процесс с названием Router Advertisement и позволяет клиентам получить IP-адрес и маршрут по умолчанию простым поднятием интерфейса. Этот способ называется "stateless" потому что не имеет записи о назначенных IP-адресах и хосте, которому они назначены. Stateful назначение обрабатывается DHCPv6. Оно называется "stateful" потому что сервер хранит состояние клиентов, запросивших и получивших IP-адреса.

Stateless-конфигурация

Stateless-конфигурация легко выполняется использованием программы Router Advertisement Daemon, или radvd:

root #emerge --ask radvd

После установки radvd, необходимо создать файл /etc/radvd/radvd.conf, хранящий информацию о том из какой подсети нужно назначать IP. Здесь приведен пример файла radvd.conf, использующий префикс, назначенный нашим сервисом туннелей.

Код Пример radvd.conf
interface eth1
{
        ## (Отправка advertisement-сообщений другим хостам)
        AdvSendAdvert on;
        ## (Фрагментация нежелательна (tm))
        AdvLinkMTU 1280;
        MaxRtrAdvInterval 300;
        ## (Префикс подсети IPv6 назначенный нашим PoP)
        prefix 2001:470:1F00:296::/64
        {
                AdvOnLink on;
                AdvAutonomous on;
        };
};
Предупреждение
Проверьте, что интерфейс в первой строчке указан правильно, чтобы отправлять advertisement маршрутизатора в интранет, а не интернет-провайдеру!

Дальнейшая информация доступна в man radvd.conf. Теперь мы можем запустить radvd и настроить его на запуск при загрузке.

root #/etc/init.d/radvd start
root #rc-update add radvd default

Stateful-конфигурация

Для включения stateful-конфигурации, требуется установить и настроить net-misc/dibbler.

root #emerge --ask dibbler

Теперь нужно настроить dibbler-клиент, отредактировав /etc/dibbler/client.conf.

Код Пример конфигурации клиента dibbler
iface ppp0 {
	rapid-commit yes
	pd
	option dns-server
}
</pre>

Теперь можно запустить клиент dibbler и настроить его на запуск при загрузке.

root #/etc/init.d/dibbler-client start
root #rc-update add dibbler-client default

IPv6-клиенты

Использование radvd

Клиенты этого маршрутизатора должны подключаться к сети через IPv6. При использовании radvd, настройка хостов должна быть такой же легкой, как и включение интерфейса. (Это, возможно, уже сделано init-скриптом net.ethX).

root #ip link set eth0 up
root #ip addr show eth0
1: eth0: <BROADCAST,MULTICAST,UP> mtu 1400 qdisc pfifo_fast qlen 1000
    link/ether 00:01:03:2f:27:89 brd ff:ff:ff:ff:ff:ff
    inet6 2001:470:1f00:296:209:6bff:fe06:b7b4/128 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::209:6bff:fe06:b7b4/64 scope link
       valid_lft forever preferred_lft forever
    inet6 ff02::1/128 scope global
       valid_lft forever preferred_lft forever

Если это не работает, убедитесь, что брандмауэр IPv6 позволяет прохождение ICMPv6 пакетов:

root #ip6tables -A INPUT -p icmpv6 -j ACCEPT

Внешние источники

В сети имеется большое количество отличных ресурсов по IPv6.

На IRC, можно попробовать канал #ipv6 на сервере Freenode. К серверам Freenode можно подсоединиться, используя клиент с поддержкой IPv6, установив соединение к irc.ipv6.freenode.net.


This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Peter Johanson, Jorge Paulo, Camille Huot, Pasi Valminen, Joshua Saddler (nightmorph), Markos Chandras (Hwoarang)
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.