Eu uso um script powershell para definir manualmente meu DNS .
Isso funciona muito bem, mas à medida que me movo entre wifi e duas estações de encaixe diferentes, o "ifIndex" de get-NetAdapter muda.
Apenas filtrar por "Up" não voa, porque existem várias interfaces Up (veja abaixo)
Estou pensando que preciso detectar a interface que está Up e é a rota para o público (por exemplo, na rota para o google.com ou algo público).
Como fazer isso?
PS C:\Users\joe> get-netadapter
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
Ethernet TAP-ProtonVPN Windows Adapter V9 32 Disconnected 00-FF-F9-EE-DD-E4 1 Gbps
VMware Network Adapte...1 VMware Virtual Ethernet Adapter for ... 30 Up 00-50-56-EE-DD-01 100 Mbps
Wi-Fi Dell Wireless 1820A 802.11ac 25 Up C8-FF-28-EE-DD-4D 702 Mbps
VMware Network Adapte...8 VMware Virtual Ethernet Adapter for ... 24 Up 00-50-56-EE-DD-08 100 Mbps
Bluetooth Network Conn... Bluetooth Device (Personal Area Netw... 15 Disconnected C8-FF-28-EE-DD-4E 3 Mbps
vEthernet (Default Swi... Hyper-V Virtual Ethernet Adapter 22 Up 00-15-5D-EE-DD-F0 10 Gbps
vEthernet (WSL) Hyper-V Virtual Ethernet Adapter #2 38 Up 00-15-5D-EE-DD-00 10 Gbps
Você pode usar get-netroute para obter o número de índice do adaptador com o valor
0
oufalse
que é a métrica mais baixa e, portanto, o adaptador que deve ser o padrão para o tráfego a ser usado.PowerShell
Amostra de saída
Comando:
Get-NetRoute | Select InterfaceAlias, InterfaceIndex, RouteMetric | FL
Recursos de apoio
A @Drink More Pimp Juice IT já mencionou uma solução simples, que funciona se houver
only one network adapter
um gateway padrão habilitado e ativo.Se você tiver vários adaptadores de rede habilitados e ativos ao mesmo tempo, o que acontece quando você usa um Laptop que não desabilita ou desconecta o adaptador WiFi quando conectado via Ethernet, você terá duas rotas com métrica de rota de
0
, mas com diferentes InterfaceMetric.Quando as rotas são configuradas manualmente, também é possível que a métrica de rota da rota padrão não seja
0
.Solução
Se você deseja obter a rota padrão global do sistema operacional nesses casos, você deve obter o total de
RouteMetric
eInterfaceMetric
usar as rotas padrão para IPv4 e IPv6 como filtro de destino.O comando a seguir obtém a rota padrão do seu sistema operacional usando as rotas padrão IPv4 e IPv6.
Com o Índice de Interface de retorno,
ifIndex
você pode alterar o respectivo adaptador de rede. Também é possível canalizar a saída acima diretamente paraGet-NetAdapter
qualquer outro cmdlet que aceite InterfaceIndex como propriedade nomeada.PowerShell 6+
A partir do PowerShell 6, podemos simplificar o comando, pois há o novo parâmetro
Top
disponível paraSort-Object
.Recursos informativos
Configurar a ordem das interfaces de rede
https://docs.microsoft.com/en-us/windows-server/networking/technologies/network-subsystem/net-sub-interface-metric
Uma explicação do recurso Métrica Automática para rotas IPv4
https://docs.microsoft.com/en-us/troubleshoot/windows-server/networking/automatic-metric-for-ipv4-routes