Руководство по развертыванию IPv6-маршрутизатора
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
Networking support --->
Networking options --->
<*> The IPv6 protocol --->
## (Параметры IPv6 ниже этого элемента меню могут пригодиться для многих других приложений,
## но не требуются для базовой установки)
## (Этот параметр требуется только при использовании ptrtd для преобразования 6to4)
Device Drivers --->
Network device support --->
<*> Universal TUN/TAP device driver support
Emerge
root #
emerge --ask sys-apps/iproute2
root #
emerge --ask net-misc/radvd
Перед тем, как продолжить, убедитесь, что ipv6
находится в списке переменных USE в файле make.conf, чтобы пакеты, которые будут установлены позже, включали поддержку IPv6.
Additional software
Существует несколько пакетов для работы с IPv6. Большинство из них находятся в категории net-misc.
Package | Description |
---|---|
net-misc/radvd | Router advertisement daemon |
net-misc/dhcpd | ISC DHCP server, DHCPv4 and DHCPv6 capability |
net-misc/dibbler | DHCPv6 server |
net-misc/ipv6calc | Converts an IPv6 address to a compressed format |
dev-perl/Socket6 | IPv6 related part of the C socket.h defines and structure manipulators |
Confirming IPv6 status
Если 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-маршрутизатор
Obtaining an address and prefix
dhcpcd can be used to obtain a single, host only, /128 IPv6 address for the WAN interface, and a /64 IPv6 prefix for the LAN interface.
/etc/dhcpcd.conf
Request a IPv6 prefix for eth0.lan and eth0.management to be routed publicly with eth0.wan.# Disable router solicitations for all interfaces, enable only for selected ones
noipv6rs
# Interface configuration for the wan vlan on the eth0 interface
interface eth0.wan
# Enable router solicitation for this interface
ipv6rs
# Request a normal address usins iaid 1 for interface eth0.wan
ia_na 1
# Request a prefix using iaid 2 and assign it to the eth0.lan interface using sla_id 0 and prefix size of 64
ia_pd 2 eth0.lan/0/64
Dhcpcd
rfc6177 is barely seen as a recommendation by residential ISPs, Prefix Delegation may not work.
Настройка маршрутизации
Для использования системы в качестве маршрутизатора для других клиентов, которым требуется соединение через IPv6, необходима дальнейшая настройка. Нам потребуется включить переадресацию пакетов IPv6. Это можно сделать двумя способами.
root #
sysctl -w net.ipv6.conf.all.forwarding=1
Сценарий инициализации radvd, объясняемый в следующем разделе, включает (и отключает) переадресацию, делая следующий шаг ненужным.
Чтобы назначить клиентам адреса IPv6, в спецификации IPv6 разрешается stateless и stateful назначение IP. Stateless назначение использует процесс с названием Router Advertisement и позволяет клиентам получить IP-адрес и маршрут по умолчанию простым поднятием интерфейса. Этот способ называется "stateless" потому что не имеет записи о назначенных IP-адресах и хосте, которому они назначены. Stateful назначение обрабатывается DHCPv6. Оно называется "stateful" потому что сервер хранит состояние клиентов, запросивших и получивших IP-адреса.
The IPv6 Stateless Address Autoconfiguration configures IP routing and connectivity, the DHCPv6 is required to assign IPv6 addresses, and provide information such as DNS servers.
Stateless-конфигурация
Stateless-конфигурация легко выполняется использованием программы Router Advertisement Daemon, или radvd:
После установки radvd, необходимо создать файл /etc/radvd/radvd.conf, хранящий информацию о том из какой подсети нужно назначать IP. Здесь приведен пример файла 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 маршрутизатора в интранет, а не интернет-провайдеру!
Further information is available in man radvd.conf.
Stateful-конфигурация
Dibbler project is concluded.
Для включения stateful-конфигурации, требуется установить и настроить net-misc/dibbler.
root #
emerge --ask dibbler
Настройте dibbler-клиент, отредактировав /etc/dibbler/client.conf.
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
Service
OpenRC
To start radvd and start it on boot:
root #
/etc/init.d/radvd start
root #
rc-update add radvd default
Настройка 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-клиенты
Использование 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
Troubleshooting
Package is missing IPv6 support
Packages will typically emerge with the ipv6
USE flag, but if IPv6 is not working on a specific program, checking that it is built with that is a good first step.
There is no issue adding
USE="ipv6"
to /etc/portage/make.conf, but this is often unnecessary.Некоторые пакеты (ошибочно) обнаруживают поддержку IPv6 автоматически и, следовательно, не имеют USE-флага ipv6. Таким образом, не все пакеты, которые должны поддерживать IPv6, будут поддерживать его, если они скомпилированы на ядре без поддержкой IPv6.
See Also
- IPv6 — the most recent version of the Internet Protocol (IP)
- IPv6 tunnels
Внешние источники
В сети имеется большое количество отличных ресурсов по IPv6.
- www.ipv6.org - Основная информация о IPv6
- www.linux-ipv6.org/ - проект USAGI
- www.deepspace6.net - сайт Linux/IPv6
- www.kame.net - *BSD реализация
На 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.