Несколько маршрутизаторов IPv6 в одной сети
У меня есть два интернет-провайдера для моей домашней сети. Они подключены к двум отдельным маршрутизаторам. Если я одновременно запускаю radvd и dhcpd на обоих маршрутизаторах, я не получаю подключения по IPv6. Мое подключение IPv6 работает только в том случае, если только один из маршрутизаторов работает под управлением radvd и dhcpd. Почему это так?
В отличие от этого, для IPv4 я запускаю dhcpd на обоих маршрутизаторах, а другие компьютеры в сети произвольно выбирают базу настроек IP и шлюза, на которой маршрутизатор реагировал первым.
2 ответа
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.
Не уверен, как конечные точки делают это, когда существует несколько адресов/маршрутов ipv6 с одинаковыми предпочтениями.
В pfsense есть одно решение: https://docs.netgate.com/pfsense/en/latest/recipes/multiwan-ipv6.html .
По сути, вашей конечной точке назначается префикс, который вы делегировали из вашей «основной» глобальной сети, но брандмауэр может выбрать преобразование вашего IP-адреса в префикс, делегированный из вашей «вторичной» глобальной сети.