
WS4W es una aplicación de escritorio que permite ejecutar y administrar un punto final del servidor de WireGuard en Windows.
Inspirado en la publicación de Henry Chang, cómo configurar el servidor VPN WireGuard en Windows, mi objetivo era crear una aplicación que automatizara y simplificara muchos de los pasos complejos. Si bien aún no es una solución plug-and-play, la idea es poder realizar cada uno de los pasos de requisitos previos, uno por uno, sin ejecutar ningún scripts, modificar el registro o ingresar al panel de control.
El último lanzamiento está disponible aquí. Descargue el instalador y ejecute.
Nota : La aplicación solicitará ejecutarse como administrador. Debido a todo el finagling del registro, los servicios de Windows, las llamadas WG.EXE, etc., es más fácil ejecutar toda la aplicación elevada.
Antes de introducir un instalador, WS4W se distribuyó como una aplicación portátil. Las versiones portátiles (1.5.2 y anteriores) no tienen una ruta de actualización automática a la versión del instalador. Para actualizar, simplemente elimine la versión portátil descargada y descargue el instalador. No se perderán ajustes de configuración.
A continuación se presentan las tareas que se pueden realizar automáticamente utilizando esta aplicación.

Este paso descarga y ejecuta la última versión de WireGuard para Windows desde https://download.wireguard.com/windows-client/wireguard-installer.exe. Una vez instalado, también se puede desinstalar directamente desde WS4W.

Aquí puede configurar el punto final del servidor. Consulte la documentación de WireGuard para obtener el significado de cada uno de estos campos. La clave privada y la clave pública se generan llamando wg genkey y wg pubkey [private key] respectivamente. (Opcionalmente puede proporcionar su propia clave privada).
Nota : Es importante que la gama de red del servidor no entra en conflicto con la dirección IP del sistema de host o el rango de red LAN.
Además de crear/udpating el archivo de configuración para el punto final del servidor, editar la configuración del servidor también actualizará el valor del registro ScopeAddress (en HKLMSYSTEMCurrentControlSetServicesSharedAccessParameters ). Esta es la dirección IP que se utiliza para el adaptador de WireGuard al usar la función de intercambio de Internet (explicada aquí). Por lo tanto, la propiedad de dirección de la configuración del servidor sirve para determinar las direcciones permitidas para los clientes, así como la IP que Windows asignará al adaptador de WireGuard al realizar el intercambio de Internet. Tenga en cuenta que la dirección IP se toma del ScopeAddress en el momento en que el intercambio de Internet se realiza por primera vez. Eso significa que si la dirección IP del servidor se cambia en la configuración (y, por lo tanto, el valor del registro de ScopeAddress se actualiza), la interfaz de WireGuard ya no reflejará con precisión la IP del servidor deseada. Por lo tanto, WS4W solicitará volver a compartir Internet. Si se cancela, el intercambio de Internet se deshabilitará y deberá volver a habilitarse manualmente.
IMPORTANTE : debe configurar el reenvío de puertos en su enrutador. Reenvíe todo el tráfico UDP que esté destinado al puerto de punto final de su servidor (predeterminado
51820) a la IP LAN de su servidor. Cada enrutador es diferente, por lo que es difícil dar una guía específica aquí. Como ejemplo, así es como se vería la regla de reenvío de puertos en un enrutador de puerta de enlace cuántico de Verizon.
Debe establecer la propiedad de punto final en su dirección pública IPv4, IPv6 o dominio, seguido de cualquier puerto que haya reenviado. El botón Detect Public IP Address intentará detectar su dirección pública automáticamente utilizando la API ipify.org. Sin embargo, si es posible, se recomienda que use un nombre de dominio con DDNS. De esa manera, si su dirección IP pública cambia, sus clientes podrán encontrar el punto final de su servidor sin reconfiguración.

Aquí puede configurar los clientes. La dirección se puede ingresar manualmente o calcularse en función del rango de red del servidor. Por ejemplo, si la red del servidor es 10.253.0.0/24 , la configuración del cliente puede determinar que 10.253.0.2 es una dirección válida. Tenga en cuenta que la primera dirección en el rango (en este ejemplo, 10.253.0.1 ) está reservada para el servidor. DNS es opcional, pero recomendado. Puede agregar dominios de búsqueda DNS (también conocidos como sufijos DNS, leer más). Por último, la clave privada, la clave pública y la clave prehalente se generan utilizando wg genkey , wg pubkey [private key] y wg genpsk . (Puede especificar su propia clave privada. Las claves previas son opcionales, se generan de manera única por cliente y se comparten con la configuración del servidor. Consulte el #34 para obtener más información).
Debido a un poco de peculiaridad en WireGuard, si tuviera que eliminar una tecla previa al cliente y sincronizar la configuración del servidor, WireGuard aún esperaría que el cliente se conecte con un PSK. Por lo tanto, WS4W no le permite borrar el campo clave prehaltado de los clientes. En su lugar, elimine y recree a un cliente para eliminar el PSK.
Una vez configurado, es fácil importar la configuración en su aplicación de cliente de elección a través del código QR o exportando el archivo .conf .

Para la seguridad, es posible que no desee mantener las claves privadas de los clientes en el servidor. En ese caso, puede borrar el campo clave privado antes de guardar la configuración del cliente. Sin embargo, hay dos cosas a tener en cuenta.
Una vez que se configuran el servidor y el cliente (s), puede instalar el servicio de túnel, que crea una nueva interfaz de red para WireGuard utilizando el comando wireguard /installtunnelservice . Después de la instalación, el túnel también se puede eliminar directamente dentro de WS4W. Esto usa el comando wireguard /uninstalltunnelservice .
Después de completar este paso, los clientes de WireGuard deberían poder llegar a realizar un apretón de manos exitoso con el servidor.
Nota: Si la configuración del servidor se edita después de instalar el servicio de túnel, el servicio de túnel se actualizará automáticamente a través del comando
wg syncconf(si la configuración del servidor recién guardada es válida). Esto también es cierto para las configuraciones del cliente, actualizaciones a las que a menudo hacen que la configuración del servidor se actualice (por ejemplo, si se agrega un nuevo cliente, la configuración del servidor debe tener en cuenta este nuevo par).
Incluso después de instalar el servicio del túnel, se pueden bloquear algunos protocolos. Se recomienda cambiar el perfil de red a Private , lo que facilita las restricciones de Windows en la red.
Este paso también crea una tarea de Windows para que la red sea privada automáticamente en el arranque. Puede deshabilitar la tarea a través del menú desplegable.
Nota : En un sistema donde la conexión a Internet compartida se origina en una red de dominio, este paso no es necesario, ya que las interfaces de WireGuard recogen el perfil de la red de dominio compartido.
El último paso es permitir que las solicitudes realizadas sobre la interfaz WireGuard se enruten a su red privada o Internet. Para hacerlo, la conexión del adaptador de red "real" en la máquina Windows debe compartirse con el adaptador virtual WireGuard. Esto se puede hacer de una de dos maneras.
La primera opción solo está disponible en algunos sistemas (ver más a continuación). Las segundas opciones pueden usarse según sea necesario, pero tienen algunas advertencias (como, si la conexión a Internet se comparte con el adaptador de WireGuard, no se puede compartir con ningún otro adaptador; ver #18). También se han informado múltiples problemas con el intercambio de Internet, por lo que se debe usar el enrutamiento NAT si está disponible.
Estas opciones son mutuamente excluyentes.
Aquí puede crear una regla de enrutamiento NAT en la interfaz WireGuard para permitirle interactuar con su red privada/pública. Específicamente, se invocan los siguientes comandos.
New-NetIPAddress en el adaptador de WireGuard para asignar una IP estática en el rango de la propiedad de dirección de la configuración del servidor.New-NetNat para crear una nueva regla NAT en el adaptador de WireGuard.New-NetIPAddress en el arranque.El enrutamiento NAT requiere al menos Windows 10, y la opción de habilitarla ni siquiera aparecerá en la aplicación en versiones anteriores de Windows. Sin embargo, incluso con Windows 10, el enrutamiento NAT no siempre funciona. A veces requiere que Hyper-V esté habilitado, que la aplicación solicitará, pero eso también requiere una versión pro o más alta (es decir, no en casa) de Windows. En última instancia, si la aplicación no puede habilitar el enrutamiento NAT, recomendará usar el intercambio de conexión a Internet (a continuación). Consulte el #30 para una discusión completa sobre el apoyo de enrutamiento NAT.

Si el enrutamiento NAT no está disponible, puede usar el intercambio de Internet para proporcionar una conexión de red a la interfaz WireGuard. Al configurar esta opción, puede seleccionar cualquiera de sus adaptadores de red para compartir. Tenga en cuenta que probablemente solo funcionará para adaptadores cuyo estado está Connected , y solo será útil para adaptadores que proporcionan acceso a Internet o LAN. Al elegir el adaptador para compartir, pase el paso sobre el elemento del menú para obtener más detalles, incluida la dirección IP asignada del adaptador, para determinar si es la que desea compartir.
Nota: Al realizar el intercambio de Internet, al adaptador de WireGuard se le asigna una IP desde el valor del registro de
ScopeAddress(enHKLMSYSTEMCurrentControlSetServicesSharedAccessParameters). Este valor se establece automáticamente al actualizar la propiedad de dirección de la configuración del servidor. Ver más aquí.
Hay problemas en Windows que hacen que el intercambio de Internet se discape después de un reinicio. Si el servidor de WireGuard está destinado a quedarse desatendido, se recomienda habilitar el intercambio persistente de Internet para que no se requiera interacción después de reiniciar.
Al habilitar esta función, se realizan dos acciones en Windows:
Internet Connection Sharing se cambia de Manual a Automatic .EnableRebootPersistConnection en HKLMSoftwareMicrosoftWindowsCurrentVersionSharedAccess se establece en 1 (se crea si no se encuentra).Incluso con estas soluciones, el intercambio de Internet puede deshabilitarse después de un reinicio. Por lo tanto, se realiza una acción más. Se crea una tarea programada que deshabilita y vuelve a habilitar el intercambio de Internet utilizando WS4W CLI en el arranque del sistema. Esto debería ser suficiente para garantizar que compartir permanezca habilitado.

Una vez que se instala el túnel, se puede ver el estado de la interfaz WireGuard. Esto se logra a través del comando wg show . Se actualizará continuamente siempre que se revise Update Live .
Establecer retraso de la tarea de arranque
Esta configuración permite configurar un retraso para las tareas de arranque. Esto puede ser útil para tareas que dependen de adaptadores que sean lentos para cargarse. Tenga en cuenta que las tareas deben desactivarse y volver a habilitarse después de cambiar este valor.

También hay una CLI incluido en la descarga portátil llamada ws4w.exe que se puede invocar desde un terminal o llamado desde un script. Además de los mensajes escritos en Standard Out, la CLI también establecerá el código de salida en función del éxito de ejecutar el comando dado. En PowerShell, por ejemplo, el código de salida se puede imprimir con echo $lastexitcode .
Nota : La CLI también debe ejecutarse como administrador por las mismas razones que anteriormente.
La CLI usa verbos o comandos de nivel superior, cada uno de los cuales tiene su propio conjunto de opciones. Puede ejecutar ws4w.exe --help para una lista de todos los verbos o ws4w.exe verb --help para ver la lista de opciones para un verbo particular.
ws4w.exe restartinternetsharing [--network <NETWORK_TO_SHARE>]--network se puede pasar para especificar qué red debe compartir WS4W.--network ).--network para especificar.--network debe aprobarse, de lo contrario no hay forma de saber qué red compartir.Este comando es utilizado por la tarea programada que se crea cuando se habilita el intercambio de Internet persistente.
ws4w.exe setpathPATH del sistema.El instalador utiliza este comando cuando se selecciona la opción "Agregar CLI a la ruta".
ws4w.exe setnetipaddress --serverdatapath <PATH_TO_SERVER_CONFIG>Set-NetIPAddress en la interfaz WireGuard, utilizando la dirección de red como se define en el archivo de configuración del servidor de WireGuard dado.Este comando es utilizado por la tarea programada que se crea cuando el enrutamiento NAT está habilitado.
ws4w.exe privatenetworkEste comando es utilizado por la tarea de Windows que se crea cuando la red privada está habilitada.
Primero, se recomienda usar el enrutamiento NAT si está disponible.
Sin embargo, si experimenta el siguiente mensaje de error al habilitar el intercambio de Internet, realice los siguientes pasos manuales.

wg_server .Nota: Este problema a menudo se activa después de crear un nuevo interruptor virtual para una VM. La solución manual solo debe ser necesaria una vez después y no afecta el interruptor virtual.
WS4W ha sido probado y se sabe que trabaja en Windows Server (2012 R2 y Newer) y Windows Desktop (10 y más nuevo).
WireGuard es una marca registrada de Jason A. Donenfeld.
Icono realizado por Freepik de www.flaticon.com.