В далёком 2013 году была написана статья про настройку IPv6 на FreeBSD для провайдера Дом.ru. С тех пор прошло 9 лет, а Дом.ru, пусть с небольшим опозданием в 6 лет, всё же реализовали поддержку данного протокола для владельцев статических IP-адресов. Детали любезно собраны на сайте version6.ru.
Несмотря на относительно почтенный возраст прошлой статьи — она до сих пор работает. Данная статья лишь уточняет некоторые моменты и предлагает более актуальные в 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 — OnlyFriends!