1) Как гипервизор создает виртуальный сетевой адаптер, и как происходит передача запроса от виртуального адаптера к физическому адаптеру, и зачем нужно использовать виртуальный адаптер, вместо того чтобы направить запрос напрямую с физического адаптера к роутеру? <br/> 2) Кроме физического роутера, в каких еще случаях применяется технология NAT, если у виртуальной машины установлен тип сетевого подключения NAT? <br/> (Возможно, существуют другие ошибки в моем понимании, так как я только начал изучать данный материал!)
1) Гипервизор создает виртуальный сетевой адаптер, который взаимодействует с виртуальной машиной. При отправке запроса от виртуальной машины к компьютеру, подключенному к Wi-Fi роутеру, запрос сначала передается от виртуального сетевого адаптера к физическому сетевому адаптеру хост-системы (компьютера, на котором работает гипервизор). Затем данные передаются по Wi-Fi сети до роутера, который обрабатывает запрос и направляет его к нужному компьютеру. Использование виртуального адаптера важно для обеспечения изоляции виртуальных сетей, а также управления трафиком и сегментацией сетей в виртуальной среде. Это также позволяет более эффективно использовать доступные ресурсы и обеспечивать безопасность виртуальных машин. 2) Технология Network Address Translation (NAT) используется не только на физическом роутере, но также может применяться на уровне виртуальных сетевых адаптеров в гипервизоре. Если у виртуальной машины установлен тип сетевого подключения NAT, то гипервизор будет выполнять функцию NAT для обеспечения связи виртуальной машины с внешней сетью. Это позволяет скрыть внутренний IP-адрес виртуальной машины и использовать один публичный IP-адрес для общения с внешними узлами в сети.
1. Можно использовать тот же физический адаптер, но как уже написали - не будет изоляции. А иногда она нужна.
2. NAT применяется везде, где он нужен исходя из задачи. В случае с виртуалками NAT идет либо на гипервизоре, либо уже на роутере, если выбран режим "мост" для сети.
Так же NAT используется на VPN серверах, ну и вообще везде где надо "пропустить" траффик через сервер, с подменой адресов
Два способа:
1. сетевой мост/bridge
на хост машине создается tap устройство - виртуальный сетевой адаптер, пакеты с которого которого принимает и отправляет приложение - гипервизор, все пакеты, отправленные на это устройство 'снаружи', будут продублированы как исходящие внутри виртуальной машины и наоборот
Чтобы виртуальная машина получила доступ к внешней сети, необходимо этот виртуальный адаптер и реальный сетевой интерфейс хост машины объединить в бридж (ip адрес сети уже назначается этому мосту), это действие равнозначно подключению двух проводов ethernet (в данном случае второй - виртуальный) в простой сетевой коммутатор - свитч.
Сетевой мост можно собрать из более чем двух сетевых адаптеров, например можно объединить сетевой адаптер виртуальной машины + настоящий сетевой адаптер + устройство vpn, и получится что все они объединены в одну локальную сеть.
2. специальный драйвер, который симулирует прием и передачу пакетов прямо на выбранное сетевое устройство (так делает к примеру virtualbox на windows), в отличии от сетевого моста, так можно сделать только с одним устройством.
3. на самом деле способов больше, у qemu можно соединить гостевое сетевое устройство с приложением на хост системе напрямую (не нужны драйвера), так же можно ни с чем не соединять, но можно пробросить порт снаружи внутрь гостевой (или соединить только с другой виртуальной машиной, получится приватная внутренняя сеть, к которой имеют доступ только виртуалки) и прочие странные конфиги.
Если используется NAT то внутри гипервизора поднимается виртуальный роутер, доступа к которому у пользователя обычно нет, внешний сетевой интерфейс этого виртуального роутера так же по одному из вышеописанным способов подключается к хост системе.
1. Адаптер создаётся средствами операционной системы, как простая болванка, которая извне подчиняется всем правилам сетевой маршрутизации, а изнутри чисто программно делает с пакетами то, что написано в коде драйвера-фильтра.
В винде про это можно почитать на MSDN . Про линукс немного инфы есть здесь .
В физический адаптер пакеты попадают по общим правилам маршрутизации в системе, как если бы это была реальная сеть: пакет, проходя через десятки условий, масок и цепочек фильтров, в конечном итоге куда-то направляется, либо фильтруется, либо маркируется, инкапсулируется, и т. п. Выйдя программно из виртуального интерфейса, дальше всё подчиняется политике маршрутизации сетевого стека.
Физический адаптер можно так же использовать, просто это немного сложнее и требует поддержки определённой технологии от процессора, железки и прошивки, например IOMMU , с помощью которой можно как бы "пробросить" реальную железку внутрь гостевой системы гипервизора. Но при этом сетевой адаптер бесследно исчезнет из основной хостовой системы.
Ещё более продвинутая технология -- SR-IOV , которая честно поделит устройство между разными системами, но нужна так же поддержка технологии процессором, платой, сетевым адаптером и гипервизором.
2. Технология NAT это просто подмена адреса и запоминание, какой поменялся на какой, чтобы потом при ответном пакете вернуть его обратно в нужную подсеть. В виртуалках он по умолчанию используется как простейший способ изоляции подсетей. Чтобы подсеть виртуалки не поломала основную сеть. А тем, кому нужны конкретные задачи, могут переключить режим NAT в какой-то другой, более "опасный" для сети режим, при этом понимая, что он делает.