Вопрос или проблема
У меня здесь странная ситуация. Если кто-то может помочь, пожалуйста, сделайте это.
Мы говорим о Linux Box, работающем как роутер на Ubuntu 18.04.3 LTS, с двумя интерфейсами: “lan” – который подключается к моей внутренней локальной сети, и “wan” – который подключается к моему интернет-провайдеру.
Однако мой интернет-провайдер требует соединение PPPoE, поэтому, в основном, интерфейс “wan” используется только в качестве стартера для интерфейса ppp0.
Моя проблема заключается в том, что я не могу получить глобальный IPv6 адрес на этом сервере.
Мне удается успешно подключиться к моему интернет-провайдеру.
Я уже следовал руководству отсюда: http://gruffi.be/mediawiki/index.php/Ipv6_with_PPPoE_on_Ubuntu, но это не сработало для меня.
Итак, вот что я сделал:
-
/etc/ppp/options:
+ipv6 ipv6cp-use-ipaddr
-
/etc/sysctl.conf:
net.ipv6.conf.all.forwarding=1 net.ipv6.conf.ppp0.accept_ra=2
-
/etc/wide-dhcpv6/dhcp6c.conf:
interface ppp0 { send ia-pd 2; send ia-na 1; }; # Использовать подсети из префикса с id 0 id-assoc pd 2 { prefix-interface lan { # Назначить подсеть 1 для eth0 sla-len 8; # <----- ВАЖНО: 8, потому что наша маленькая сеть 64, а наша большая 56, и это разница sla-id 2; }; }; id-assoc na 1 { };
-
/etc/radvd.conf:
interface lan { AdvSendAdvert on; prefix ::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr on; }; RDNSS 2001:4860:4860::8888 2001:4860:4860::8844 { # AdvRDNSSLifetime 3600; }; };
Мой интернет-провайдер сказал, что не использует Router Advertisement, однако он использует DHCPv6 Prefix Delegation и предлагает подсети /64.
Проблема в том, что я пробовал больше конфигураций из сети, ни одна из них не сработала для меня.
Когда я "ifconfig ppp0", он говорит:
inet 1.2.3.4 ...
inet6 fe80::xxxx:yyyy
Нет признаков глобального IPv6 адреса.
Если я включаю отладку на широком DHCP клиенте и исследую /var/log/syslog, я вижу, что он пытается отправить Solicit сообщения в ff02::1:2%ppp0 и таймеры сбрасываются.
Я не получаю ответа.
Тем не менее, маршрутизаторские объявления работают, как на "ppp0", так и на моей внутренней локальной сети, потому что у меня есть маршрут по умолчанию: "default via fe80::1", когда я "ip -6 r".
Тем не менее, нет глобального IPv6 адреса.
Я подозреваю, что это связано с DHCP.
Адрес не получается правильно.
Я могу пинговать:
ping6 fe80::1%ppp0
64 bytes from...
Но когда я пытаюсь "ping6 google.com", он говорит: "Выход за пределы адреса источника"
Мне нужно сделать две вещи в долгосрочной перспективе:
-
Попробовать получить глобальный IPv6 адрес на "ppp0", чтобы мои веб-сайты были доступны из IPv6 адресов (DNS уже настроен)
-
Мне нужно перенаправить любой /64 префикс, который мой интернет-провайдер дает мне, скажем: "2001:abcd:dead:beef::/64" на мои внутренние компьютеры, но с использованием фиксированной части для внутренних компьютеров.
Например:
Компьютер 1: 2001:abcd:dead:beef::1/64
Компьютер 2: 2001:abcd:dead:beef::2/64
Компьютер 3: 2001:abcd:dead:beef::3/64
Я не хочу адресов EUI-64, И НЕ хочу частных адресов.
Я хочу, чтобы моим компьютерам был назначен упорядоченный IPv6 адрес с заданным префиксом, независимо от динамического префикса.
Например, после перезагрузки, возможно, я получу "2001:1234:beef:dead::/64".
Я хочу, чтобы та же часть хоста выделялась, используя "::1", "::2" и так далее...
Спасибо!
Для #1 ваше решение может быть с опцией ipv6 в вашей конфигурации pppd:
+ipv6 Включите протоколы IPv6CP и IPv6.
ipv6 ,
Установите локальный и/или удаленный 64-битный идентификатор интерфейса.
Один из них может быть опущен. Идентификатор должен быть указан
в стандартной ASCII нотации IPv6 адресов (например, ::dead:beef). Если опция ipv6cp-use-ipaddr указана, то
локальный идентификатор - это локальный IPv4 адрес (см. выше). На
системах, которые поддерживают уникальный постоянный идентификатор, такой как
EUI-48, полученный из MAC-адреса Ethernet, можно использовать опцию ipv6cp-use-persistent вместо ipv6
, опции. В противном случае идентификатор будет рандомизирован.
Так что если вы использовали ipv6 ::1, будет ли это решением вашей проблемы? В качестве эксперимента вы можете заменить ipv6cp-use-ipaddr на ipv6cp-use-persistent... это должно дать вам предсказуемый глобальный ipv6 для вашего ppp0. С этого места вы можете начать настраивать свой wide-dhcpv6 и radvd....
Ответ или решение
Для того чтобы настроить IPv6 через PPPoE на вашем маршрутизаторе под управлением Ubuntu 18.04.3 LTS, необходимо следовать нескольким ключевым шагам. Мы разберем вашу ситуацию более детально, учитывая, что ваш интернет-провайдер поддерживает DHCPv6 и предоставляет префиксы /64, но не использует маршрутизацию (Router Advertisement).
Шаг 1: Настройка PPPoE для поддержки IPv6
Убедитесь, что ваш конфигурационный файл /etc/ppp/options
содержит следующее:
+ipv6
ipv6cp-use-ipaddr
Опция +ipv6
позволяет включить поддержку IPv6 в PPP, а ipv6cp-use-ipaddr
используется для указания общей IPv6-идентификации, обновляя ваш локальный идентификатор на основании IPv4-адреса.
Шаг 2: Обновление sysctl
Откройте файл конфигурации /etc/sysctl.conf
и добавьте или измените следующие строки:
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.ppp0.accept_ra=2
Эти настройки обеспечивают возможность пересылки пакетов IPv6 и разрешают интерфейсу ppp0 принимать рекламные сообщения от маршрутизаторов.
Шаг 3: Конфигурация DHCPv6
Ваш файл /etc/wide-dhcpv6/dhcp6c.conf
должен выглядеть следующим образом:
interface ppp0 {
send ia-pd 2;
send ia-na 1;
};
id-assoc pd 2 {
prefix-interface lan {
sla-len 8;
sla-id 2;
};
};
id-assoc na 1 { };
Обратите внимание, что sla-len
определяет длину слайса для ваших внутренних адресов. Убедитесь, что все настройки соответствуют тому, что предоставляет ваш провайдер.
Шаг 4: Конфигурация IPv6 Router Advertisement
Файл /etc/radvd.conf
должен иметь следующую структуру:
interface lan {
AdvSendAdvert on;
prefix ::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
RDNSS 2001:4860:4860::8888 2001:4860:4860::8844 {
# AdvRDNSSLifetime 3600;
};
};
Эти параметры обеспечивают рекламу префикса на вашем локальном интерфейсе, что позволит внутренним устройствам получать адреса.
Шаг 5: Запуск необходимых служб
После внесения всех изменений выполните команды для перезагрузки служб. Это можно сделать следующими командами:
sudo systemctl restart wide-dhcpv6-client
sudo systemctl restart radvd
Шаг 6: Проверка конфигурации и диагностика
Вы можете использовать команду ifconfig ppp0
для проверки наличия глобального адреса IPv6. Если глобальный адрес отсутствует, но вы видите адрес в диапазоне Link-local (fe80::xxxx:xxxx), это означает, что ваш клиент DHCPv6 не получает ответ от провайдера.
Для дальнейшей диагностики попробуйте включить отладку в DHCP-клиенте:
sudo dhcp6c -d
Это позволит вам увидеть, какие сообщения отправляются и получают, а также причину, по которой не удается получить глобальный IPv6-адрес.
Завершающие шаги
Для реализации вашего второго требования, касающегося назначения статических глобальных IPv6-адресов для ваших компьютеров, вы можете использовать файл /etc/radvd.conf
для русской передачи адресов с фиксированной частью. В таком случае, настройте внутренние компьютеры с заранее определенными адресами, как вы описали в вашем вопросе:
- Computer 1:
2001:abcd:dead:beef::1/64
- Computer 2:
2001:abcd:dead:beef::2/64
- Computer 3:
2001:abcd:dead:beef::3/64
Заключение
Следуя данным рекомендациям, вы сможете установить корректное соединение для получения глобального адреса IPv6 и установить интерфейсы для корректного использования в вашем локальном LAN. Если возникнут сложности, не стесняйтесь обратиться за поддержкой к вашему интернет-провайдеру, так как они могут предоставить дополнительные настройки и рекомендации.