UNIX
online
pulse
logo
| dzenspace.ru | статьи |

Настройка IPv6 в hetzner.de

Некоторое время назад крупнейший европейский хостер hetzner.de начал предоставлять абсолютно бесплатно подсеть /64 адресов IPv6, ненавязчиво подталкивая своих пользователей к неизбежному отказу от IPv4 в обозримой перспективе.

Получение подсети производится в панели робота - после заказа будут сообщены:

  • Сеть: "IPs: 2a01:4f8:nnnn:nnnn:: /64"
  • Шлюз по умолчанию: "Gateway: 2a01:4f8:gggg:gggg::1 /59"
  • Диапазон доступных адресов: "Useable IP addresses: 2a01:4f8:xxxx:xxxx::2 to 2a01:4f8:xxxx:xxxx:ffff:ffff:ffff:ffff"

Там же, в панели робота, можно прописать обратную зону для используемых адресов.

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

Для Linux данная проблема решается достаточно просто и ее решение описано в wiki самого хостера. А вот настройка IPv6 для FreeBSD, которая так же поддерживается hetzner.de, но не особо афишируется (вероятно для уменьшения потока запросов от клиентов), не столь очевидна и усложняется порядком выполнения правил конфигурации при инициализации интерфейса на этапе загрузки. Итак, работающее решение:

/etc/rc.conf

ipv6_enable="YES"
ipv6_defaultrouter="NO"
ipv6_default_interface="re0"
ipv6_static_routes="gw default"
ipv6_route_gw="2a01:4f8:gggg:gggg::1 -iface re0"
ipv6_route_default="default 2a01:4f8:gggg:gggg::1"
ipv6_ifconfig_re0="2a01:4f8:xxxx:xxxx::2"
ipv6_ifconfig_re0_alias0="2a01:4f8:xxxx:xxxx::3"
...

/etc/sysctl.conf

net.inet6.ip6.accept_rtadv=1

Для проверки работоспособности без перезагрузки сервера в консоли это эквивалентно:

# sysctl net.inet6.ip6.accept_rtadv=1
# ndp -I re0
# route add -inet6 2a01:4f8:gggg:gggg::1 -iface re0
# route add -inet6 default 2a01:4f8:gggg:gggg::1
# ifconfig re0 inet6 2a01:4f8:xxxx:xxxx::2 alias
# ifconfig re0 inet6 2a01:4f8:xxxx:xxxx::3 alias

Достижимость шлюза можно проверить утилитой fping6:

# ping6 -c 3 2a01:4f8:gggg:gggg::1
PING6(56=40+8+8 bytes) 2a01:4f8:xxxx:xxxx::2 --> 2a01:4f8:gggg:gggg::1
16 bytes from 2a01:4f8:gggg:gggg::1, icmp_seq=0 hlim=64 time=0.600 ms
16 bytes from 2a01:4f8:gggg:gggg::1, icmp_seq=1 hlim=64 time=0.664 ms
16 bytes from 2a01:4f8:gggg:gggg::1, icmp_seq=2 hlim=64 time=0.711 ms

--- 2a01:4f8:gggg:gggg::1 ping6 statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.600/0.658/0.711/0.045 ms

Автоматическая конфигурация

С момена описания предыдущего решения прошло достаточно много времени. На сегодняшний день в hetzner.de появилась возможность автоматической конфигурации интерфейса для работы по IPv6, что сильно упрощает дело. Работающее решение:

/etc/rc.conf

ipv6_enable="YES"
ipv6_defaultrouter="fe80::1%re0"
ipv6_ifconfig_re0="2a01:4f8:xxxx:xxxx::2"
ipv6_ifconfig_re0_alias0="2a01:4f8:xxxx:xxxx::3"
...

/etc/sysctl.conf

net.inet6.ip6.accept_rtadv=1

IPv6 через IPv4

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

К счастью, есть несколько достаточно простых в установке и настройке решений для туннелирования IPv6 трафика через сети IPv4 как для *nix, так и для windows. С ними можно ознакомиться по ссылкам в wiki проекта version6.ru, где наиболее простым и универсальным способом является использование технологии Teredo (или Miredo для FreeBSD и Linux).