Configurar WireGuard

Desde wireguard.com:

WireGuard es un VPN de Novel que ejecuta dentro el Kernel Linux y utiliza cifrado en el estado-del-arte. Su intención es ser más rápido, más simple, más ágil y más útil que IPSec, evitando al mismo tiempo el enorme dolor de cabeza. Intenta tener considerablemente más rendimiento que OpenVPN. WireGuard está diseñado como una VPN de propósito general para ejecutarse tanto en interfaces integradas como en supercomputadoras, adecuada para muchas circunstancias diferentes. Se ejecuta sobre UDP.

Quizás también le interese leer la Descripción conceptual, el Inicio rápido y el Documento técnico.

Fedora CoreOS tiene mantenimiento completo para WireGuard fuera de la caja. Esta página muestra como instalar una conexión simple entre un servidor Fedora CoreOS y un equipo de cliente. Va acerca de la configuración básica de cliente, pero no cubre instalar con WireGuard en su cliente.

Hay dos opciones para configurar WireGuard en Fedora CoreOS:

  • Importe la configuración de WireGuard en NetworkManager

  • Utilizar wg-quick

Generar Claves

Necesitará generar claves para configurar WireGuard. Puede generar las claves en su estación de trabajo o ejecutando un sistema de Fedora CoreOS.

Primero, déjenos crear las llaves WireGuard para el sistema de Fedora CoreOS:

Genere las claves de WireGuard para el sistema Fedora CoreOS
umask 077
wg genkey | tee fcos_private_key | wg pubkey > fcos_public_key

Ahora generaremos las claves WireGuard para el cliente:

Genera claves WireGuard para el cliente
umask 077
wg genkey | tee client_private_key | wg pubkey > client_public_key

Puede general opcionalmente una clave pre-compartida para incrementar la seguridad:

Generar una clave pre-compartida por esta pareja de compañero
wg genpsk > fcos_client_psk

Generaría una clave pre-compartida por cada pareja de compañero.

Configurar WireGuard sobre Fedora CoreOS

Ahora puedes modificar su config de Butane para crear el archivo wg0 de configuración:

Ejemplo de la configuración Butane con un archivo de configuración de WireGuard
variant: fcos
version: 1.6.0
storage:
  files:
    - path: /etc/wireguard/wg0.conf
      mode: 0600
      contents:
        inline: |
          [Interface]
          Address = 192.168.71.1/24,fdc9:3c6b:21c7:e6bd::1/64
          PrivateKey = 
          ListenPort = 51820

          [Peer]
          PublicKey = 
          PresharedKey = 
          AllowedIPs = 192.168.71.2/32,fdc9:3c6b:21c7:e6bd::2/128

Utilización de NetworkManager

Si desea utilizar el mantenimiento en NetworkManager, puede importar la configuración de WireGuard con una unidad de un disparador:

Ejemplo de unidad de servicio systemd para importar la configuración de WireGuard
systemd:
  units:
    - name: import-wireguard-config.service
      enabled: true
      contents: |
        [Unit]
        ConditionPathExists=!/etc/NetworkManager/system-connections/wg0.nmconnection
        Description=Importar la configuración de wireguard a NetworkManager
        [Service]
        Type=oneshot
        RemainAfterExit=yes
        ExecStart=nmcli connection import type wireguard file /etc/wireguard/wg0.conf
        [Install]
        WantedBy=multi-user.target

NetworkManager con directivas ignGre PostUp y PostDown en el config de WireGuard. Si tiene configuración de cortafuegos para aplicar, asegúrese que lo aplique con una unidad separada, o manualmente.

Si necesita realizar más cambios para actualizar la configuración de WireGuard, borre la configuración y re-impórtela desde el archivo de configuración actualizada.

Re-importar configuración actualizada de WireGuard
$ sudo nmcli con delete wg0 && sudo nmcli con import type wireguard file /etc/wireguard/wg0.conf
Conexión 'wg0' (1e4f869e-f95c-4221-b2b9-99726ffde92b) borrada correctamente.
Conexión 'wg0' (18cd8e61-1cc2-43a2-9f2e-467b75cd99da) agregada correctamente.

Utilizar wg-quick

Si desea utilizar wg-quick en lugar del mantenimiento en NetworkManager, puede añadir lo siguiente en su config de Butane:

systemd:
  units:
    - name: wg-quick@wg0.service
      enabled: true

Si necesita realizar más cambios para la configuración de WireGuard, recargue el servicio con:

systemctl reload wg-quick@wg0.conf

Verificar la configuración en el sistema de Fedora CoreOS

Arranque Fedora CoreOS y acceda. Cuando ejecute sudo wg show vería esto:

Compruebe la configuración de WireGuard
[core@server ~]$ sudo wg show
interface: wg0
  public key: <fcos_public_key>
  private key: (hidden)
  listening port: 51820

aparece: <una_clave_pública_cliente>
  clave preshared (oculta)
  extremo: <Dirección IP Cliente>:51821
  allowed ips: 192.168.71.0/24, fdc9:3c6b:21c7:e6bd::/64

[core@server ~]$ sudo ip addr show wg0
12: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 192.168.71.1/24 scope global wg0
       valid_lft forever preferred_lft forever
    inet6 fdc9:3c6b:21c7:e6bd::1/64 scope global
       valid_lft forever preferred_lft forever

La <dirección Ip cliente> anterior es el IP o FQDN del equipo Cliente.

Configurar Wireguard en un cliente

Ahora tendrá que configurar WireGuard en su equipo cliente con la siguiente configuración:

Configuración de WireGuard para Cliente
[Interface]
Address = 192.168.71.2/24,fdc9:3c6b:21c7:e6bd::2/64
PrivateKey = <clave_privada_cliente>
ListenPort = 51821

[Peer]
PublicKey = <clave_pública_fcos>
PresharedKey = <fcos_client_psk>
Endpoint = <dirección IP FCOS>:51820
AllowedIPs = 192.168.71.0/24,fdc9:3c6b:21c7:e6bd::/64

La <dirección IP FCOS> es la IP o FQDN del servidor FCOS.

Escriba la configuración anterior a /etc/wireguard/wg0.conf, establezca el modo de acceso al archivo de configuración y entonces importe la configuración en su cliente:

Importe la configuración de WireGuard en el cliente
[core@client ~]$ sudo chmod 0600 /etc/wireguard/wg0.conf
[core@client ~]$ sudo nmcli con import type wireguard file /etc/wireguard/wg0.conf

A continuación compruebe su configuración:

Compruebe la configuración de WireGuard en el cliente
[core@client ~] $ sudo wg show
interface: wg0
  public key: <client_one_public_key>
  private key: (hidden)
  listening port: 51821

peer: <fcos_public_key>
  preshared key: (hidden)
  endpoint: <FCOS IP address>:51820
  allowed ips: 192.168.71.0/24, fdc9:3c6b:21c7:e6bd::/64

[core@client ~]$ sudo ip addr show wg0
21: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 192.168.71.2/24 scope global wg0
       valid_lft forever preferred_lft forever
    inet6 fdc9:3c6b:21c7:e6bd::2/64 scope global
       valid_lft forever preferred_lft forever

Probar la conexión de WireGuard

Ahora puede hacer ping a la dirección IP WireGuard del servidor de Fedora CoreOS:

Ejecute ping en el servidor Fedora CoreOS sobre WireGuard desde el cliente
[core@client ~]$ ping 192.168.71.1
PING 192.168.71.1 (192.168.71.1) 56(84) bytes of data.
64 bytes from 192.168.71.1: icmp_seq=1 ttl=64 time=0.439 ms
64 bytes from 192.168.71.1: icmp_seq=2 ttl=64 time=0.422 ms
64 bytes from 192.168.71.1: icmp_seq=3 ttl=64 time=0.383 ms
^C
--- 192.168.71.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2027ms
rtt min/avg/max/mdev = 0.383/0.414/0.439/0.023 ms

[core@client ~]$ ping6 fdc9:3c6b:21c7:e6bd::1
PING fdc9:3c6b:21c7:e6bd::1(fdc9:3c6b:21c7:e6bd::1) 56 data bytes
64 bytes from fdc9:3c6b:21c7:e6bd::1: icmp_seq=1 ttl=64 time=1.55 ms
64 bytes from fdc9:3c6b:21c7:e6bd::1: icmp_seq=2 ttl=64 time=0.454 ms
64 bytes from fdc9:3c6b:21c7:e6bd::1: icmp_seq=3 ttl=64 time=0.424 ms
64 bytes from fdc9:3c6b:21c7:e6bd::1: icmp_seq=4 ttl=64 time=0.424 ms
^C
--- fdc9:3c6b:21c7:e6bd::1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3054ms
rtt min/avg/max/mdev = 0.424/0.712/1.546/0.481 ms

Cuando ejecuta sudo wg show en su cliente, vería un protocolo de enlace reciente y una sección de transferencia con los enviados y recibidos:

Verificar negociación y transferencias métricas
[core@client ~] $ sudo wg show
interface: wg0
  public key: <client_one_public_key>
  private key: (hidden)
  listening port: 51821

peer: <clave_pública_fcos>
  preshared key: (oculta)
  punto final: <Dirección IP cliente>:51820
  ips concedidas: 192.168.71.0/24, fdc9:3c6b:21c7:e6bd::/64
  última negociación: hace 9 segundos
  transferencia: 22'02 KiB recibido, 22'28 KiB enviado

Enrutar todo el tráfico sobre WireGuard

Si planea reenviar todo el tráfico de su cliente a través de la instancia Fedora CoreOS, necesitará habilitar el Reenvío IP y establecer algunas directivas PostUp y PostDown:

Ejemplo de configuración del WireGuard de Fedora CoreOS con reenvío IP
variant: fcos
version: 1.6.0
storage:
  files:
    - path: /etc/sysctl.d/90-ipv4-ip-forward.conf
      mode: 0644
      contents:
        inline: |
          net.ipv4.ip_forward = 1

    - path: /etc/sysctl.d/90-ipv6-ip-forwarding.conf
      mode: 0644
      contents:
        inline: |
          net.ipv6.conf.all.forwarding = 1

    - path: /etc/wireguard/wg0.conf
      mode: 0600
      contents:
        inline: |
          [Interface]
          Address = 192.168.71.1/24,fdc9:3c6b:21c7:e6bd::1/64
          PrivateKey = 
          ListenPort = 51820

          PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE
          PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp1s0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o enp1s0 -j MASQUERADE

          [Peer]
          PublicKey = 
          PresharedKey = 
          AllowedIPs = 192.168.71.0/24,fdc9:3c6b:21c7:e6bd::/64

systemd:
  units:
    - name: wg-quick@wg0.service
      enabled: true

Fedora CoreOS utiliza nombres de interfaz predecibles a través del predeterminado. Asegúrese utilizar el nombre de interfaz correcto de su hardware en los comandos anteriores de PostUp y PostDown.

Después establece AllowedIPs = 0.0.0.0/0,::/0 dentro de /etc/wireguard/wg0.conf dentro de la configuración cliente para enrutar todo el tráfico de IPv4 e IPv6 en el equipo cliente sobre la interfaz WireGuard:

Una configuración para enrutar todo el tráfico del cliente a través de WireGuard:
[Interface]
Address = 192.168.71.1/24,fdc9:3c6b:21c7:e6bd::2/64
PrivateKey = <client_private_key>
ListenPort = 51821

[Peer]
PublicKey = <fcos_public_key>
PresharedKey = <fcos_client_psk>
Endpoint = <Dirección IP de Fedora Core OS>:51820
AllowedIPs = 0.0.0.0/0,::/0