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

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

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

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

  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.