Как предпочесть связь в локальной подсети с использованием IPv6 ULA вместо IPv6 GUA?

569
Santobert

все мои устройства имеют адреса IPv4, IPv6 LL, IPv6 ULA и IPv6 GUA, такие как:

3: wlp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 88:b1:11:ed:21:c8 brd ff:ff:ff:ff:ff:ff inet 192.168.1.22/24 brd 192.168.1.255 scope global dynamic noprefixroute wlp1s0 valid_lft 863780sec preferred_lft 863780sec inet6 fd00::xxxx:xxxx:xxxx:xxxx/64 scope global dynamic noprefixroute  valid_lft 6985sec preferred_lft 3385sec inet6 2003:d4:4f1f:9500:xxxx:xxxx:xxxx:xxxx/64 scope global dynamic noprefixroute  valid_lft 6985sec preferred_lft 1585sec inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link noprefixroute  valid_lft forever preferred_lft forever 

Некоторые более сложные устройства (поставщики услуг) имеют брандмауэр iptables, установленный с:

-A INPUT -i lo -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -p ipv6-icmp -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 

Когда я сейчас пытаюсь связаться с устройством a с устройства b через DNS-имя, иногда используется GUA IPv6, а иногда ULA. Мои брандмауэры разрешают некоторые порты (например, SSH) только для соединений из подсети ULA. Поэтому я хочу принудительно использовать ULA в своей подсети.

Это правильный путь? Как я могу решить эту проблему, не отключая мои брандмауэры и не вводя IP-адрес назначения?

Спасибо

EDIT 20181118: RFC 6724 гласит: По умолчанию глобальные адреса IPv6 предпочтительнее, чем назначения ULA, поскольку произвольный ULA не всегда доступен (благодаря Рону Мопину). Так что я явно что-то не так сделал с моей сетью. Есть ли другой способ фильтрации трафика в моей подсети с помощью iptables? Глобальный префикс IPv6 является динамическим, поэтому я не могу использовать его в своих статических iptables для определения, поступают ли пакеты из моей подсети.

0
https://superuser.com/questions/436574/ipv4-vs-ipv6-priority-in-windows-7 rtaccon 5 лет назад 1
[RFC 6724, Выбор адреса по умолчанию для Интернет-протокола версии 6 (IPv6)] (https://tools.ietf.org/html/rfc6724) объясняет, как адреса должны выбираться. Я не буду гарантировать, что ваша ОС следует RFC. Ron Maupin 5 лет назад 0
Добавить информацию из RFC 6724 (спасибо Рону Мопину). Там до сих пор нет решения. Santobert 5 лет назад 0

1 ответ на вопрос

2
dirkt

Попробуйте редактировать /etc/gai.confи присвойте своим ULA приоритет над GUA.

Если это не помогает, и при условии, что DNS возвращает все адреса маршрутов в случайном порядке, можно обойти это путем добавления новой записи адреса для каждой машины (возможно, в другом поддомене), которая возвращает только адрес ULA.

Это было бы решением, если бы я решил остаться со своей структурой сети. RFC 6724 описывает эту проблему без конкретного решения. Похоже, я сделал что-то не так, когда спроектировал структуру своей сети. Должно быть другое решение, чтобы определить, поступают ли входящие пакеты из моей подсети или нет. Santobert 5 лет назад 0
RFC 6724 описывает, как выбирается адрес источника с учетом адреса назначения. То, что иногда GUA, а иногда ULA используются в качестве * исходных * адресов, показывает, что иногда GUA, а иногда и ULA используются в качестве * адресатов *, и это обычно происходит от DNS, возвращающей адреса в случайном порядке. Если вы не думаете, что это причина, отладьте ее: напишите простую программу на C, которая выполняет разрешение имен хостов и распечатывает получаемый IPv6-адрес, запускайте ее несколько раз. Редактирование `/ etc / gai.conf` должно позволить вам предпочитать ULA в качестве адреса назначения, исправляя проблему. dirkt 5 лет назад 0
Если вы хотите определить, приходят ли пакеты из вашей подсети или нет, вы можете, если конечно, проверить * все * префиксы, которые вы назначили в своей подсети, включая GUA. Тогда не имеет значения, какие префиксы выбираются на основе DNS. dirkt 5 лет назад 0
Спасибо за разъяснения. Я прочитал несколько других постов, таких как [this] (https://superuser.com/questions/802973/ip6tables-how-to-handle-periodically-changing-prefix), в которых довольно хорошо описывается моя проблема. Я не хочу редактировать конфигурацию клиента, если не существует решения, позволяющего решить проблему для всех клиентов. В статье выше рекомендуется использовать имя хоста в iptables. Разве это небезопасно, поскольку каждый может назначить себе другое имя хоста и / или домен? Santobert 5 лет назад 0
Как я уже писал: проблемный момент заключается в том, как работает ваш DNS (и вы не дали никаких подробностей о том, как он настроен). Вы также не сказали, как вы приобрели свой префикс GUA (у провайдера? Он меняется?). Чтобы быть в безопасности, вы должны контролировать свой DNS (например, через прокси или даже используя `/ etc / hosts`). Если вы можете гарантировать, что (1) у вас есть специальная запись DNS только для ULA, например, в поддомене, или (2) ULA всегда являются предпочтительным выбором, либо через `/ etc / gai.conf`, либо через конфигурацию DNS, или (3) ваш префикс GUA и записи DNS всегда совпадают, тогда вы можете основывать записи `iptables` на этом. dirkt 5 лет назад 0
Так что подумайте о своей инфраструктуре DNS. `iptables` всегда будет работать на числовой основе. Вы можете регулярно обновлять записи из текущего DNS или устанавливать синхронность через динамический DNS, но DNS является ключевым моментом. dirkt 5 лет назад 0
Префикс GUA исходит от моего провайдера. Я получаю полный двойной стек. К сожалению, префикс часто меняется, поэтому я не могу на это полагаться. Мой локальный DNS-сервер работает на моем маршрутизаторе (AVM FritzBox 7590). Я не могу контролировать DNS напрямую через веб-интерфейс, потому что нет никаких опций. Я бы использовал префикс GUA для iptables, если бы он не менялся так часто. Большое спасибо за вашу помощь и терпение. Santobert 5 лет назад 0
Таким образом, вы можете выбрать (1) изменить всех клиентов: либо `gai.conf` (сначала попробуйте один клиент), либо выделенный` / etc / hosts` для ULA. Массовое изменение их через `ssh` легко, если ключи установлены; (2) переместите DNS из Fritzbox на другое устройство, которым вы управляете; (3) взломать Fritzbox DNS, экспортировав конфигурацию, расшифровав ее (google), добавив статические записи DNS для ULA и снова импортировав ее. dirkt 5 лет назад 0
Спасибо. Я подумаю об этом. Мое предпочтительное решение (2) с использованием выделенного DNS. Похоже, самое чистое решение для меня. Santobert 5 лет назад 0