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

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page IPv6 router guide and the translation is 94% complete.
Outdated translations are marked like this.


This guide provides details on setting up IPv6 routing on a Gentoo Linux system.

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

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

Все ядра начиная с версии 2.6.0 без проблем поддерживают соединения IPv6. Новый USAGI IPv6 стек интегрирован в ядро Linux v2.6.0.

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

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

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

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

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

Настоятельно рекомендуется установить пакет sys-apps/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 США (прекратил работу в 2016)
SixXS Европа (прекратил работу в 2017-06-06)
Singnet Сингапур (неизвестный статус, на 2021 год ссылка нерабочая)
Aarnet Австралия и Океания (прекратил работу 2019-05-04)

Ниже приведён пример настройки туннеля с популярным североамериканским туннелем Hurricane Electric.

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.

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

Теперь, когда туннель настроен, необходимо протестировать соединение. Самым легким способом это сделать является использование утилиты 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 в приложениях

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

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

root #emerge -uDNav @world

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

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

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

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

Пакет Описание
net-misc/ipv6calc Преобразует IPv6-адрес в сжатый формат
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

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

Предупреждение
Не все типы записей поддерживаются этими патчами. В частности, записи NS и MX не поддерживаются.
root #emerge --ask net-dns/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
Предупреждение
Сценарий инициализации 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-конфигурация

Предупреждение
Dibbler project is concluded.

Для включения 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 (webchat) на сервере Libera.Chat. К серверам Libera.Chat можно подсоединиться, используя клиент с поддержкой IPv6, установив соединение к irc.ipv6.libera.chat.


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, , 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.