Использование виртуальных сетевых устройств в виртуальной сети
В этом разделе описано, как развернуть сетевые виртуальные устройства в виртуальных сетях клиента. Виртуальные сетевые устройства можно добавить в сети, выполняющие определяемые пользователем функции маршрутизации и зеркального отображения портов.
Типы сетевых виртуальных устройств
Вы можете использовать один из двух типов виртуальных устройств:
Определяемая пользователем маршрутизация — заменяет распределенные маршрутизаторы в виртуальной сети возможностями маршрутизации виртуального устройства. При определяемой пользователем маршрутизации виртуальный модуль используется в качестве маршрутизатора между виртуальными подсетями в виртуальной сети.
Зеркальное отображение портов — весь сетевой трафик, входящий или покидающий отслеживаемый порт, дублируется и отправляется на виртуальное устройство для анализа.
Развертывание виртуального сетевого устройства
Чтобы развернуть сетевое виртуальное устройство, необходимо сначала создать виртуальную машину, содержащую устройство, а затем подключить виртуальную машину к соответствующим подсетям виртуальной сети. Дополнительные сведения см. в статье "Создание виртуальной машины клиента" и подключение к виртуальная сеть клиента или виртуальной локальной сети.
Для некоторых устройств требуется несколько виртуальных сетевых адаптеров. Обычно один сетевой адаптер, выделенный для управления устройствами, а дополнительные адаптеры обрабатывают трафик. Если для устройства требуется несколько сетевых адаптеров, необходимо создать каждый сетевой интерфейс в сетевом контроллере. Необходимо также назначить идентификатор интерфейса для каждого узла для каждого из дополнительных адаптеров, которые находятся в разных виртуальных подсетях.
После развертывания сетевого виртуального устройства можно использовать устройство для определенной маршрутизации, переноса зеркального отображения или обоих.
Пример: определяемая пользователем маршрутизация
Для большинства сред требуется только системные маршруты, уже определенные распределенным маршрутизатором виртуальной сети. Однако может потребоваться создать таблицу маршрутизации и добавить один или несколько маршрутов в определенных случаях, например:
- Принудительное туннелирование для доступа к Интернету через вашу локальную сеть.
- Использование виртуальных устройств в вашей среде.
Для этих сценариев необходимо создать таблицу маршрутизации и добавить определяемые пользователем маршруты в таблицу. Вы можете использовать несколько таблиц маршрутизации и связать одну и ту же таблицу маршрутизации с одной или несколькими подсетями. Вы можете связать каждую подсеть только с одной таблицей маршрутизации. Все виртуальные машины в подсети используют таблицу маршрутизации, связанную с подсетью.
Подсети используют системные маршруты, пока таблица маршрутизации не будет связана с подсетью. После того как связь существует, маршрутизация выполняется на основе длинного сопоставления префикса (LPM) между определяемыми пользователем маршрутами и системными маршрутами. Если имеется несколько маршрутов с одинаковым совпадением LPM, то определяемый пользователем маршрут сначала выбирается перед системным маршрутом.
Процедура:
Создайте свойства таблицы маршрутов, которая содержит все определяемые пользователем маршруты.
Системные маршруты по-прежнему применяются в соответствии с правилами, определенными выше.
$routetableproperties = new-object Microsoft.Windows.NetworkController.RouteTableProperties
Добавьте маршрут в свойства таблицы маршрутизации.
Любой маршрут, предназначенный для подсети 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
Совет
Если вы хотите добавить дополнительные маршруты, повторите этот шаг для каждого маршрута, который требуется определить.
Добавьте таблицу маршрутизации в сетевой контроллер.
$routetable = New-NetworkControllerRouteTable -ConnectionUri $uri -ResourceId "Route1" -Properties $routetableproperties
Примените таблицу маршрутизации к виртуальной подсети.
При применении таблицы маршрутов к виртуальной подсети первая виртуальная подсеть в сети 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-интерфейса, настроенного там.
Процедура:
Получите виртуальную сеть, в которой находятся виртуальные машины.
$vnet = Get-NetworkControllerVirtualNetwork -ConnectionUri $uri -ResourceId "Tenant1_VNet1"
Получите сетевые интерфейсы сетевого контроллера для источника зеркального отображения и назначения.
$dstNic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "Appliance_Ethernet1" $srcNic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
Создайте объект serviceinsertionproperties, чтобы содержать правила зеркального отображения портов и элемент, представляющий конечный интерфейс.
$portmirror = [Microsoft.Windows.NetworkController.ServiceInsertionProperties]::new() $portMirror.Priority = 1
Создайте объект 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 = "*"
Создайте объект 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
Добавьте объект вставки службы в сетевой контроллер.
При выполнении этой команды все трафик к сетевому интерфейсу устройства, указанному на предыдущем шаге, останавливается.
$portMirror = New-NetworkControllerServiceInsertion -ConnectionUri $uri -Properties $portmirror -ResourceId "MirrorAll"
Обновите сетевой интерфейс источника для зеркального отображения.
$srcNic.Properties.IpConfigurations[0].Properties.ServiceInsertion = $portMirror $srcNic = New-NetworkControllerNetworkInterface -ConnectionUri $uri -Properties $srcNic.Properties -ResourceId $srcNic.ResourceId
После выполнения этих действий интерфейс Appliance_Ethernet1 отражает трафик из интерфейса MyVM_Ethernet1.