Я настраивал виртуальную машину QEMU/KVM и хотел использовать для нее сетевой мост. В каждом руководстве/учебнике, которые я читал, говорится, что нужно отключить DHCP на физическом сетевом адаптере и включить его на мосте. Чего я не понимаю, так это если мост действует так же, как физический мост/коммутатор, почему ему должен быть назначен IP-адрес, в то время как сам физический сетевой адаптер не имеет такового? Этот вопрос уже задавался пару раз, но я так и не нашел ответа, напримерздесьв ответе говорилось, что таким образом виртуальные машины могут общаться с мостом. Но зачем им это нужно? С реальными физическими машинами мост работает прозрачно и просто пересылает трафик. Итак, мои вопросы:
- Почему виртуальному мосту нужен IP-адрес, а физическому — нет?
- Как физическая сетевая карта узнает, что нужно использовать IP-адрес виртуального моста, если у сетевой карты его нет?
- Почему виртуальным машинам необходимо взаимодействовать с мостом, в то время как физические машины фактически не взаимодействуют с физическим мостом напрямую?
Вот несколько иллюстраций, чтобы лучше продемонстрировать, что я имею в виду:
- Как я себе представляю работу физической сети с сетевым коммутатором:
- Как я себе представляю, как должен работать виртуальный мост
- Насколько я понимаю, это действительно работает
решение1
- Почему виртуальному мосту нужен IP-адрес, а физическому — нет?
Ошибочно полагать, что виртуальному мосту нужен IP-адрес. Он ему не нужен.
Вы на самом делеможетиметь виртуальный мост без IP-адреса. Но тогда сам хост вообще не будет доступен по IP на этом физическом интерфейсе: будут доступны только виртуальные машины.
В корпоративном хосте виртуализации это может быть полезно: у вас может быть клиентская сеть, которую нужно подключить к виртуальным машинам клиентов. Вы можете не захотеть предоставлять доступ из такой сети к самому хосту виртуализации, нотолькок соответствующим виртуальным машинам. Тогда у вас будет другая, физически отдельная, сеть управления, которую вы будете использовать для администрирования хостов виртуализации. Эта сеть будет подключена к хосту через отдельную сетевую карту, которая будетнет be a member of any virtual bridge.
- Как физическая сетевая карта узнает, что нужно использовать IP-адрес виртуального моста, если у сетевой карты его нет?
Если только физическая сетевая карта не имеет специальных функций ускорения IPv4, IP-адрес — это просто полезные данные для сетевой карты. Базовая физическая сетевая карта работает только с Layer-2, т. е. с MAC-адресами. Протокол IP — это Layer-3, и он обычно остается для стека сетевых драйверов операционной системы. Когда вы «настраиваете IP-адрес для сетевой карты» с помощью ifconfig
или ip addr
, вы не обязательно вносите какие-либо изменения в фактическую физическую конфигурацию оборудования, а в абстрактную конструкцию, которая включает как физическую сетевую карту, так и поддержку протокола IP на уровне ОС, связанную с сетевой картой.
Когда физическая сетевая карта настроена для работы в качестве члена моста, любые функции ускорения уровня 3 могут быть отключены в любом случае: работая в качестве части моста, сетевая карта должна получать все входящие пакеты, независимо от MAC-адреса назначения или IP-адреса, а код моста будет решать, будет ли пакет переслан и какому члену моста. Базовый мост не должен вообще не заботиться об IP-адресах. Любая функциональность уровня 3 в мосте выходит за рамки базовой функциональности моста и является/должна быть необязательной в виртуальном мосте.
Если физическая сетевая карта настроена с IP-адресом при настройке в качестве части моста, она активирует функциональность ARP на этой сетевой карте (+ее драйвер). Но исходящие сообщения ARP с этой физической сетевой карты не смогут достичь виртуальных машин: чтобы охватить весь сегмент своими ARP (как того требует надлежащая функциональность уровня 2), драйвер сетевой карты должен будет сгенерировать сообщение ARP как исходящее и входящее сообщение одновременно, а у драйвера сетевой карты не будет кода для этого.
Наличие виртуального моста с виртуальными машинами означает, что некоторые части сегмента IP моста будут физически находиться за пределами хоста, в то время как другие будут содержаться внутри виртуальных машин, расположенных внутри хоста. Если хост будет использовать NIC как обычно, пытаясь связаться с одной из виртуальных машин, пакеты будут напрасно отправляться из хоста на физический коммутатор или маршрутизатор, к которому подключен хост, а оттуда им придется возвращаться на хост и через мост на целевую виртуальную машину.
Это, безусловно, было бы неэффективно и, возможно, вообще не сработало бы: физический коммутатор, к которому подключен хост с виртуальным мостом, обычно не имел бы причин отправлять какие-либо пакеты, исходящие от этого хоста, обратно самому хосту.
Вместо этого исходящие пакеты от хоста к сегменту мостовой сети должны быть отправлены через код моста, который сначала ищет, какой интерфейс моста (виртуальный или физический) будет «ближайшим» к месту назначения. Если место назначения известно мосту, исходящий пакет отправляется непосредственно к нему. Для связи между хостом и его виртуальными машинами это означает, что связь происходит полностью внутри физического хоста и вообще не использует физическую пропускную способность сети за пределами хоста.
Если MAC-адрес назначения мосту неизвестен, исходящие пакеты изначально отправляются на все интерфейсы участников моста: как только будет получен ответ, мост узнает местоположение пункта назначения исходного пакета и может вернуться к эффективному методу работы (как указано выше).
При выполнении ARP-запросов с хоста, содержащего мост, запросы должны транслироваться как на виртуальные машины, так и наииз физического сетевого адаптера, поэтому запросы будут фактически отправляться навесьсегмент сети: код моста может это сделать, отдельная физическая сетевая карта — нет.
Я думаю, что нет требования, чтобы мост Linux был исключительно физическим или виртуальным: я не понимаю, почему мост Linux не может иметь несколько физических интерфейсов.илюбое количество виртуальных машин, связанных с ним. Но в корпоративной среде вы, как правило, не захотите строить такой "хост, который делает все". Он может легко стать сложной, критической частью инфраструктуры, которая не может иметь простоев; другими словами, головной болью для системных администраторов.
- Почему виртуальным машинам необходимо взаимодействовать с мостом, в то время как физические машины фактически не взаимодействуют с физическим мостом напрямую?
Опять же заблуждение: виртуальные машины делаютнетнужен IP-адрес на мосту «для связи с мостом» как таковым.
Но если тыхотетьЧтобы хост и виртуальные машины могли взаимодействовать друг с другом в одном сегменте IP-сети, необходимо назначить IP-адрес мостовому устройству.
IP-адрес на мостовом устройстве в первую очередь предназначен для обслуживания коммуникационных потребностейхозяин, не изВМ- но он может позволить хосту эффективно взаимодействовать с виртуальными машинами по IP без использования внешних устройств, если это то, что вам нужно.