Использование виртуальных сетевых устройств в виртуальной сети

Область применения: Windows Server 2022, Windows Server 2019, Windows Server 2016, Azure Stack HCI, версии 21H2 и 20H2

В этом разделе описано, как развернуть виртуальные (модуль) сети в виртуальных сетях клиента. Виртуальные (модуль) сети можно добавить в сети, которые выполняют определяемую пользователем маршрутизацию и функции зеркало портов.

Типы виртуальных (модуль) сети

Вы можете использовать один из двух типов виртуальных (модуль):

  1. Определяемая пользователем маршрутизация — заменяет распределенные маршрутизаторы в виртуальной сети возможностями маршрутизации виртуальных (модуль). При определяемой пользователем маршрутизации виртуальная (модуль) используется в качестве маршрутизатора между виртуальными подсетями в виртуальной сети.

  2. Зеркало порта — весь сетевой трафик, входящий или покидающий отслеживаемый порт, дублируется и отправляется в виртуальную (модуль) для анализа.

Развертывание виртуальной сети (модуль)

Чтобы развернуть виртуальную (модуль) сети, необходимо сначала создать виртуальную машину, содержащую (модуль), а затем подключить виртуальную машину к соответствующим подсетям виртуальной сети. Дополнительные сведения см. в статье "Создание виртуальной машины клиента" и Подключение к виртуальная сеть клиента или виртуальной локальной сети.

Для некоторых (модуль) требуется несколько виртуальных сетевых адаптеров. Как правило, один сетевой адаптер, выделенный для управления (модуль) во время обработки трафика дополнительных адаптеров. Если для (модуль) требуется несколько сетевых адаптеров, необходимо создать каждый сетевой интерфейс в сетевом контроллере. Необходимо также назначить идентификатор интерфейса для каждого узла для каждого из дополнительных адаптеров, которые находятся в разных виртуальных подсетях.

После развертывания виртуальной сети (модуль) можно использовать (модуль) для определенной маршрутизации, переноса зеркало или обоих.

Пример: определяемая пользователем маршрутизация

Для большинства сред требуется только системные маршруты, уже определенные распределенным маршрутизатором виртуальной сети. Однако может потребоваться создать таблицу маршрутизации и добавить один или несколько маршрутов в определенных случаях, например:

  • Принудительное туннелирование для доступа к Интернету через вашу локальную сеть.
  • Использование виртуальных (модуль) в вашей среде.

Для этих сценариев необходимо создать таблицу маршрутизации и добавить определяемые пользователем маршруты в таблицу. Вы можете использовать несколько таблиц маршрутизации и связать одну и ту же таблицу маршрутизации с одной или несколькими подсетями. Вы можете связать каждую подсеть только с одной таблицей маршрутизации. Все виртуальные машины в подсети используют таблицу маршрутизации, связанную с подсетью.

Подсети используют системные маршруты, пока таблица маршрутизации не будет связана с подсетью. После того как связь существует, маршрутизация выполняется на основе длинного сопоставления префикса (LPM) между определяемыми пользователем маршрутами и системными маршрутами. Если имеется несколько маршрутов с одинаковым совпадением LPM, то определяемый пользователем маршрут сначала выбирается перед системным маршрутом.

Процедуры:

  1. Создайте свойства таблицы маршрутов, которая содержит все определяемые пользователем маршруты.

    Системные маршруты по-прежнему применяются в соответствии с правилами, определенными выше.

     $routetableproperties = new-object Microsoft.Windows.NetworkController.RouteTableProperties
    
  2. Добавьте маршрут в свойства таблицы маршрутизации.

    Любой маршрут, предназначенный для подсети 12.0.0.0/8, направляется в виртуальную (модуль) в 192.168.1.10. (модуль) должен иметь виртуальный сетевой адаптер, подключенный к виртуальной сети с этим IP-адресом, назначенным сетевому интерфейсу.

     $route = new-object Microsoft.Windows.NetworkController.Route
     $route.ResourceID = "0_0_0_0_0"
     $route.properties = new-object Microsoft.Windows.NetworkController.RouteProperties
     $route.properties.AddressPrefix = "0.0.0.0/0"
     $route.properties.nextHopType = "VirtualAppliance"
     $route.properties.nextHopIpAddress = "192.168.1.10"
     $routetableproperties.routes += $route
    

    Совет

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

  3. Добавьте таблицу маршрутизации в сетевой контроллер.

     $routetable = New-NetworkControllerRouteTable -ConnectionUri $uri -ResourceId "Route1" -Properties $routetableproperties
    
  4. Примените таблицу маршрутизации к виртуальной подсети.

    При применении таблицы маршрутов к виртуальной подсети первая виртуальная подсеть в сети Tenant1_Vnet1 использует таблицу маршрутов. Таблицу маршрутов можно назначить столько подсетей в виртуальной сети, сколько нужно.

     $vnet = Get-NetworkControllerVirtualNetwork -ConnectionUri $uri -ResourceId "Tenant1_VNet1"
     $vnet.properties.subnets[0].properties.RouteTable = $routetable
     new-networkcontrollervirtualnetwork -connectionuri $uri -properties $vnet.properties -resourceId $vnet.resourceid
    

После применения таблицы маршрутизации к виртуальной сети трафик перенаправляется в виртуальную (модуль). Чтобы перенаправить трафик, необходимо настроить таблицу маршрутизации в виртуальной (модуль) таким образом, чтобы она соответствовала вашей среде.

Пример: зеркало порта

В этом примере вы настроите трафик для MyVM_Ethernet1 зеркало Appliance_Ethernet1. Предполагается, что вы развернули две виртуальные машины, одну из них как (модуль) и другую, как виртуальную машину для мониторинга с помощью зеркало.

У (модуль) должен быть второй сетевой интерфейс для управления. После включения зеркало в качестве назначения в Appliciance_Ethernet1 он больше не получает трафик, предназначенный для ip-интерфейса, настроенного там.

Процедуры:

  1. Получите виртуальную сеть, в которой находятся виртуальные машины.

    $vnet = Get-NetworkControllerVirtualNetwork -ConnectionUri $uri -ResourceId "Tenant1_VNet1"
    
  2. Получите сетевые интерфейсы сетевого контроллера для зеркало источника и назначения.

    $dstNic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "Appliance_Ethernet1"
    $srcNic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  3. Создайте объект serviceinsertionproperties, чтобы содержать правила зеркало портов и элемент, представляющий конечный интерфейс.

    $portmirror = [Microsoft.Windows.NetworkController.ServiceInsertionProperties]::new()
    $portMirror.Priority = 1
    
  4. Создайте объект serviceinsertionrules, чтобы содержать правила, которые должны быть сопоставлены для отправки трафика в (модуль).

    Правила, определенные ниже, соответствуют всем трафику, входящий и исходящий трафик, который представляет традиционный зеркало. Эти правила можно изменить, если вы заинтересованы в зеркало определенного порта или конкретного источника или назначения.

    $portmirror.ServiceInsertionRules = [Microsoft.Windows.NetworkController.ServiceInsertionRule[]]::new(1)
    
    $portmirror.ServiceInsertionRules[0] = [Microsoft.Windows.NetworkController.ServiceInsertionRule]::new()
    $portmirror.ServiceInsertionRules[0].ResourceId = "Rule1"
    $portmirror.ServiceInsertionRules[0].Properties = [Microsoft.Windows.NetworkController.ServiceInsertionRuleProperties]::new()
    
    $portmirror.ServiceInsertionRules[0].Properties.Description = "Port Mirror Rule"
    $portmirror.ServiceInsertionRules[0].Properties.Protocol = "All"
    $portmirror.ServiceInsertionRules[0].Properties.SourcePortRangeStart = "0"
    $portmirror.ServiceInsertionRules[0].Properties.SourcePortRangeEnd = "65535"
    $portmirror.ServiceInsertionRules[0].Properties.DestinationPortRangeStart = "0"
    $portmirror.ServiceInsertionRules[0].Properties.DestinationPortRangeEnd = "65535"
    $portmirror.ServiceInsertionRules[0].Properties.SourceSubnets = "*"
    $portmirror.ServiceInsertionRules[0].Properties.DestinationSubnets = "*"
    
  5. Создайте объект serviceinsertionelements, содержащий сетевой интерфейс зеркало (модуль).

    $portmirror.ServiceInsertionElements = [Microsoft.Windows.NetworkController.ServiceInsertionElement[]]::new(1)
    
    $portmirror.ServiceInsertionElements[0] = [Microsoft.Windows.NetworkController.ServiceInsertionElement]::new()
    $portmirror.ServiceInsertionElements[0].ResourceId = "Element1"
    $portmirror.ServiceInsertionElements[0].Properties = [Microsoft.Windows.NetworkController.ServiceInsertionElementProperties]::new()
    
    $portmirror.ServiceInsertionElements[0].Properties.Description = "Port Mirror Element"
    $portmirror.ServiceInsertionElements[0].Properties.NetworkInterface = $dstNic
    $portmirror.ServiceInsertionElements[0].Properties.Order = 1
    
  6. Добавьте объект вставки службы в сетевой контроллер.

    При выполнении этой команды весь трафик к сетевому интерфейсу (модуль), указанному на предыдущем шаге, останавливается.

    $portMirror = New-NetworkControllerServiceInsertion -ConnectionUri $uri -Properties $portmirror -ResourceId "MirrorAll"
    
  7. Обновите сетевой интерфейс источника, который должен быть зеркало.

    $srcNic.Properties.IpConfigurations[0].Properties.ServiceInsertion = $portMirror
    $srcNic = New-NetworkControllerNetworkInterface -ConnectionUri $uri  -Properties $srcNic.Properties -ResourceId $srcNic.ResourceId
    

После выполнения этих действий интерфейс Appliance_Ethernet1 зеркало трафик из интерфейса MyVM_Ethernet1.