Фаянсовая свадьба FreeBSD и Дом.ru IPv6

Автор: | 13.11.2022

В далёком 2013 году была написана статья про настройку IPv6 на FreeBSD для провайдера Дом.ru. С тех пор прошло 9 лет, а Дом.ru, пусть с небольшим опозданием в 6 лет, всё же реализовали поддержку данного протокола для владельцев статических IP-адресов. Детали любезно собраны на сайте version6.ru.

Проверка IPv6

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

Изменение № 1

Теперь по умолчанию для всех новых клиентов протокол IPv6 включён. Проверить действующие параметры можно в разделе «Сервисные настройки» личного кабинета.

Изменение № 2

На современных скоростях однопоточный ppp может не выдавать желаемую производительность, поэтому заменим его на mpd5. Устанавливаем:

user@server:~ %$ sudo pkg install -y mpd5
user@server:~ %$ sudo sysrc mpd_enable="YES"

Приводим конфигурацию к следующему виду (если же вы просто хотите перейти с ppp на mpd5 без использования IPv6, то удалите из конфигурации строки 9–11):

pppoe_client:
#
# PPPoE client: only outgoing calls, auto reconnect,
# ipcp-negotiated address, one-sided authentication,
# default route points on ISP's end
#

	create bundle static B1
	set bundle enable ipv6cp
	set iface up-script /usr/local/etc/mpd5/ipv6_up.sh
	set iface down-script /usr/local/etc/mpd5/ipv6_down.sh
	set iface enable tcpmssfix
	set iface route default
	set ipcp ranges 0.0.0.0/0 0.0.0.0/0

	create link static L1 pppoe
	set link action bundle B1
	set auth authname **********
	set auth password **********
	set link max-redial 0
	set link mtu 1492
	set link keep-alive 10 60
	set pppoe iface em1
	set pppoe service ""
	open
#!/bin/sh

route add -inet6 default -interface $1
exit 0
#!/bin/sh

route del -inet6 default
exit 0

Здесь стоит обратить внимание, что маршрут по умолчанию для IPv4 mpd5 добавляет и удаляет самостоятельно, но для IPv6 мы должны сделать это через вызов внешних скриптов. Также не забудьте указать реальные данные для параметров set auth. Запустим mpd5:

user@server:~ %$ sudo service mpd5 start
Starting mpd5.
user@server:~ %$ ifconfig ng0
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1492
        inet 192.0.2.1 --> 192.0.2.254 netmask 0xffffffff
        inet6 fe80::1%ng0 prefixlen 64 scopeid 0x4
        nd6 options=1<PERFORMNUD>

Изменение № 3

Вместо KAME DHCP6 образца 2008 года будем использовать dhcpcd. Устанавливаем аналогично mpd5:

user@server:~ %$ sudo pkg install -y dhcpcd
user@server:~ %$ sudo sysrc dhcpcd_enable="YES"

И настраиваем, приводя файл /usr/local/etc/dhcpcd.conf к следующему минимальному виду:

denyinterfaces em1
duid
ipv6only
noipv6rs
slaac private
waitip 6

interface ng0
  ia_pd ng0 em0/0

В параметре denyinterfaces перечисляем все имеющиеся в системе интерфейсы, кроме внутреннего (смотрящего в локальную сеть). Но основное внимание на последнюю строку — именно там указывается наш внутренний интерфейс (в примере это em0), на который через DHCP-PD будет назначен адрес IPv6. Подробности в документации. Предварительно разрешив в файрволе исходящие на UDP/547 и входящие на UDP/546, запускаем:

user@server:~ %$ sudo service dhcpcd start
Starting dhcpcd.
dhcpcd-9.4.1 starting
ng0: rebinding prior DHCPv6 lease
ng0: REPLY6 received from fe80::1
ng0: renew in 1800, rebind in 2880, expire in 86400 seconds
ng0: delegated prefix 2a03:1ac0::/64
em0: adding address 2a03:1ac0::1/64
em0: changing route to 2a03:1ac0::/64

user@server:~ %$ ping -6c3 google.com
PING6(56=40+8+8 bytes) 2a03:1ac0::1 --> 2a00:1450:4010:c07::71
16 bytes from 2a00:1450:4010:c07::71, icmp_seq=0 hlim=107 time=41.941 ms
16 bytes from 2a00:1450:4010:c07::71, icmp_seq=1 hlim=107 time=41.944 ms
16 bytes from 2a00:1450:4010:c07::71, icmp_seq=2 hlim=107 time=42.007 ms

--- google.com ping6 statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 41.941/41.964/42.007/0.030 ms

Настройки rtadvd остаются без изменений (см. предыдущую статью).

Бонус

В качестве бонуса привожу минимально рабочую конфигурацию файрфола pf (packet filter), подходящую для одновременной работы в режиме dual stack (IPv4+IPv6). В данном примере запрещены все входящие запросы, кроме ICMP и DHCPv6. Все исходящие, напротив, разрешены без ограничений. Для NAT в режиме IPv4 включён параметр static-port для совместимости с некоторыми игровыми платформами. А для IPv6 NAT вовсе не нужен.

ext_if="ng0"
int_if="em0"

set skip on lo0

scrub in all
nat on $ext_if inet from $int_if:network:0 to any -> ($ext_if) static-port

block in
antispoof quick for $ext_if

pass out
pass in quick proto { icmp, ipv6-icmp }
pass in quick on $ext_if inet6 proto udp from any to any port 546

Фаянсовая свадьба FreeBSD и Дом.ru IPv6: 1 комментарий

  1. Уведомление: Женитьба FreeBSD и Дом.ru IPv6 — OnlyFriends!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *