Посмотрите на рукопожатие Nebula с неправильной стороны, и два механизма покажутся взаимозаменяемыми. Один решает, какие адреса узел сообщает маяку и какие удалённые адреса он попробует; другой решает, что может пройти после того, как туннель существует. Фильтр может остановить соединение до того, как будет оценено хоть одно правило межсетевого экрана, а правило экрана не может оживить конечную точку, которую удалило обнаружение. Два слоя отвечают на разные вопросы, и порядок их действия — ключ.

Проследите одно соединение через четыре этапа: объявленный локальный адрес, рассматриваемая удалённая конечная точка, рукопожатие и трафик в наложенной сети. У каждого этапа своя конфигурация и своя подпись отказа.

Начните с локального адреса, который объявляет узел

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

Пройдите по интерфейсам хоста и спросите, до каких из них удалённый партнёр действительно может добраться. Адрес моста Docker локален для этого хоста и бесполезен для партнёра в другой сети. Его объявление расходует обнаружение и может отправить партнёра к адресу, который никогда не отвечает. Всё, куда партнёр не может маршрутизировать, — шум в ответе маяка.

Здесь узкий список разрешений безопаснее широкого списка запретов. Если есть только записи разрешений, неопределённый остаток исключается; добавление записи запрета позже меняет логику по умолчанию и требует отдельного пересмотра. Это изменение заслуживает второго взгляда на значение по умолчанию.

Затем наблюдайте за выбором удалённой конечной точки

remote_allow_list фильтрует адреса, которые этот хост рассмотрит для удалённого партнёра во время рукопожатия. Это относится к адресу базовой сети, а не к адресу наложенной сети, который партнёр будет использовать после поднятия туннеля.

Частный диапазон может быть полностью пригодным в общей офисной сети и бессмысленным, когда два хоста находятся в несвязанных сетях, которые обе используют 10.0.0.0/8. Фильтр позволяет предпочесть маршрутизируемый путь и проигнорировать совпадение.

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

Фильтр имён интерфейсов на объявляющей стороне может убрать конечную точку раньше, чем принимающая сторона её увидит. Проверяйте оба узла, когда не работает только одно направление.

После рукопожатия действуют правила доступа наложенной сети

Правила межсетевого экрана Nebula работают внутри наложенной сети, после установления туннеля. Они сопоставляют хосты, группы, порты и протоколы и решают, может ли пакет войти в локальный хост или покинуть его. Они не выбирают конечную точку в базовой сети.

Это разделение объясняет частую ошибочную диагностику. Оператор добавляет правило экрана для порта и всё равно не может подключиться, потому что фильтр маяка убрал единственную достижимую конечную точку. Другой оператор открывает фильтр адресов и всё равно не достигает службы, потому что экран наложенной сети отклоняет порт.

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

Читайте значение по умолчанию, когда смешиваете разрешение и запрет

Конфигурация маяка поддерживает списки только с разрешениями, только с запретами и смешанные, и значение по умолчанию для неопределённого остатка различается между этими формами. Смешанному списку нужен явный стандарт для семейства адресов; предположение, что остаток ведёт себя как предыдущая конфигурация, — это путь, по которому работающая конечная точка тихо исчезает.

lighthouse:
  local_allow_list:
    interfaces:
      docker0: false
  remote_allow_list:
    192.168.0.0/16: true
    default: false

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

Запишите, какие адреса должны были быть достижимы, и проверяйте с обеих сторон. Фильтр, который работает для одной пары партнёров, может не работать для другой пары, чей единственный общий путь использует адрес, исключённый списком.

Используйте relay, когда ни одна прямая конечная точка недостижима

Если каждая конечная точка-кандидат отфильтрована или недостижима, ответ — не более широкий список разрешений, который снова принимает адреса, которым вы не доверяете. Конфигурация relay в Nebula даёт альтернативный путь для партнёра, когда прямое соединение неосуществимо.

Relay решает задачи транспорта и обнаружения, а не авторизации, и он не расширяет экран. Экран наложенной сети по-прежнему решает, какие службы можно использовать, а relay не превращает фильтрацию маяка в механизм контроля доступа.

Проверьте путь через relay с отключёнными прямыми конечными точками и убедитесь, что нужная служба по-прежнему работает, а ненужная — нет. Этот единственный тест отделяет исправление транспорта от изменения политики и сохраняет оба слоя честными.

Похожие статьи