Skip to content
/ wgws Public

Script para crear VPNs con wireguard ocultas en una conexión websocket

License

Notifications You must be signed in to change notification settings

sio2sio2/wgws

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 

Repository files navigation

wgws

Es un script en Bourne shell (ejecutable con dash) que facilita la creación de túneles VPN a la manera de wg-quick y usando su misma configuración (Address, Table, PreUp, etc.). Las ventajas frente al script oficial son que:

  • Permite encapsular el túnel VPN mediante Websockets para burlar restricciones en redes gestionadas por administradores excesivamente celosos.
  • Hecho lo anterior, permite establecer excepciones al encapsulamiento, de manera que haya cierto tipo de tráfico que no utilice el túnel VPN para salir.

Requisitos

Configuración

Basta con añadir la sección [Tunnel] al fichero de configuración de la interfaz, a la cual pueden añadirse las definiciones de tres variables:

Variable Valor Descripción
Address IP[:PORT] Dirección en la que escucha wstunnel
Secure 0|1 Si se cifra con SSL.
WPath /ruta/ (Sólo cliente) Ruta del servidor en que es asccesible wstunnel
Cliente

Por lo general, no requiere más configuración que añadir la sección [Tunnel]:

; /etc/wireguard/wg0.conf

[Interface]
Address = 10.8.0.2/24
PrivateKey = WB4TAWIIlaOyULudlcdhqctTl/pdzO7m+6x4DhAP+0k=

[Peer]
PublicKey = /Pr37VgN7GVvizJw9FpCL62DSwocdNEf7lwfdDRZXj8=
Endpoint = vpn.example.net:1194
AllowedIPs = 0.0.0.0/0

[Tunnel]
; No es necesaria configuración adicional

Tenemos tres alternativas al arrancar la interfaz:

  1. No usar wstunnel (esto es, conectar directamente al puerto 1194/UDP de vpn.example.net):

    # wgws -n up wg0

    lo cual es equivalente a usar wg-quick.

  2. Usar wstunnel sin SSL:

    # wgws up wg0
  3. Usar wstunnel cifrando con SSL:

    # wgws -s up wg0

Si se quiere evitar que un determinado tráfico salga por el túnel, puede marcarse con un acción PostUp:

PostUp = nft add rule wireguard output tcp dport { http, https } meta mark set 51820

que enviará que el tráfico web use la VPN.

Servidor

Como en el cliente, basta con añadir la sección [Tunnel] a la configuración:

; /etc/wireguard/wg0.conf

[Interface]
Address = 10.8.0.1/24
ListenPort = 1194
PrivateKey = kEANNMfztMtzgwFyyaWOou7+c8ZPD/lyGhmcM7oFtXA=

[Peer]
PublicKey = f2CH3QXHiXwFhdATcDi42DU+PUOC9Ky8BgkHBigY5H4=
AllowedIPs = 10.8.0.2/32

[Tunnel]
; Sin configuración, si se desea que wstunnel se exponga directamente.

Esta configuración expone el websocket directamente en la interfaz física bien a través del puerto 80:

# wgws up wg0

o bien a través del puerto 443 (con cifrado SSL):

# wgws -s up wg0

En caso de que se desee que un proxy inverso reciba las peticiones y éste las derive a wstunnel, es conveniente que éste último escuche en un puerto libre de la interfaz de loopback:

[Tunnel]
Address = 127.0.0.1:8080

y que se delegue la responsabilidad de usar o no SSL al proxy.

En cualquier caso, wireguard sigue escuchando en el puerto 1194/UDP (o donde se quiera colocar) de todas las interfaces, por lo que, si la red remota lo permite, la conexión VPN puede llevarse a cabo directamente sin usar el websocket.

Más información en Linuxnomicón.

Agenda

  • Dar soporte a la variable DNS de wg-quick.
  • Permitir el uso de iptables.
  • En el lado del servidor, añadir una opción para que no se añada la opción --restrictTo.

About

Script para crear VPNs con wireguard ocultas en una conexión websocket

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages