Cómo activar o desactivar componentes IPv6 en Windows mediante PowerShell

A medida que el mundo continúa su transición de IPv4 a IPv6, la necesidad de herramientas y scripts que permitan a los profesionales de TI gestionar las configuraciones IPv6 es cada vez más importante. Un requisito clave es la posibilidad de activar o desactivar componentes IPv6 en sistemas basados en Windows. Hoy nos centraremos en un script de PowerShell que permite configurar con precisión IPv6 en dispositivos Windows.

Antecedentes

IPv6, el sucesor de IPv4, resuelve el problema del agotamiento de las direcciones IP y aporta otras muchas ventajas. Sin embargo, durante la transición o las pruebas, los profesionales de TI y los proveedores de servicios gestionados (MSP) pueden encontrarse con la necesidad de activar, desactivar o ajustar determinados componentes de IPv6. Ya sea para la resolución de problemas, la configuración de la red o la seguridad, disponer de un método racionalizado puede resultar muy valioso. El script proporcionado hace precisamente eso: es una herramienta para configurar IPv6 en Windows con flexibilidad y precisión.

El script para activar o desactivar componentes IPv6 en Windows

#Requires -Version 5.1

<#
.SYNOPSIS
    Enable or disable components for IPv6 on all network connections.
.DESCRIPTION
    Enable or disable components for IPv6 on all network connections.
    Rebooting is required for Windows to apply these settings.
.EXAMPLE
     -Components DisableAll
    Disables all IPv6 components.
.EXAMPLE
    PS C:> Disable-IPv6.ps1 -ComponentsValue 0xFF
    Disables all IPv6 components from custom value.
    See link for more options:
    https://docs.microsoft.com/en-us/troubleshoot/windows-server/networking/configure-ipv6-in-windows
.EXAMPLE
     -Components EnableAll
    Enables all IPv6 components.
.EXAMPLE
     -Components DisableAllTunnels
    Disables all IPv6 Tunnels.
.EXAMPLE
     -Components DisableAllTunnels, Disable6to4
    Disables All IPv6 Tunnels and 6to4 components.
.EXAMPLE
    PS C:> Disable-IPv6.ps1 -Components DisableAll
    Disables all IPv6 components.
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 10, Windows Server 2016
    Release Notes:
    Initial Release
By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
    Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
.COMPONENT
    ProtocolSecurity
#>

[CmdletBinding(DefaultParameterSetName = "Components")]
param (
    [Parameter(Mandatory = $true, ParameterSetName = "Components")]
    [ValidateSet("EnableAll", "DisableAllTunnels", "Disable6to4", "DisableISATAP", "DisableTeredo", "PreferIPv4Over", "Disableall")]
    [string[]]
    $Components,
    [Parameter(Mandatory = $true, ParameterSetName = "Value")]
    [ValidateRange(0, 255)]
    [int]
    $ComponentsValue
)

begin {
    $DisableValue = 0
    if ($Components) {
        # Define values for names in $Components
        $EnableAll = 0
        $DisableAllTunnels = 0x01
        $Disable6to4 = 0x02
        $DisableISATAP = 0x04
        $DisableTeredo = 0x08
        $PreferIPv4Over = 0x20
        $Disableall = 0xFF

        # Create bit "list" and start at 0
        $DisableValue = 0
        $Components | ForEach-Object {
            # Add each item in $Components to $DisableList with bitwise-or operation
            $DisableValue = $DisableValue -bor $(Get-Variable -Name $_ -ValueOnly)
        }
    }
    elseif ($ComponentsValue) {
        $DisableValue = $ComponentsValue
    }
    function Set-ItemProp {
        param (
            $Path,
            $Name,
            $Value,
            [ValidateSet("DWord", "QWord", "String", "ExpandedString", "Binary", "MultiString", "Unknown")]
            $PropertyType = "DWord"
        )
        if ((Get-ItemProperty -Path $Path -Name $Name -ErrorAction SilentlyContinue)) {
            Set-ItemProperty -Path $Path -Name $Name -Value $Value -Force -Confirm:$false | Out-Null
        }
        else {
            New-ItemProperty -Path $Path -Name $Name -Value $Value -PropertyType $PropertyType -Force -Confirm:$false | Out-Null
        }
    }
    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        if ($p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator))
        { Write-Output $true }
        else
        { Write-Output $false }
    }
}
process {
    if (-not (Test-IsElevated)) {
        Write-Error -Message "Access Denied. Please run with Administrator privileges."
        exit 1
    }
    $Path = "HKLM:SYSTEMCurrentControlSetServicesTcpip6Parameters"
    $Name = "DisabledComponents"
    $Value = $DisableValue
    try {
        Set-ItemProp -Path $Path -Name $Name -Value $Value
    }
    catch {
        Write-Error $_
        exit 1
    }
}
end {}

 

Accede a más de 300 scripts en el Dojo de NinjaOne

Obtén acceso

Análisis detallado

El script es un script PowerShell, denotado por su extensión .ps1. Aquí tienes un desglose paso a paso de su funcionamiento:

  • Parámetros: en esencia, el script requiere que el usuario introduzca los componentes IPv6 específicos que desee gestionar o un valor directo que represente una configuración determinada.
  • Inicialización: a continuación, el script inicializa el valor por defecto de DisabledComponents a 0, lo que significa que no se desactiva ningún componente. A continuación, el script asigna a cada nombre de componente su respectivo valor hexadecimal.
  • Procesamiento: para cada componente proporcionado como input, el script calcula un valor hexadecimal acumulativo. Este valor acumulativo determina qué componentes IPv6 deben desactivarse.
  • Configuración del registro: con el valor hexadecimal calculado, el script procede a actualizar o crear una clave de registro. Aquí es donde se activan o desactivan los componentes IPv6. El script se dirige a la clave DisabledComponents del registro de Windows.
  • Control de ejecución: el script comprueba si tiene derechos administrativos antes de ejecutar el proceso principal. De no ser el caso, pide al usuario que lo ejecute con privilegios elevados.

Posibles casos de uso

Estudio de caso: Imagina a una administradora de TI, Ana, trabajando para una gran empresa. Están migrando un segmento de su red a IPv6 pero tienen aplicaciones heredadas que no funcionan bien con ciertos componentes IPv6, como Teredo. Utilizando el script, Ana puede desactivar fácilmente Teredo en todas las máquinas afectadas, asegurando la compatibilidad de las aplicaciones sin desactivar completamente IPv6.

Comparaciones

Aunque existen métodos manuales, como navegar por la interfaz GUI o utilizar comandos nativos de Windows, para desactivar o activar componentes IPv6, pueden resultar tediosos, especialmente para redes grandes. Este script simplifica el proceso, permitiendo el procesamiento por lotes, la automatización y la precisión.

FAQ

  • ¿Cómo se ejecuta el script?
    Ejecútalo utilizando PowerShell con derechos elevados.
  • ¿Tengo que reiniciar el sistema después?
    Sí, es necesario reiniciar para que los cambios surtan efecto.
  • ¿Qué versiones de Windows son compatibles?
    Windows 10 y Windows Server 2016 en adelante.

Implicaciones

Aunque IPv6 aporta muchas ventajas, los errores de configuración pueden provocar vulnerabilidades de seguridad o problemas de conectividad. Poder controlar sus componentes garantiza un entorno de red más seguro y adaptado.

Recomendaciones

  • Haz siempre una copia de seguridad del registro antes de realizar cambios.
  • Prueba el script en un único dispositivo antes de desplegarlo a gran escala.
  • Asegúrate de conocer bien cada componente IPv6 antes de desactivarlo.

Reflexiones finales

Herramientas como NinjaOne pueden mejorar aún más la experiencia proporcionando capacidades integradas de gestión y supervisión de la red. Si se combinan con scripts como éste, los profesionales de TI pueden garantizar una transición a IPv6 segura y sin problemas.

Próximos pasos

La creación de un equipo de TI próspero y eficaz requiere contar con una solución centralizada que se convierta en tu principal herramienta de prestación de servicios. NinjaOne permite a los equipos de TI supervisar, gestionar, proteger y dar soporte a todos sus dispositivos, estén donde estén, sin necesidad de complejas infraestructuras locales.

Obtén más información sobre NinjaOne Endpoint Management, echa un vistazo a un tour en vivoo tu prueba gratuita de la plataforma NinjaOne.

Categorías:

Quizá también te interese…

×

¡Vean a NinjaOne en acción!

Al enviar este formulario, acepto la política de privacidad de NinjaOne.

Términos y condiciones de NinjaOne

Al hacer clic en el botón «Acepto» que aparece a continuación, estás aceptando los siguientes términos legales, así como nuestras Condiciones de uso:

  • Derechos de propiedad: NinjaOne posee y seguirá poseyendo todos los derechos, títulos e intereses sobre el script (incluidos los derechos de autor). NinjaOne concede al usuario una licencia limitada para utilizar el script de acuerdo con estos términos legales.
  • Limitación de uso: solo podrás utilizar el script para tus legítimos fines personales o comerciales internos, y no podrás compartirlo con terceros.
  • Prohibición de republicación: bajo ninguna circunstancia está permitido volver a publicar el script en ninguna biblioteca de scripts que pertenezca o esté bajo el control de cualquier otro proveedor de software.
  • Exclusión de garantía: el script se proporciona «tal cual» y «según disponibilidad», sin garantía de ningún tipo. NinjaOne no promete ni garantiza que el script esté libre de defectos o que satisfaga las necesidades o expectativas específicas del usuario.
  • Asunción de riesgos: el uso que el usuario haga del script corre por su cuenta y riesgo. El usuario reconoce que existen ciertos riesgos inherentes al uso del script, y entiende y asume cada uno de esos riesgos.
  • Renuncia y exención: el usuario no hará responsable a NinjaOne de cualquier consecuencia adversa o no deseada que resulte del uso del script y renuncia a cualquier derecho o recurso legal o equitativo que pueda tener contra NinjaOne en relación con su uso del script.
  • CLUF: si el usuario es cliente de NinjaOne, su uso del script está sujeto al Contrato de Licencia para el Usuario Final (CLUF).