Вопрос или проблема
Я пытаюсь установить связь между двумя 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 на коммутаторе. Я также добавил следующие статические маршруты:
-
Конфигурационный файл клиента OpenVPN
- 192.168.1.0/24 через 10.8.0.1
- 192.168.4.0/24 через 10.8.0.1
-
Маршрутизатор ASUS1
- 10.8.0.0/24 через 10.8.0.1
- 192.168.4.0/24 через 192.168.1.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)
-
Маршрутизатор 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). Это неоптимальное поведение может быть вызвано несколькими различными факторами, которые мы рассмотрим ниже.
Возможные причины проблемы
-
ARP кэш: Поскольку вы наблюдаете, что ARP-таблицы на устройствах не изменяются, возможно, проблема заключается в том, что устройства имеют устаревший ARP-кэш. При первой попытке подключения через SSH или traceroute устройство может не знать MAC-адреса другого устройства, и поэтому необходимо отправить ICMP-запрос для обновления ARP-кэша.
-
Маршрутизация между VLAN: Убедитесь, что маршрутизация между VLAN настроена корректно. Возможна ситуация, что маршрутизатор (ASUS1 или ASUS2) не обрабатывает пакеты должным образом до того, как вы отправите ping. Проверьте конфигурацию маршрутизации и убедитесь, что маршруты для обоих VLAN установлены правильно.
-
Проблемы с MTU: Если размер пакетов, отправляемых между VLAN, превышает MTU (Maximum Transmission Unit) на каком-либо узле сети, это может вызвать фрагментацию пакетов и потерю связи. Проверьте размер MTU на всех устройствах в маршруте.
-
Настройки брандмауера: Несмотря на то, что вы указали, что брандмауэры отключены, стоит перепроверить все политики и настройки. Иногда сетевые фильтры могут блокировать пакеты ICMP, SSH или другие протоколы из подозрительного трафика.
-
ARP-отправки: Ваши устройства могут не генерировать ARP-запросы должным образом, если они не знают о других устройствах в другом VLAN. Попробуйте вручную обновить ARP-кэш или запустить диагностику с помощью команды
arp -a
на клиентских машинах и убедитесь, что MAC-адреса отображаются корректно.
Рекомендации по диагностике и устранению неполадок
-
Очистка ARP-кэша: Запустите команду очистки ARP-кэша на клиентских устройствах перед пробным соединением. Например, используйте
arp -d
на Windows илиip neigh flush all
на Linux. -
Проверка маршрутов: Используйте команду для отображения маршрутов на всех узлах, чтобы удостовериться, что маршруты настроены правильно. Вы можете использовать
route print
на Windows илиip route
на Linux. -
Мониторинг трафика: Используйте утилиты, такие как Wireshark, чтобы отследить трафик между VLAN и проверить, какие пакеты действительно отправляются и получаются во время подключения. Это поможет понять, где происходит потеря пакетов.
-
Используйте альтернативные протоколы: Попробуйте использовать
telnet
для диагностики портов, чтобы проверить, доступен ли SSH-порт без предварительного пинга. -
Проверка MTU-параметров: Убедитесь, что все устройства в сети используют одинаковые значения MTU. Вы можете настроить его на 1500 байт или другое значение, подходящее для вашей сети.
Заключение
Проблема с отсутствием стабильной связи между устройствами на разных VLAN до отправки ping может быть вызвана несколькими факторами, начиная от ARP-кэша и настройки маршрутизации и заканчивая наличием сетевых фильтров. Следуя описанным рекомендациям и проводя диагностику на каждом этапе, вы сможете выявить и решить проблему, обеспечив тем самым стабильную работу SSH и других протоколов в вашей сети.
Если после выполнения вышеперечисленных шагов проблема не будет решена, возможно, стоит рассмотреть возможность обращения к технической поддержке вашего сетевого оборудования для более детальной помощи.