Особенности работы vSwitch в ESXi

Глеб Хохлов
AntiDDoS Life
Published in
2 min readJul 27, 2019

Кросспост из моего Facebook

В рамках работы над MITIGATOR на ESXi приходиться собирать различные извращенные схемы сети. В том числе с участием виртуальных L2 transparent устройств, нескольких vMX, переходом трафика из реальной сети в вирутальную, и целой пачки vSwitch. И чаще всего сеть на этом всём виртуальном зоопарке работает не так как ожидается.

Не так как ожидает обычный сетевик.

Во-первых, чудят сами виртуальные устройства.
Во-вторых, не вся функциональность железных собратьев перенесена в виртуалки.
В-третьих. Оказалось vSwitch на ESXi есть принципиальное отличие от обычного switch, но из настроек это не понять. А почти за 10 лет работы с ESXi ни разу не натыкался на описание.

vSwitch имеет ряд настроек которые хорошо описаны и нормально ложатся в парадигму обычного сетевика. В том числе security настройки:
*Promiscuous Mode* — дает доступ ко всем фреймам проходящим через vSwitch, либо в рамках VLAN.
*MAC Address Changer* — разрешает принимать фреймы у которых dst MAC не соответствует MAC адресу интерфейса VM. Такое может быть, когда уже внутри VM через ОС поменяли MAC адрес на интерфейсе.
*Forget Transmit* — позволяет отправлять фреймы у которых src MAC не принадлежит VM.

Но с пониманием работы этих опций, и даже с их перебором — сеть не работает как ожидается. Потому что в моей картине мира не хватало следующей информации:

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

Во многом аналогично такому физическому коммутатору, любой виртуальный коммутатор также поддерживает некую таблицу MAC адресов, однако для виртуального коммутатора отсутствует какой бы то ни было процесс обучения. Виртуальный коммутатор уже будет иметь некий перечень MAC адресов и их номеров виртуальных портов. Если в виртуальный коммутатор поступает некий кадр с каким-то MAC адресом, который не представлен в имеющейся в виртуальном коммутаторе таблице MAC адресов, тогда она отсылается через физический NIC (активные восходящие соединения), подключённый к данному виртуальному коммутатору. Это остаётся верным только если источником данного потока является некая виртуальная машина или некий интерфейс vmkernel, иными словами, только в случае когда этот кадр поступает через некий виртуальный порт. Если в какой бы то ни было виртуальный коммутатор поступает некий кадр с неизвестным MAC адресом через его физическое восходящее соединение, тогда этот кадр отбрасывается данным виртуальным коммутатором.”
http://onreader.mdl.ru/LearningVMwareVsph…/content/Ch04.html

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

--

--

Глеб Хохлов
AntiDDoS Life

Эксперт в защите от DDoS-атак. Продакт-менеджер в MITIGATOR.