Как настроить IPv6 без делегирования префикса

Вопрос или проблема

Описание вопроса

Как настроить ipv6 без делегирования префикса?

Я пытаюсь настроить доступ dual-stack (IPv4/IPv6) для моего интерфейса br-lan на системе Debian (arm64) с версией ядра 5.15. Мое соединение с провайдером осуществляется через модем wwan0, и я хочу обеспечить доступ dual-stack для клиентов, подключенных к br0 (br-lan).

Я настроил NetworkManager, ndppd, radvd и wide-dhcp6 и подготовил необходимые конфигурационные файлы и скрипты. Клиенты, подключенные к br-lan, могут пинговать адреса в сети br-lan и получать адреса DHCPv6 и информацию о DNS. Однако они не могут подключиться к интернету.

Буду признателен за любую помощь и устранение неполадок.

Программный стек

  • Ядро: 5.15
  • Операционная система: Debian (arm64)
  • Инструменты управления сетью: NetworkManager, ndppd, radvd, wide-dhcp6

Цель

Обеспечить доступ dual-stack к br-lan.

Сетевое конфигурирование

Внешняя сеть

  • Устройство: wwan0

  • Соединение: модем

  • Доступ dual-stack: Без делегирования префикса

  • Конфигурация:

    wwan0: flags=81<UP,POINTOPOINT,RUNNING>  mtu 1500
            inet 100.84.235.248  netmask 255.255.255.240  destination 100.84.235.248
            inet6 240e:473:620:140c:10f8:8d5a:c303:7640  prefixlen 64  scopeid 0x0<global>
            unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    

Внутренняя сеть

  • Устройство: br0

  • Соединение: br-lan

  • Настройки NetworkManager: ipv4 shared, ipv6 ignore

  • Конфигурация:

    br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 10.42.0.1  netmask 255.255.255.0  broadcast 10.42.0.255
            inet6 240e:473:620:140c:2333::1  prefixlen 80  scopeid 0x0<global>
            inet6 fe80::2045:34ff:fe79:4865  prefixlen 64  scopeid 0x20<link>
            ether 22:45:34:79:48:65  txqueuelen 1000  (Ethernet)
            RX packets 4097  bytes 423481 (413.5 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 2184  bytes 239531 (233.9 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    

Конфигурационные файлы

/etc/sysctl.conf

net.ipv6.conf.all.forwarding=1

/etc/ndppd.conf

proxy wwan0 {
    router yes
    timeout 500
    ttl 30000
    rule 240e:473:620:140c:2333::/80 {
        iface br0
        static
    }
}

/etc/radvd.conf

interface br0 {
        AdvSendAdvert on;
        AdvOtherConfigFlag on;
        AdvManagedFlag on;
        MinRtrAdvInterval 3;
        MaxRtrAdvInterval 10;
        prefix 240e:473:620:140c:2333::/64 {
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr off;
        };
}

/etc/wide-dhcpv6/dhcp6s.conf

option domain-name-servers 2a09::;
option domain-name-servers 2a11::;
interface br0 {
        address-pool pool1 3600;
};
pool pool1 {
        range 240e:473:620:140c:2333::2000 to 240e:473:620:140c:2333::3000 ;
}

IPv6 маршрут

::1 dev lo proto kernel metric 256 pref medium
240e:473:620:140c:2333::/80 dev br0 proto kernel metric 256 pref medium
240e:473:620:140c::/64 dev wwan0 proto kernel metric 700 pref medium
240e:473:620:140c::/64 dev br0 metric 1024 pref medium
fe80::/64 dev docker0 proto kernel metric 256 pref medium
fe80::/64 dev br0 proto kernel metric 256 pref medium
fe80::/64 dev veth9aa835b proto kernel metric 256 pref medium
fe80::/64 dev wlan0 proto kernel metric 600 pref medium
default via 240e:473:620:140c:54cb:5bf7:3c38:2da5 dev wwan0 proto static metric 700 pref medium

Скрипт конфигурации: /etc/NetworkManager/dispatcher.d/ipv6-conf.sh

#!/usr/bin/env bash

interface=$1
event=$2
if [ "$interface" == "wwan0" ]; then
        prefix=$(ip -6 addr show dev wwan0| sed -e's/^.*inet6 \([^ ]*\)\/.*$//;t;d'|head -n 1|cut -f'1-4' -d':')
        # просто предположим длину префикса /64 здесь
        echo "получить префикс $prefix::/64"|systemd-cat -t ipv6_conf
        cp /etc/ndppd.conf.bak /etc/ndppd.conf
        sed -i "s/REPLACE_PREFIX_HERE/$prefix:2333::\/80/g" /etc/ndppd.conf
        cp /etc/radvd.conf.bak /etc/radvd.conf
        sed -i "s/REPLACE_PREFIX_HERE/$prefix:2333::\/64/g" /etc/radvd.conf
        cp /etc/wide-dhcpv6/dhcp6s.conf.bak /etc/wide-dhcpv6/dhcp6s.conf
        sed -i "s/PREFIX_MIN/$prefix:2333::2000/g" /etc/wide-dhcpv6/dhcp6s.conf
        sed -i "s/PREFIX_MAX/$prefix:2333::3000/g" /etc/wide-dhcpv6/dhcp6s.conf
        systemctl restart radvd
        systemctl restart ndppd
        systemctl stop wide-dhcpv6-server
        systemctl start wide-dhcpv6-server
        echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
        echo 1 > /proc/sys/net/ipv6/conf/all/proxy_ndp
        sleep 30
        echo "установка маршрута" |systemd-cat -t ipv6_conf
        ip -6 addr add $prefix:2333::1/80 dev br0
        #ip -6 route add $prefix::/80 dev br0
        ip -6 route add $prefix:2333::/64 dev br0
        ip -6 route |systemd-cat -t ipv6_conf
fi

Проблема

Клиенты, подключенные к br-lan, могут пинговать все адреса на br-lan и получать широковещательные адреса DHCP6 и DNS, но они не могут подключиться к интернету.

Пример клиента Windows

  • IPv4 адрес: 10.42.0.86
  • Маска подсети IPv4: 255.255.255.0
  • DHCP сервер IPv4: 10.42.0.1
  • DNS сервер IPv4: 10.42.0.1
  • WINS сервер IPv4: 10.42.0.1
  • IPv6 адреса:
    • 240e:473:620:140c:1413:a3cb:57ec:f26
    • 240e:473:620:140c:2333::2000
  • Временный IPv6 адрес: 240e:473:620:140c:3177:43e1:6ebc:550f
  • Ссылка локальный IPv6 адрес: fe80:1413:a3cb:57ec:f26%10
  • IPv6 стандартный шлюз: fe80::2045:34ff:fe79:4865%10
  • DNS серверы IPv6:
    • 2a09::
    • 2a11::
  • Результаты теста Ping:
    • ping -6 fe80::2045:34ff:fe79:4865 или 240e:473:620:140c:2333::1: Успех
    • nslookup AAAA microsoft.com или ping -6 2603:1030:20e:3::23c: Провал

Мне кажется, что у моих маршрутов ipv6 есть какие-то проблемы, я пытался изменить следующую часть сценария диспетчера, но безуспешно.

        echo "установка маршрута" |systemd-cat -t ipv6_conf
        ip -6 addr add $prefix:2333::1/80 dev br0
        #ip -6 route add $prefix::/80 dev br0
        ip -6 route add $prefix:2333::/64 dev br0
        ip -6 route |systemd-cat -t ipv6_conf

Ваш интернет-провайдер использует 240e:473:620:140c::/64 на стороне WAN вашего маршрутизатора Debian. Затем вы пытаетесь использовать тот же префикс, 240e:473:620:140c::/64, на стороне LAN этого маршрутизатора. Это неработоспособная конфигурация.

Вам нужно использовать другой префикс на стороне LAN. На данный момент ваш интернет-провайдер фактически предоставил вам единственный /128, поэтому единственной работоспособной конфигурацией является использование IPv6 ULA на LAN (используйте /48 или /64 из fd00::/8 на LAN) и использование many-to-one NAT66 на маршрутизаторе, чтобы все пакеты, направленные в интернет, имели исходный IPv6 адрес 240e:473:620:140c:10f8:8d5a:c303:7640 (адрес WAN интерфейса вашего маршрутизатора). Это идентично тому, как NAT(44) обычно используется в IPv4 сетях, при этом диапазон ULA играет роль адресного пространства RFC1918.

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

Ответ или решение

Настройка IPv6 без делегирования префикса: подробное руководство

Введение

В последние годы поддержка IPv6 становится все более важной в сетевом администрировании. Настройка IPv6 может быть сложной задачей, особенно в условиях, когда вы не получаете делегирование префикса от вашего интернет-провайдера (ISP). В этой статье мы рассмотрим, как правильно сконфигурировать IPv6 на системе Debian (arm64) с kernel версии 5.15, используя интерфейс br-lan в состоянии «dual-stack» (IPv4/IPv6), при этом избегая использования делегирования префикса.

Исходные данные

Далее пойдет речь о текущей сетевой конфигурации вашей системы. У вас есть модем, подключенный через интерфейс wwan0, который использует IPv4 и единственный IPv6 адрес. Downstream-сеть br-lan должна обеспечить доступ к IPv6 для клиентов, но столкнулась с трудностью подключения к интернету.

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

Ситуация

На данный момент вы имеете:

  • Текущий IPv6 адрес на wwan0: 240e:473:620:140c:10f8:8d5a:c303:7640 с префиксом /64.
  • Downstream интерфейс (br-lan) настроен на тот же префикс, что и на wwan0, что приводит к путанице в маршрутизации.

Шаги для настройки IPv6

1. Использование ULAs (Уникальных Локальных Адресов)

Вместо использования публичного префикса IPv6 на вашей локальной сети, рекомендуется использовать уникальные локальные адреса (ULAs), которые начинаются с fd00::/8. Это позволит вам избежать конфликтов и обеспечит адресацию для вашей локальной сети:

# Пример адресации для br0
ip -6 addr add fd00:1234:5678::1/64 dev br0

2. Настройка ndppd для работы с ULAs

Ваш файл конфигурации /etc/ndppd.conf необходимо обновить, чтобы включить только адресацию ULAs:

proxy wwan0 {
    router yes
    rule fd00:1234:5678::/64 {
        iface br0
        static
    }
}

3. Настройка radvd для объявления ULAs

Обновите файл конфигурации /etc/radvd.conf:

interface br0 {
    AdvSendAdvert on;
    AdvOtherConfigFlag off;
    MinRtrAdvInterval 3;
    MaxRtrAdvInterval 10;
    prefix fd00:1234:5678::/64 {
        AdvOnLink on;
        AdvAutonomous on;
        AdvRouterAddr off;
    };
}

4. Настройка DHCPv6-сервера для распределения ULAs

Обновите файл конфигурации /etc/wide-dhcpv6/dhcp6s.conf следующим образом:

interface br0 {
    address-pool pool1 3600;
};
pool pool1 {
    range fd00:1234:5678::2000 to fd00:1234:5678::3000;
}

5. Маршрутизация IPv6

Модифицируйте файл скрипта /etc/NetworkManager/dispatcher.d/ipv6-conf.sh, чтобы корректно настраивать маршрутизацию:

#!/usr/bin/env bash

interface=$1
event=$2
if [ "$interface" == "wwan0" ]; then
    # Настройка локальной сети
    ip -6 addr add fd00:1234:5678::1/64 dev br0
    # Установка маршрута
    ip -6 route add default via 240e:473:620:140c:10f8:8d5a:c303:7640 dev wwan0
}

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

После внесения этих изменений перезагрузите необходимые сервисы:

systemctl restart radvd
systemctl restart ndppd
systemctl restart wide-dhcpv6-server

Проверьте состояние вашей конфигурации с помощью команд ip -6 addr show и ip -6 route show. Убедитесь, что клиенты в br-lan могут пинговать внешние IPv6 адреса.

Заключение

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

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

Капча загружается...