A partir de um prompt de comando, altere o adaptador OpenVPN de Public para Work location / profile no Windows?

0

Estou trabalhando em um instalador silencioso para o OpenVPN como parte de um pacote de software maior a ser implantado em vários sistemas Windows dentro da rede corporativa do meu empregador.

Conseguo que o OpenVPN seja instalado silenciosamente usando algumas opções de linha de comando (coisas como / S / SELECT_SHORTCUTS = 0 / SELECT_OPENVPN = 1 / SELECT_SERVICE = 1, etc). Isso funciona muito bem.

No entanto, quando estiver pronto, é atribuído o adaptador TAP ao local / perfil Rede pública :

EuprecisoqueoadaptadorTAPsejainstaladonolocal/perfilRededetrabalho,entãoquandoeuabroalgumasportasnofirewallavançadodoWindows(usandoalgunscomandosnetshadvfirewallfirewalladd)eupossoespecificarissootráfegonessasportassódeveserpermitidopormeiodeadaptadoresderedenosperfisDomínioeParticular,nãoPúblico.

Oinstaladoréexecutadocomprivilégioselevados,portanto,nuncahápromptsouoportunidadesparaescolherolocal/perfil(porexemplo,pop-upsderededoWindows)duranteainstalação.Alémdisso,eurealmentenãoqueroqueocaraqueestáexecutandoesteinstaladortenhaqualqueroportunidadedemexercomeleoufazerqualqueralteração-issoéapenasparausointernoeessasconfiguraçõesnãosãoopcionais.

Achaticeaqui,eomotivodaminhapergunta,équenãoconsigodescobrircomoalteraralocalização/perfildoadaptadorTAPnalinhadecomando.Nãoparecehavernenhumcomandonetshparafazerisso.

Comopossoalteraralocalização/perfildeumadaptadordeRededoWindowsapartirdalinhadecomando?Algofactívelemumarquivodeloteseriaopreferido.

p.s.Tambémestouusandoasetapasdescritas aqui para fazer com que o adaptador não apareça como uma "rede não identificada", o que pode ser um pré-requisito para o acima, não tenho certeza.

Obrigado!

    
por Steve Kehlet 07.01.2014 / 20:19

2 respostas

1

A Powershell pode ajudar aqui:

Get-NetConnectionProfile

obtém as informações que você deseja

Set-NetConnectionProfile -NetworkCategory Private

Altera-o.

Além disso, se você tiver várias redes atuais ativas, terá que identificar a que deseja.

Documentação da Tech-Net sobre Set-NetConnectionProfile

    
por 06.08.2014 / 17:08
0

No final, não consegui encontrar uma maneira completamente automatizada de fazer o que eu queria. No caso de alguém mais se deparar com algo parecido, o valor do registro para mudar uma rede de público para trabalho está em:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\<GUID>

Mas a parte que eu nunca consegui descobrir programaticamente é identificar o <GUID> correto. Talvez haja realmente uma ligação no registro entre o adaptador OpenVPN TAP e o perfil de rede correto que eu simplesmente não consegui encontrar, ou talvez haja uma maneira com powershell ou algum outro comando para encontrá-lo.

De qualquer forma, assim que você souber o caminho certo (via eyeballing ou qualquer outra coisa), você pode alterar o Category de 0 (Public) para 1 (Work). Uma reinicialização do OpenVPN é tudo o que é necessário para começar a honrar as regras certas de firewall do Windows.

Em vez disso, acabei usando a técnica *NdisDeviceType = 1 ( google ), que :

  1. isenta você de se preocupar com o perfil do Windows Network (ele nem aparece mais na Central de redes e compartilhamento) e
  2. faz com que o tráfego do OpenVPN caia no perfil Private dentro do firewall do Windows. O que é tudo o que eu realmente precisava mesmo. No entanto, isso não parece estar documentado em nenhum lugar que eu possa encontrar.

Isto é marginalmente aceitável para o que eu preciso, neste momento, eu só espero que esta técnica funcione em todas as versões do Windows que eu acabe precisando e que não desapareça tão cedo.

Caso seja útil, aqui está o script powershell que escrevi, para ser executado após o instalador silencioso do OpenVPN, mas antes de iniciar o serviço OpenVPN:

$ErrorActionPreference = "Stop"

Write-Host "Beginning"

$adapters = Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Class\*" '
    | Where-Object { $_.Class -eq "Net" } '
    | Foreach-Object { $_.PSPath }

Write-Host "Found adapters: " $adapters

Write-Host "Now setting *NdisDeviceType to 1 on all tap0901 adapters..."
Get-ChildItem $adapters -erroraction silentlycontinue '
    | Foreach-Object { get-itemproperty -path $_.PSPath } '
    | Where-Object {
        ($_.ComponentId -eq "tap0901") -and -not ($_."*NdisDeviceType" -eq 1)
    } '
    | Foreach-Object {
        Set-ItemProperty -path $_.PSPath -name "*NdisDeviceType" -Type DWORD -Value 1
    }

Write-Host "Now disabling then re-enabling all TAP-Windows adapters..."
Get-WmiObject -Class Win32_NetworkAdapter '
    | Where-Object { $_.Name -like "TAP-Windows Adapter*" } '
    | Foreach-Object {
        $junk = $_.Disable()
        $junk = $_.Enable()
    }

Write-Host "Done."

Grave obrigado a nivot.org post e thijs 's Brokenwire.NET post para o script Powershell acima.

    
por 16.01.2014 / 00:32