Таймауты пинга между VLAN с включенной маршрутизацией; SSH не работает, пока пинг не будет решен.

Вопрос или проблема

Я пытаюсь установить связь между двумя VLAN. Два устройства на разных VLAN не могут общаться друг с другом (SSH, traceroute и т. д.), если я сначала не инициирую пинг. Пинг тоже изначально выдает тайм-аут и иногда вообще не работает (непостоянно). Сеть, о которой идет речь, представлена ниже:

Схема сети

У меня есть коммутатор HPE 1920S с возможностями уровня 3, на котором хостятся два VLAN (VLAN 100 и 300). У каждого VLAN есть свой шлюз (названный ASUS1 и ASUS2, модель DSL-AC88U). Все устройства в VLAN 100 настроены на использование ASUS1 (192.168.1.2) в качестве своего шлюза, а все устройства в VLAN 300 настроены на использование ASUS2 (192.168.4.2) в качестве своего шлюза. Каждый маршрутизатор хостит DHCP-сервер. Оба DHCP-сервера были добавлены в качестве DHCP-ретрансляторов на коммутатор с их соответствующими IP-адресами. У каждого маршрутизатора включен файрвол. ASUS1 также служит сервером OpenVPN в TUN-конфигурации, который я использую (windows1 использует) для подключения к сети удаленно.

Я включил маршрутизацию между двумя VLAN на коммутаторе. Я также добавил следующие статические маршруты:

  1. Конфигурационный файл клиента OpenVPN

    • 192.168.1.0/24 через 10.8.0.1
    • 192.168.4.0/24 через 10.8.0.1
  2. Маршрутизатор ASUS1

    • 10.8.0.0/24 через 10.8.0.1
    • 192.168.4.0/24 через 192.168.1.3
  3. Коммутатор

    • 10.8.0.0/24 через 192.168.1.2 (Next Hop Interface: VLAN 100)
    • 192.168.1.0/24 через 192.168.1.3 (Next Hop Interface: VLAN 100)
    • 192.168.4.0/24 через 192.168.4.3 (Next Hop Interface: VLAN 300)
  4. Маршрутизатор ASUS2

    • 10.8.0.0/24 через 192.168.4.3
    • 192.168.1.0/24 через 192.168.4.3

Я подтвердил следующее:

  • Коммутатор имеет правильные записи для источника и назначения в своей ARP-таблице
  • ARP-таблицы на устройствах назначения и источника, двух маршрутизаторах и коммутаторе НЕ меняются ДО или ПОСЛЕ того, как пинги разрешаются
  • Проблема сохраняется даже при отключенных файрволах на маршрутизаторах
  • На linux1 и linux2 нет файрволов
  • Я могу пинговать все устройства источника и назначения (кроме 10.8.0.2 – клиента VPN) с коммутатора, и они начинают работать немедленно
  • Нет конфликтов IP

Для диагностики я включаю различные дампы, которые показывают мои попытки traceroute, ping и SSH между устройствами. Я также включаю их в порядке, поскольку считаю, что это важно, поскольку поведение traceroute и ping меняется от одной попытки к другой.

Первый дамп показывает мои попытки traceroute от клиента VPN (windows1) на 10.8.0.2 к 192.168.1.19, 192.168.4.20 и 192.168.4.21 соответственно. Обратите внимание на первую звездочку на последнем переходе при пересечении VLAN.

(base) PS C:\Users\myuser> tracert -d 192.168.1.19

Трассировка маршрута к 192.168.1.19 с максимальным количеством 30 переходов

  1   141 мс   141 мс   143 мс  10.8.0.1
  2   143 мс   142 мс   142 мс  192.168.1.19

Трассировка завершена.

(base) PS C:\Users\myuser> tracert -d 192.168.4.20

Трассировка маршрута к 192.168.4.20 с максимальным количеством 30 переходов

  1   142 мс   142 мс   142 мс  10.8.0.1
  2   143 мс   143 мс   143 мс  192.168.1.3
  3     *      142 мс   142 мс  192.168.4.20

Трассировка завершена.

(base) PS C:\Users\myuser> tracert -d 192.168.4.21

Трассировка маршрута к 192.168.4.21 с максимальным количеством 30 переходов

  1   142 мс   142 мс   142 мс  10.8.0.1
  2   143 мс   143 мс   145 мс  192.168.1.3
  3     *      141 мс   141 мс  192.168.4.21

Трассировка завершена.

Второй дамп показывает мои попытки traceroute и ping от 192.168.4.20 к 192.168.1.19. Первый traceroute завершается с ‘!H’ и двумя звездочками. Второй traceroute не разрешается, и я отправляю прерывание клавиатуры. Ping работает, но с потерей пакетов 33%. Последняя попытка traceroute завершается успешно после пинга.

[email protected]:~$ sudo traceroute -d 192.168.1.19
[sudo] пароль для myuser:
traceroute к 192.168.1.19 (192.168.1.19), максимум 30 переходов, пакеты по 60 байт
 1  _gateway (192.168.4.2)  0.464 мс  0.515 мс  0.649 мс
 2  192.168.4.3 (192.168.4.3)  3.674 мс  5.102 мс  11.126 мс
 3  192.168.4.3 (192.168.4.3)  14.924 мс !H * *

[email protected]:~$ sudo traceroute -d 192.168.1.19
traceroute к 192.168.1.19 (192.168.1.19), максимум 30 переходов, пакеты по 60 байт
 1  _gateway (192.168.4.2)  0.488 мс  0.504 мс  0.640 мс
 2  192.168.4.3 (192.168.4.3)  2.594 мс  3.597 мс  4.354 мс^C

[email protected]:~$ ping 192.168.1.19
PING 192.168.1.19 (192.168.1.19) 56(84) байт данных.
64 байта от 192.168.1.19: icmp_seq=2 ttl=63 время=0.410 мс
64 байта от 192.168.1.19: icmp_seq=3 ttl=63 время=0.462 мс
^C
--- статистика пинга 192.168.1.19 ---
3 пакета отправлено, 2 получено, потеря пакетов 33.3333%, время 2080мс
среднее время ответа = 0.410/0.436/0.462/0.026 мс

[email protected]:~$ sudo traceroute -d 192.168.1.19
traceroute к 192.168.1.19 (192.168.1.19), максимум 30 переходов, пакеты по 60 байт
 1  192.168.4.3 (192.168.4.3)  1.671 мс  2.486 мс  3.258 мс
 2  192.168.1.19 (192.168.1.19)  0.477 мс  0.464 мс  0.451 мс

Третий дамп показывает, как SSH-соединение от 192.168.4.21 к 192.168.19 изначально выдает тайм-аут, но в конечном итоге начинает работать после пинга. Обратите внимание на предупреждение ‘Redirect Host (New nexthop: 192.168.4.3)’ перед тем, как пинг начинает работать.

(base) [email protected]:~$ ssh [email protected] -p [редактировано]
ssh: соединение с хостом 192.168.1.19 порт [редактировано]: тайм-аут соединения

(base) [email protected]:~$ sudo traceroute -d 192.168.1.19
[sudo] пароль для myuser:
traceroute к 192.168.1.19 (192.168.1.19), максимум 30 переходов, пакеты по 60 байт
 1  _gateway (192.168.4.2)  0.373 мс  30.085 мс  30.066 мс
 2  192.168.4.3 (192.168.4.3)  2.299 мс  3.130 мс  3.890 мс
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * *^C

(base) [email protected]:~$ ping 192.168.1.19
PING 192.168.1.19 (192.168.1.19) 56(84) байт данных.
От 192.168.4.2: icmp_seq=2 Redirect Host(New nexthop: 192.168.4.3)
64 байта от 192.168.1.19: icmp_seq=2 ttl=63 время=0.632 мс
64 байта от 192.168.1.19: icmp_seq=3 ttl=63 время=0.483 мс
64 байта от 192.168.1.19: icmp_seq=4 ttl=63 время=0.389 мс
64 байта от 192.168.1.19: icmp_seq=5 ttl=63 время=0.395 мс
^C
--- статистика пинга 192.168.1.19 ---
5 пакетов отправлено, 4 получено, 20% потеря пакетов, время 4132мс
среднее время ответа = 0.389/0.474/0.632/0.098 мс

(base) [email protected]:~$ sudo traceroute -d 192.168.1.19
traceroute к 192.168.1.19 (192.168.1.19), максимум 30 переходов, пакеты по 60 байт
 1  192.168.4.3 (192.168.4.3)  1.483 мс  2.294 мс  3.037 мс
 2  192.168.1.19 (192.168.1.19)  0.439 мс  0.405 мс  0.385 мс

(base) [email protected]:~$ ssh [email protected] -p [редактировано]
Подлинность хоста '[192.168.1.19]:[редактировано] ([192.168.1.19]:[редактировано])' не может быть установлена.
Отпечаток ключа ED25519: SHA256:[редактировано].
Этот ключ не известен под другими именами.
Вы уверены, что хотите продолжить подключение (yes/no/[отпечаток])? ^C

Последний дамп показывает, как попытки SSH и traceroute обе не удаются между 10.8.0.2 и 192.168.4.21. Traceroute между ними работал, как видно из первого дампа, но что-то явно изменилось между попытками…

(base) PS C:\Users\myuser> ssh [email protected]
ssh: соединение с хостом 192.168.4.21 порт 22: тайм-аут соединения

(base) PS C:\Users\myuser> tracert -d 192.168.4.21

Трассировка маршрута к 192.168.4.21 с максимальным количеством 30 переходов

  1   142 мс   142 мс   142 мс  10.8.0.1
  2   143 мс   143 мс   143 мс  192.168.1.3
  3     *        *        *     Запрос истек по времени.
  4     *        *        *     Запрос истек по времени.
  5

Мой вопрос: как я могу сделать так, чтобы SSH и traceroute работали постоянно через VPN и между двумя устройствами на месте, но на разных VLAN, без необходимости сначала пинговать, как если бы они были в одной подсети?

Ответ или решение

Настройка сети между VLAN (виртуальными локальными сетями) и обеспечение стабильной связи между устройствами, находящимися в разных VLAN, являются критически важными задачами для всех современных сетей. В вашем случае, вы сталкиваетесь с проблемой, когда SSH-соединение и другие протоколы не работают без предварительной отправки ICMP-запроса (ping). Это неоптимальное поведение может быть вызвано несколькими различными факторами, которые мы рассмотрим ниже.

Возможные причины проблемы

  1. ARP кэш: Поскольку вы наблюдаете, что ARP-таблицы на устройствах не изменяются, возможно, проблема заключается в том, что устройства имеют устаревший ARP-кэш. При первой попытке подключения через SSH или traceroute устройство может не знать MAC-адреса другого устройства, и поэтому необходимо отправить ICMP-запрос для обновления ARP-кэша.

  2. Маршрутизация между VLAN: Убедитесь, что маршрутизация между VLAN настроена корректно. Возможна ситуация, что маршрутизатор (ASUS1 или ASUS2) не обрабатывает пакеты должным образом до того, как вы отправите ping. Проверьте конфигурацию маршрутизации и убедитесь, что маршруты для обоих VLAN установлены правильно.

  3. Проблемы с MTU: Если размер пакетов, отправляемых между VLAN, превышает MTU (Maximum Transmission Unit) на каком-либо узле сети, это может вызвать фрагментацию пакетов и потерю связи. Проверьте размер MTU на всех устройствах в маршруте.

  4. Настройки брандмауера: Несмотря на то, что вы указали, что брандмауэры отключены, стоит перепроверить все политики и настройки. Иногда сетевые фильтры могут блокировать пакеты ICMP, SSH или другие протоколы из подозрительного трафика.

  5. ARP-отправки: Ваши устройства могут не генерировать ARP-запросы должным образом, если они не знают о других устройствах в другом VLAN. Попробуйте вручную обновить ARP-кэш или запустить диагностику с помощью команды arp -a на клиентских машинах и убедитесь, что MAC-адреса отображаются корректно.

Рекомендации по диагностике и устранению неполадок

  1. Очистка ARP-кэша: Запустите команду очистки ARP-кэша на клиентских устройствах перед пробным соединением. Например, используйте arp -d на Windows или ip neigh flush all на Linux.

  2. Проверка маршрутов: Используйте команду для отображения маршрутов на всех узлах, чтобы удостовериться, что маршруты настроены правильно. Вы можете использовать route print на Windows или ip route на Linux.

  3. Мониторинг трафика: Используйте утилиты, такие как Wireshark, чтобы отследить трафик между VLAN и проверить, какие пакеты действительно отправляются и получаются во время подключения. Это поможет понять, где происходит потеря пакетов.

  4. Используйте альтернативные протоколы: Попробуйте использовать telnet для диагностики портов, чтобы проверить, доступен ли SSH-порт без предварительного пинга.

  5. Проверка MTU-параметров: Убедитесь, что все устройства в сети используют одинаковые значения MTU. Вы можете настроить его на 1500 байт или другое значение, подходящее для вашей сети.

Заключение

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

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

Оцените материал
Добавить комментарий

Капча загружается...