MANUAL: WireGuard sobre Linux Server (VM Synology)

Hola a todos. Os quiero poner un pequeño manual para montar la VPN Wireguard en un linux server. Espero que os valga:

WireGuard es una VPN punto a punto que se puede utilizar de diferentes maneras. Aquí, nos referimos a una VPN como RoadWarrior: el cliente remoto se conecta y quiere reenviar todo su tráfico a través de un túnel encriptado al servidor. El servidor aplicará NAT al tráfico del cliente así que aparecerá como si el cliente está navegando por la web con la IP del servidor. El script soporta tanto IPv4 como IPv6

En mi caso está montado en una VM que corre un NAS Synology DS218+, y funciona perfectamente.

*** Distribuciones soportadas ***​

Ubuntu >= 16.04
Debian 10
Fedora
CentOS
Arch Linux


*** Uso *** (probado y funcionando en Ubuntu Server 20.04.1)​

Para crear acceso con clave SSH (hacerlo antes de meter el script) ( no es necesario este paso, pero si muy recomendable por seguridad)
  1. Abrimos el programa Puttygen (se instala al instalar el programa Putty, imprescindible para realizar todo el proceso) para generar una clave pública y una privada (incluido al instalar Putty) Tipo RSA con 2048 bytes suficiente. En la clave privada, se le puede añadir una clave de acceso, aunque eso es cuestión de gustos.
  2. Descargamos las claves generadas en una ubicación a buen recaudo (ponerle un nombre "sencillo")
  3. Entramos en Putty al servidor Ubuntu, con usuario y contraseña. Creamos el directorio con el comando mkdir .ssh, para guardar la clave pública en nuestra carpeta de usuario, damos enter y después escribimos touch ~/.ssh/authorized_keys, y volvemos apulsar enter. Con esto crea una carpeta oculta en la raiz del servidor llamada "ssh" y un fichero "authorized_keys" dentro de ella.
  4. Ahora, a través de Filezilla (si no lo tenemos, lo instalamos), abrimos una conexión sftp al servidor Ubuntu a través del puerto 22. Por otro lado, abrimos con un editor de texto la clave PUBLICA generada en puttygen. Copiamos de es archivo
    todo lo que queda dentro de los delimitadores de —-BEGING SSH2 PUBLIC KEY—- y —-END SSH2 PUBLIC KEY—
  5. En Filezilla, editamos el fichero "authorized_keys", que estará vacio y escribimos: ssh-rsa TEXTO COPIADO DE LA CLAVE PUBLICA (importante dejar espacio entre "rsa" y el texto) Importante: al copiar la clave, tiene que estar todo seguido y en una linea. la damos a guardar y eso fichero queda en la ruta .ssh/authorized_keys de la carpeta home.
  6. Para comprobar que el paso está bien dado, abrimos Putty y ejecutamos cat ~/.ssh/authorized_keys y, si
    todo está bien, debería de aparecer el contenido del fichero con la clave pública. Una vez comprobado, cerramos sesión en Putty.
  7. Abrimos de nuevo Putty, y nos vamos a la configuración. Apartado Connection - SSH - Auth. En private key file auth, seleccionamos el archivo de clave privada creado en Puttygen. Después nos vamos al apartado Conenection - Data - autologin
    username y ponemos el nombre de usuario creado en el servidor. Y ya quedaría crear una nueva conexión, poniendo la ip del servidor, y puerto 22 (yo, antes de conectar, le daría a Save poniendo un nombre de sesión, para que guarde toda la configuración). Una vez hecho esto, entraremos en el servidor a través de SSH, para comprobar que el acceso funciona sin necesidad de meter ninguna contraseña, autenticando por pareja de clave pública/privada.
  8. Ya sólo quedaría meter el script

Descarga y ejecuta el script. Después de correr el wireguard-install.sh, contestar las preguntas formuladas, y el script se encargará del resto:
Código:
cd $HOME
curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
chmod +x wireguard-install.sh
sudo ./wireguard-install.sh

Opciones del script:

IPv4 or IPv6 public address: aqui tenemos que poner la ip fija, dominio DDNS o lo que tengamos para que se vea desde fuera el servidor.
El resto, dejamos todo tal cual lo que nos ofrezca, salvó si queremos cambiar el número de puerto (acordarse que hay que crear una regla en el router que redirija el puerto creado a la ip del servidor, el puerto es UDP)
En DNS, si disponemos de Pi-hole, pondremos de dns primera, la de pi-hole y dns segunda, la de nuestro router. Y si no, poner las dns que más
os gusten: las de google, por ejemplo. Por último, pondrá press key to continue, y empezará la magia.


Una vez terminada la parte del servidor, empezaremos con la parte del peer:

cliente name: el nombre que queramos para identificar el archivo de configuración (pepito, juan, o lo que queramos)
cliente ipv4: veremos que ha cogido el .2, lo dejamos tal cual o especificamos la dirección IP que prefiramos, dentro de ese segmento.
Si todo va bien, nos saldrá un código QR y la ruta donde ha guardado el fichero de configuración del cliente. Si tenemos el móvil con la aplicación Wireguard descargada, simplemente apuntamos al código QR y se descargará el fichero de configuración y ya sólo quedaría probarlo, pero si se han seguido bien los pasos, debería de funcionar perfectamente.

Para crear nuevos peer, simplemente entrar en Putty, ejecutar el comando sudo ./wireguard-install.sh y al detectar que ya está instalado, os dirá que queréis hacer, y entre las opciones tendréis la opción de añadir otro peer, creandose otro archivo de configuración con la configuración del nuevo cliente.


Espero que os animéis y os sirva igual que me sirvió a mí...

Un saludo
 
Última edición por un moderador:
Lo he editado un pelín @huzoaaz, dándole un poco de formato y corrigiendo algún pequeño gazapo de traducción. Si me das el visto bueno, pido a un admin que lo mueva al sub de linux, que creo es donde mejor encaja.

Para los que tengáis mikrotik, decir que esta es una muy buena alternativa para combinar vuestro router con el servidor VPN Wireguard, hasta que esté incluido en RouterOS, disponible desde la V7 (versión de firmware aún en beta). En vuestro router, sólo tendríais que abrir el puerto correspondiente, con una regla de NAT.

Saludos!
 
Lo he editado un pelín @huzoaaz, dándole un poco de formato y corrigiendo algún pequeño gazapo de traducción. Si me das el visto bueno, pido a un admin que lo mueva al sub de linux, que creo es donde mejor encaja.

Para los que tengáis mikrotik, decir que esta es una muy buena alternativa para combinar vuestro router con el servidor VPN Wireguard, hasta que esté incluido en RouterOS, disponible desde la V7 (versión de firmware aún en beta). En vuestro router, sólo tendríais que abrir el puerto correspondiente, con una regla de NAT.

Saludos!

Perfecto... visto bueno.... adelante con el cambio
 
@jacqlittle, ¿nos harías el favor de mover el manual al sub de linux? (o pásale la comanda a quien lo pueda hacer, por favor)

Gracias, un saludo!
 
Yo la llegué a tener dockerizada en mi NAS de QNAP.
Aquí dejo el docker-compose, por si alguien lo necesita:

Código:
version: "2.1"
services:
  wireguard:
    image: ghcr.io/linuxserver/wireguard
    container_name: wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Atlantic/Canary
      - SERVERURL=wireguard.domain.com #opcional
      - SERVERPORT=51820 #opcional
      - PEERS=1 #opcional
      - PEERDNS=auto #opcional
      - INTERNAL_SUBNET=10.13.13.0 #opcional
      - ALLOWEDIPS=0.0.0.0/0 #opcional
    volumes:
      - /path/to/appdata/config:/config
      - /lib/modules:/lib/modules
    ports:
      - 51820:51820/udp
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
    restart: unless-stopped

Actualmente (como ya he dicho en otras ocasiones), uso PiVPN
por comodidad, y no tengo queja.

Saludos.
 
Hola a todos. Os quiero poner un pequeño manual para montar la VPN Wireguard en un linux server. Espero que os valga:

WireGuard es una VPN punto a punto que se puede utilizar de diferentes maneras. Aquí, nos referimos a una VPN como RoadWarrior: el cliente remoto se conecta y quiere reenviar todo su tráfico a través de un túnel encriptado al servidor. El servidor aplicará NAT al tráfico del cliente así que aparecerá como si el cliente está navegando por la web con la IP del servidor. El script soporta tanto IPv4 como IPv6

En mi caso está montado en una VM que corre un NAS Synology DS218+, y funciona perfectamente.

*** Distribuciones soportadas ***​

Ubuntu >= 16.04
Debian 10
Fedora
CentOS
Arch Linux


*** Uso *** (probado y funcionando en Ubuntu Server 20.04.1)​

Para crear acceso con clave SSH (hacerlo antes de meter el script) ( no es necesario este paso, pero si muy recomendable por seguridad)
  1. Abrimos el programa Puttygen (se instala al instalar el programa Putty, imprescindible para realizar todo el proceso) para generar una clave pública y una privada (incluido al instalar Putty) Tipo RSA con 2048 bytes suficiente. En la clave privada, se le puede añadir una clave de acceso, aunque eso es cuestión de gustos.
  2. Descargamos las claves generadas en una ubicación a buen recaudo (ponerle un nombre "sencillo")
  3. Entramos en Putty al servidor Ubuntu, con usuario y contraseña. Creamos el directorio con el comando mkdir .ssh, para guardar la clave pública en nuestra carpeta de usuario, damos enter y después escribimos touch ~/.ssh/authorized_keys, y volvemos apulsar enter. Con esto crea una carpeta oculta en la raiz del servidor llamada "ssh" y un fichero "authorized_keys" dentro de ella.
  4. Ahora, a través de Filezilla (si no lo tenemos, lo instalamos), abrimos una conexión sftp al servidor Ubuntu a través del puerto 22. Por otro lado, abrimos con un editor de texto la clave PUBLICA generada en puttygen. Copiamos de es archivo
    todo lo que queda dentro de los delimitadores de —-BEGING SSH2 PUBLIC KEY—- y —-END SSH2 PUBLIC KEY—
  5. En Filezilla, editamos el fichero "authorized_keys", que estará vacio y escribimos: ssh-rsa TEXTO COPIADO DE LA CLAVE PUBLICA (importante dejar espacio entre "rsa" y el texto) Importante: al copiar la clave, tiene que estar todo seguido y en una linea. la damos a guardar y eso fichero queda en la ruta .ssh/authorized_keys de la carpeta home.
  6. Para comprobar que el paso está bien dado, abrimos Putty y ejecutamos cat ~/.ssh/authorized_keys y, si
    todo está bien, debería de aparecer el contenido del fichero con la clave pública. Una vez comprobado, cerramos sesión en Putty.
  7. Abrimos de nuevo Putty, y nos vamos a la configuración. Apartado Connection - SSH - Auth. En private key file auth, seleccionamos el archivo de clave privada creado en Puttygen. Después nos vamos al apartado Conenection - Data - autologin
    username y ponemos el nombre de usuario creado en el servidor. Y ya quedaría crear una nueva conexión, poniendo la ip del servidor, y puerto 22 (yo, antes de conectar, le daría a Save poniendo un nombre de sesión, para que guarde toda la configuración). Una vez hecho esto, entraremos en el servidor a través de SSH, para comprobar que el acceso funciona sin necesidad de meter ninguna contraseña, autenticando por pareja de clave pública/privada.
  8. Ya sólo quedaría meter el script

Descarga y ejecuta el script. Después de correr el wireguard-install.sh, contestar las preguntas formuladas, y el script se encargará del resto:
Código:
cd $HOME
curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
chmod +x wireguard-install.sh
sudo ./wireguard-install.sh

Opciones del script:

IPv4 or IPv6 public address: aqui tenemos que poner la ip fija, dominio DDNS o lo que tengamos para que se vea desde fuera el servidor.
El resto, dejamos todo tal cual lo que nos ofrezca, salvó si queremos cambiar el número de puerto (acordarse que hay que crear una regla en el router que redirija el puerto creado a la ip del servidor, el puerto es UDP)
En DNS, si disponemos de Pi-hole, pondremos de dns primera, la de pi-hole y dns segunda, la de nuestro router. Y si no, poner las dns que más
os gusten: las de google, por ejemplo. Por último, pondrá press key to continue, y empezará la magia.


Una vez terminada la parte del servidor, empezaremos con la parte del peer:

cliente name: el nombre que queramos para identificar el archivo de configuración (pepito, juan, o lo que queramos)
cliente ipv4: veremos que ha cogido el .2, lo dejamos tal cual o especificamos la dirección IP que prefiramos, dentro de ese segmento.
Si todo va bien, nos saldrá un código QR y la ruta donde ha guardado el fichero de configuración del cliente. Si tenemos el móvil con la aplicación Wireguard descargada, simplemente apuntamos al código QR y se descargará el fichero de configuración y ya sólo quedaría probarlo, pero si se han seguido bien los pasos, debería de funcionar perfectamente.

Para crear nuevos peer, simplemente entrar en Putty, ejecutar el comando sudo ./wireguard-install.sh y al detectar que ya está instalado, os dirá que queréis hacer, y entre las opciones tendréis la opción de añadir otro peer, creandose otro archivo de configuración con la configuración del nuevo cliente.


Espero que os animéis y os sirva igual que me sirvió a mí...

Un saludo
Muchas gracias, lo probaré.

S@lu2.
 
Hola,

Instalada MV en Synology con Ubuntu Server (instalación por defecto, no ha sido necesario instalar dependencias) y configurado con el script. Primera prueba con App Android muy satisfactoria. Se conecta tanto con IPv4 e IPv6. La verdad que bastante rápido.

Varias cuestiones please:

1.- Veo que Ubuntu server carece de interfaz gráfica ¿Si quisiera modificar la configuración posteriormente de la parte Servidor, hay algún fichero tipo conf o similar?

2.- Ya he visto que si ejecutas el script de nuevo, reconoce que ya está instalado y te da la opción de añadir un nuevo usuario. Lo he creado para el portátil y me dice que (aparte del QR) la configuración está en /home/usuario/wg0-client-pc.conf. ¿Se puede configurar en el cliente nativo de Windows 10 o hay que instalar el cliente de Wireguard para Windows?

3.- En la MV he asignado para Ubuntu Server 2 GB de RAM (max 6) y 1 Procesador (max 2), está bien o me he pasado?

S@lu2.
 
Última edición:
1.- Veo que Ubuntu server carece de interfaz gráfica ¿Si quisiera modificar la configuración posteriormente de la parte Servidor, hay algún fichero tipo conf o similar?
Te refieres a modificar la configuración de Ubuntu o la del servidor de WireGuard? La configuración del servidor de WireGuard se almacena en un fichero .conf en /etc/wireaguard/wireguard.conf (normalmente, no sé si este setup lo estará guardando en otro sitio. No obstante, para añadir un cliente nuevo, mejor volver a correr el script y listo, que ya está preparado para ello y lo hace muy fácil.

2.- Ya he visto que si ejecutas el script de nuevo, reconoce que ya está instalado y te da la opción de añadir un nuevo usuario. Lo he creado para el portátil y me dice que (aparte del QR) la configuración está en /home/usuario/wg0-client-pc.conf. ¿Se puede configurar en el cliente nativo de Windows 10 o hay que instalar el cliente de Wireguard para Windows?
Necesitas instalar el cliente de wireguard en windows, al igual que si lo usas en cualquier otro SO distinto de linux. El único que lleva soporte a nivel de kernel ahora mismo es linux, y creo que ni está aún integrado con las interfaces gráficas (quizá me equivoque en esto). Pero tienes clientes para android, iPhone, Windows, Mac,.. para lo que te de la gana.

3.- En la MV he asignado para Ubuntu Server 2 GB y 1 Procesador, está bien o me he pasado?
Más que suficiente. Con 1GB de RAM y 1 core vas que te matas igualmente.

Saludos!
 
Te refieres a modificar la configuración de Ubuntu o la del servidor de WireGuard? La configuración del servidor de WireGuard se almacena en un fichero .conf en /etc/wireaguard/wireguard.conf (normalmente, no sé si este setup lo estará guardando en otro sitio. No obstante, para añadir un cliente nuevo, mejor volver a correr el script y listo, que ya está preparado para ello y lo hace muy fácil.
Si, me refiero la de Wireguard para cuando instale el Pi-hole poder cambiar las DNS (ahora las tipicas de google)

Gracias compi.
 
Si, me refiero la de Wireguard para cuando instale el Pi-hole poder cambiar las DNS (ahora las tipicas de google)

Gracias compi.
Eso no va en la configuración del servidor, sino en la del cliente, así que no te preocupes. Te paso un ejemplo (la 192.168.77.7 es mi pi-hole)

1619447803173.png


Saludos!
 
Hola,

Instalada MV en Synology con Ubuntu Server (instalación por defecto, no ha sido necesario instalar dependencias) y configurado con el script. Primera prueba con App Android muy satisfactoria. Se conecta tanto con IPv4 e IPv6. La verdad que bastante rápido.

Varias cuestiones please:

1.- Veo que Ubuntu server carece de interfaz gráfica ¿Si quisiera modificar la configuración posteriormente de la parte Servidor, hay algún fichero tipo conf o similar?

2.- Ya he visto que si ejecutas el script de nuevo, reconoce que ya está instalado y te da la opción de añadir un nuevo usuario. Lo he creado para el portátil y me dice que (aparte del QR) la configuración está en /home/usuario/wg0-client-pc.conf. ¿Se puede configurar en el cliente nativo de Windows 10 o hay que instalar el cliente de Wireguard para Windows?

3.- En la MV he asignado para Ubuntu Server 2 GB de RAM (max 6) y 1 Procesador (max 2), está bien o me he pasado?

S@lu2.

Ya te han respondido a todo....

Ahora, métele el pi-hole y a disfrutarlo...
 
Ya está puesto Pi-hole en el NAS jeje, impresionante.

uvJFcDwm1Y.png


Muchas gracias a @pokoyo y @huzoaaz por vuestra ayuda.

Una duda, ¿el tema de instalar Wireguard por VM es por alguna razón? he visto que con Docker hay contenedores de Wireguard y parece que Docker es más ligero a nivel de recursos.

S@lu2.
 
Ole ole ole. qué bonita es esa pantalla. Si le das caña a tu red interna, y hay varias personas usándola, vas a flipar con los números de lo que se traga eso. ¿Sabes cómo sacar provecho de eso con el mikrotik? Recuerda, no lo metas en IP -> DNS, a menos que únicamente uses ese DNS como provider, mételo en el DHCP. En IP -> DNS defines un array de direcciones que se usan indistintamente, si mezclas la IP del Pi-hole con la de un servidor público, verás que parte se bloquea y parte no, y se comporta de manera errática.

Yo tengo puesto normalmente un DNS público en IP -> DNS, y en el DHCP server, entrego como primera IP la del pi-hole, y como segunda la IP del propio router (que acaba tirando de lo que configuras en IP -> DNS). Tal que así:

1619461029462.png


El Wireguard lo puedes instalar como quieras, sospecho que @huzoaaz lo hizo así en su día, porque le resultó más cómodo.

Saludos!
 
Ole ole ole. qué bonita es esa pantalla. Si le das caña a tu red interna, y hay varias personas usándola, vas a flipar con los números de lo que se traga eso. ¿Sabes cómo sacar provecho de eso con el mikrotik? Recuerda, no lo metas en IP -> DNS, a menos que únicamente uses ese DNS como provider, mételo en el DHCP. En IP -> DNS defines un array de direcciones que se usan indistintamente, si mezclas la IP del Pi-hole con la de un servidor público, verás que parte se bloquea y parte no, y se comporta de manera errática.

Yo tengo puesto normalmente un DNS público en IP -> DNS, y en el DHCP server, entrego como primera IP la del pi-hole, y como segunda la IP del propio router (que acaba tirando de lo que configuras en IP -> DNS). Tal que así:

Ver el adjunto 81609

El Wireguard lo puedes instalar como quieras, sospecho que @huzoaaz lo hizo así en su día, porque le resultó más cómodo.

Saludos!
Pues tienes razón jeje, yo lo había puesto en IP -> DNS

1619461482616.png


Seguiré tus consejos!

S@lu2.
 
Ya está puesto Pi-hole en el NAS jeje, impresionante.

Ver el adjunto 81606

Muchas gracias a @pokoyo y @huzoaaz por vuestra ayuda.

Una duda, ¿el tema de instalar Wireguard por VM es por alguna razón? he visto que con Docker hay contenedores de Wireguard y parece que Docker es más ligero a nivel de recursos.

S@lu2.

Lo de la VM lo hice por comodidad… estuve echando un vistazo en los contenedores y no veia nada claro..

Ni que decir queda que si te animas, y lo consigue,… ya sabes lo q toca, manual al canto y contarnos como lo has conseguido hacer funcionar….
 
Lo de la VM lo hice por comodidad… estuve echando un vistazo en los contenedores y no veia nada claro..

Ni que decir queda que si te animas, y lo consigue,… ya sabes lo q toca, manual al canto y contarnos como lo has conseguido hacer funcionar….
Eso está hecho! a ver lo que puedo averiguar.
 
Yo la llegué a tener dockerizada en mi NAS de QNAP.
Aquí dejo el docker-compose, por si alguien lo necesita:
,
Código:
version: "2.1"
services:
  wireguard:
    image: ghcr.io/linuxserver/wireguard
    container_name: wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Atlantic/Canary
      - SERVERURL=wireguard.domain.com #opcional
      - SERVERPORT=51820 #opcional
      - PEERS=1 #opcional
      - PEERDNS=auto #opcional
      - INTERNAL_SUBNET=10.13.13.0 #opcional
      - ALLOWEDIPS=0.0.0.0/0 #opcional
    volumes:
      - /path/to/appdata/config:/config
      - /lib/modules:/lib/modules
    ports:
      - 51820:51820/udp
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
    restart: unless-stopped

Actualmente (como ya he dicho en otras ocasiones), uso PiVPN
por comodidad, y no tengo queja.

Saludos.
Muy buenas,

En Synology veo que hay un contenedor de Docker llamado linuxserver/wireguard supongo que es el mismo que utilizaste en tu QNAP, no?

S@lu2
 
En Synology veo que hay un contenedor de Docker llamado linuxserver/wireguard supongo que es el mismo que utilizaste en tu QNAP, no?
Si, los repositorios de "linuxserver" yo lo usaba en mi antiguo Synology y funcionaban.
Fíjate que el contendor sea el específico para el procesador (x86, arm, etc.) de tu NAS,
o no funcionará.

Decir que: con mi Synology tenía problemas con algunos docker-compose (cada fabricante
tiene sus más y sus menos), otros iban perfectos.

Saludos.
 
Si, los repositorios de "linuxserver" yo lo usaba en mi antiguo Synology y funcionaban.
Fíjate que el contendor sea el específico para el procesador (x86, arm, etc.) de tu NAS,
o no funcionará.

Decir que: con mi Synology tenía problemas con algunos docker-compose (cada fabricante
tiene sus más y sus menos), otros iban perfectos.

Saludos.
Buenos días,

Llevo varios dias con Pi-hole funcionando en una MV de Ubuntu Server y aparentemente bien porque registra mucha actividad y bloqueos. Pero hay algo que no me cuadra, me sigue saliendo bastante publicidad en las webs que visito, se supone que Pi-hole capa la publi no?

Hace falta configurar algo más? En el router está correcto, las DNS son de la IP del Pi-hole.

S@lu2
 
Buenos días,

Llevo varios dias con Pi-hole funcionando en una MV de Ubuntu Server y aparentemente bien porque registra mucha actividad y bloqueos. Pero hay algo que no me cuadra, me sigue saliendo bastante publicidad en las webs que visito, se supone que Pi-hole capa la publi no?

Hace falta configurar algo más? En el router está correcto, las DNS son de la IP del Pi-hole.

S@lu2
Sin mostrar la clave privada, mándanos un pantallazo de la config del cliente. Es ahí donde tienes que tenerlo bien.

Saludos!
 
Arriba