- Вопрос или проблема
- Описание вопроса
- Программный стек
- Цель
- Сетевое конфигурирование
- Внешняя сеть
- Внутренняя сеть
- Конфигурационные файлы
- /etc/sysctl.conf
- /etc/ndppd.conf
- /etc/radvd.conf
- /etc/wide-dhcpv6/dhcp6s.conf
- IPv6 маршрут
- Скрипт конфигурации: /etc/NetworkManager/dispatcher.d/ipv6-conf.sh
- Проблема
- Пример клиента Windows
- Ответ или решение
- Настройка IPv6 без делегирования префикса: подробное руководство
- Введение
- Исходные данные
- Ситуация
- Шаги для настройки IPv6
- 1. Использование ULAs (Уникальных Локальных Адресов)
- 2. Настройка ndppd для работы с ULAs
- 3. Настройка radvd для объявления ULAs
- 4. Настройка DHCPv6-сервера для распределения ULAs
- 5. Маршрутизация IPv6
- 6. Проверка соединения
- Заключение
Вопрос или проблема
Описание вопроса
Как настроить 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
к интернету.