#powershell #networking #routes #vpn
Вопрос:
Я пытаюсь определить используемый физический сетевой адаптер с помощью powershell.
У меня есть некоторые части для функции, которую я создаю, но у меня есть проблемы с определением фактического используемого физического адаптера:
- С
Get-NetAdapter -Physical | Select-Object Name, InterfaceDescription, ifIndex, Status
помощью я могу получить физические сетевые адаптеры, и если они подключены: здесь я также получаю индекс интерфейса (соответствующий позже).:
Имя | Описание интерфейса | ifIndex | Статус |
---|---|---|---|
Локальная сеть | Подключение Intel(R) Ethernet (4) I219-V | 23 | Вверх |
вай-Фай | Двухдиапазонная беспроводная связь Intel(R)-AC 8265 | 8 | Вверх |
- С
Get-NetRoute -InterfaceIndex <interface index> | Where-Object {$_.AddressFamily -eq 'IPV4'}
помощью я могу получить маршруты для всех интерфейсов (в данном случае 2)
Проблема в том, что оба интерфейса имеют маршрут 0.0.0.0/0 для своего соответствующего шлюза, поэтому любой из них может направить меня в «обычный» Интернет (скажем, google.com).
Итак, как мне определить фактический используемый интерфейс?. Я думаю, что метрика интерфейса в обоих случаях может мне помочь:
ifIndex | Destinationпрефикс | Следующий шаг | Маршрутометрический | ifMetric |
---|---|---|---|---|
8 | 0.0.0.0/0 | 192.168.3.1 | 256 | 40 |
23 | 0.0.0.0/0 | 192.168.1.1 | 256 | 25 |
Таким образом, интерфейс Ethernet (ifIndex = 23) имеет значение IfMetric 25. Поскольку RouteMetric одинакова для обоих, теоретически интерфейс Ethernet будет иметь приоритет.
Это относится к подключениям с VPN-клиентами или без них (действительно, для этих тестов я подключаюсь через VPN-клиент), но:
а. Я не уверен на 100%, что это может сработать каждый раз.
b. Что делать, если метрика маршрута отличается для интерфейсов?. Что имеет приоритет: ifMetric, RouteMetric или комбинация того и другого?.
Буду рад прочитать ваши комментарии или впечатления по этому поводу.
Спасибо!
Ответ №1:
Это комбинация показателей из моего опыта, однако обычно я получаю окончательный ответ, выполнив Test-NetConnection
команду по URL или IP, и в выводе этой команды будет указан интерфейс, который она использовала. Я использую его для обеспечения того, чтобы трафик проходил через наш VPN-адаптер, но в вашем случае, если вы сделали Test-NetConnection -ComputerName www.google.com
это, он вернет псевдоним интерфейса используемого интерфейса, который вы можете использовать, чтобы найти ifindex и сопоставить его с адаптером, если у вас несколько адаптеров
Комментарии:
1. Привет!. Не думал об этом…выглядит намного проще с подключением к тестовой сети. Я сделаю несколько тестов. Большое спасибо!.
2. Хорошо, я это проверил.
3. Хорошо, я это проверил. Проблема в том, что при работе с VPN подключение к тестовой сети для одного из ресурсов VPN (например, внутреннего Sharepoint) будет проходить через адаптер VPN (очевидно), который в конечном итоге является виртуальным адаптером, использующим физический адаптер…