Назад | Перейти на главную страницу

Несколько маршрутизаторов IPv6 в одной сети

У меня есть два интернет-провайдера для моей домашней сети. Они подключены к двум отдельным маршрутизаторам. Если я запускаю radvd и dhcpd на обоих маршрутизаторах одновременно, я не получаю подключения по IPv6. Мое подключение по IPv6 работает только в том случае, если только один из маршрутизаторов работает под управлением radvd и dhcpd. Почему так?

Напротив, для IPv4 я запускаю dhcpd на обоих маршрутизаторах, а другие компьютеры в сети случайным образом выбирают IP-адрес и настройки шлюза, на основании которых маршрутизатор ответил первым.

IPv4

Причина, по которой IPv4 ведет себя так, как вы заметили, заключается в том, что изначально он не предназначался для поддержки более одного IP-адреса на интерфейсе. Следовательно, DHCP-клиент будет просто ждать, пока первый DHCP-сервер отправит предложение, и клиент будет в значительной степени предполагать, что это единственный DHCP-сервер.

IPv6

Однако IPv6 предназначен для поддержки многих адресов на интерфейсе, поэтому машина может принимать объявления маршрутизатора от нескольких маршрутизаторов и назначать несколько IP-адресов интерфейсу.

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

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

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

В вашем вопросе недостаточно информации, чтобы с уверенностью сказать, что именно поэтому он вам не подходит. Однако, учитывая предоставленную вами информацию, это кажется наиболее вероятным объяснением.

Простое решение

В краткосрочной перспективе самое простое решение, которое я могу предложить, как заставить эту настройку работать и обеспечить избыточность, - это настроить один из маршрутизаторов только для IPv4, а другой - только для IPv6.

Клиенты, которые реализуют RFC 6555, будут автоматически переключаться между IPv4 и IPv6, поэтому, когда IPv4 и IPv6 проходят через разные маршрутизаторы, происходит переключение между этими двумя маршрутизаторами.

Это будет работать для доступа к сервисам с двойным стеком. Вы можете добиться такого же аварийного переключения для служб только IPv4, используя DNS64 + NAT64. Если ваш интернет-провайдер не предоставляет вам NAT64, вы можете настроить NAT64 на маршрутизаторе, который вы хотите использовать для подключения по IPv6.

Долгосрочное решение

В долгосрочной перспективе вам, вероятно, потребуется избыточность даже при доступе к службам только для IPv6. Наилучший способ добиться этого - если клиентский компьютер автоматически выберет один из двух маршрутизаторов. Это означает, что логика, аналогичная RFC 6555, должна выбирать между двумя соединениями IPv6.

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

Но чтобы получить все преимущества, вам понадобится программное обеспечение, которое все это делает:

  • При получении объявлений маршрутизатора от двух маршрутизаторов настройте маршрутизацию политики (или эквивалент) таким образом, чтобы он обращался к исходному IP-адресу, чтобы решить, какой из двух маршрутизаторов использовать в качестве шлюза для маршрута по умолчанию.
  • Когда приложения выполняют поиск в DNS, отправляют запрос двум рекурсорам DNS (по одному от каждого объявления маршрутизатора) и гарантируют, что исходный IP-адрес каждого DNS-запроса относится к тому же объявлению маршрутизатора, что и IP-адрес назначения.
  • При получении ответа DNS выполните привязку к тому же локальному IP-адресу, на который был отправлен ответ, и попытайтесь подключиться к одному из адресов в ответе.
  • Используйте эквивалентную RFC 6555 логику для выбора между двумя соединениями, открытыми с разными парами адресов IPv6 источника и назначения.