Я пытаюсь запустить личный веб-сервис из моей локальной сети на IPv6. Я хочу, чтобы он был виден в общедоступном интернете и за записями AAAA. Мне нужно сбалансировать простоту настройки и плавную реконфигурацию, когда префикс IPv6 от моего провайдера изменится.
К какому адресу я должен привязаться? Локальный IPv6-адрес + NAT, или я должен использовать глобально маршрутизируемые параметры, передаваемые на хост через делегирование префикса?
Мои хосты находятся за маршрутизатором OpenWRT, IPv4 + IPv6. OpenWRT получает префикс /56
делегированный моим интернет-провайдером (Telus в Канаде). Однако этот префикс не является статическим. Он меняется время от времени, в порядке дней. Я могу ускорить изменения иногда, делая перезагрузки.
Я готов попробовать эту вещь без NAT на IPv6. Я в порядке с пробиванием портов /IP-адресов, открытых в брандмауэре с отслеживанием состояния, но я бы хотел избежать преобразования адресов.
На моей установке IPv6 без сохранения состояния и состояния мои хосты на локальной сети выполняют автоматическую настройку, а также DHCPv6 для получения арендованных адресов. На моей коробке с Ubuntu:
192.168.1.4
fd00:cafe::4/128 # ULA local (by dhclient -6)
2001:2:3:4:a8a8:efcf:d96d:1315/64 # slaac+privacy global
2001:2:3:4:22f:bcff:fe12:1234/64 # slaac+EUI64 (macaddr)
fd00:cafe::a8a8:efcf:d96d:1315/64 # slaac+privacy local
fd00:cafe::22f:bcff:fe12:1234/64 # slaac+EUI64 (macaddr)
fe80::21f:bcff:fe08:c07a/64 # link local
Адреса 2001:2:3:4:
маршрутизируются в общедоступном Интернете. fd00:cafe::
маршрутизируются только локально в моей подсети. fd00:cafe::
- это префикс, который я настроил в OpenWRT (ULA) только для моей внутренней сети. fe80:
конечно не маршрутизируемый. OpenWRT не сдает в аренду 2001:2:3:4::4
в этой конфигурации, по замыслу (однако мне бы очень хотелось).
IP-адрес v6, который я выберу для своей службы, должен будет где-то оказаться в DNS-записи AAAA, поэтому было бы предпочтительным, если бы он не менялся каждый час или около того.
- Адреса slaac+EUI немного говорят о моем mac-адресе, и мне это не нравится.
- Адреса конфиденциальности slaac+ чуть более сохраняют конфиденциальность, но меняются каждые несколько часов, а это менее желательно. Адреса сохраняются, если они все еще используются, но они будут высвобождаться каждый раз, когда я запускаю службу (и необходимо будет обновить dns - что занимает минимум 5 минут).
- Другой вариант - просто статически выбрать суффикс, который мне нравится для моей службы (например,
::d00d
), с тем же глобально маршрутизируемым префиксом, и статически назначить его моему никну, например, так:
$ sudo ip -6 addr add 2001:2:3:4::d00d/64 dev eth0
Тогда в моих приложениях я мог связываться только с этим адресом (или с "::" на устройстве, содержащем этот ip).
# ./myserver -l 2001:2:3:4::d00d/64 -p 8080
Теперь, когда у меня есть прослушивающий сокет, связанный с публично маршрутизируемым IP-адресом на хосте, каков наилучший способ сообщить маршрутизатору, чтобы он пропускал пакеты SYN? Мне нужно пробить отверстие UPnP, NAT-pmp?
Я думаю об этом неправильно? Какая типичная настройка на IPv6?
Обновить
Я попытался использовать настройку hostid
dhcp в моей аренде OpenWRT /etc/config/dhcp
. Предположительно, это позволяет указать последние 32 бита резервирования dhcpv6. Я надеялся получить дополнительный IPv6 с префиксом wan и выбранным суффиксом, но не повезло. Клиент dhcp6 на моем хосте все еще не получает этот дополнительный IP. Вероятно, связано с этой проблемой odhcpd 61 .