---
# System prepended metadata

title: Pràctica intro a Wireguard
tags: [asix]

---

<div style="width: 45%; margin-left: auto;">

![image](https://hackmd.io/_uploads/By3ai4Bolx.png)

</div>

<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="Llicència de Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />Aquesta obra està subjecta a una llicència de <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Reconeixement-CompartirIgual 4.0 Internacional de Creative Commons</a>

# Pràctica intro a Wireguard
Com ja hem comentat a classe, Wireguard és un dels programaris de VPN més populars en l'actualitat juntament amb OpenVPN.

## Infraestructura
![imagen](https://hackmd.io/_uploads/SkmyJAR-bl.png)

Per a realitzar correctament aquesta pràctica necessitareu 2 màquines virtuals a Isard (Box1 i Box2) amb la següent parametrització:
- __SO__: Ubuntu server 24.04 LTS
- __Hardware__: 
  - 2 vCPUS
  - 4 GB de memòria RAM
  - Xarxes: Default + Personal1

## Treball a classe
:eyes: :fire: El primer cop que s'arrenquin les màquines heu de configurar el nom de cada màquina de manera que amb les captures de pantalla de les consoles es pugui saber a quina màquina som i el nom de l'alumne que realitza l'activitat. Per això haureu d'executar la següent instrucció:
```bash=
hostnamectl set-hostname 'nom-host'
```
on el nom-host tindrà el format:
  * o boxX-nom-cognom
****no poseu guions baixos

Per exemple: ```hostnamectl set-hostname 'box1-xavi-quesada'```

Continuareu configurant amb [Netplan](https://hackmd.io/@JdaXaviQ/H1vZQT0-bx) la interfície de xarxa de Personal1. Us proposo els següents fitxers de configuració:
```yaml=
# Configuració Box1
network:
  ethernets:
    enp1s0:
      dhcp4: true
    enp2s0:
      addresses:
        - 10.0.0.3/24
  version: 2
```
```yaml=
# Configuració Box2
network:
  ethernets:
    enp1s0:
      dhcp4: true
    enp2s0:
      addresses:
        - 10.0.0.4/24
  version: 2
```

1. (1 punt) Comproveu que podeu realitzar ping entre ambdues màquines. Adjunteu captura de pantalla.

2. (1 punt) Adjunteu captures de tots els passos.
  - Instaleu el paquet wireguard a la màquina Box1.
  - Aixequeu una nova interfície temporal de tipus Wireguard:
  ```bash=
  sudo ip link add dev wg0 type wireguard
  ```
  - Modifiqueu el fitxer de netplan d'aquesta màquina per a donar una adreça a la nova interfície. Noteu que les VPN funcionen amb espais d'adreces privades, la única condició és que sigui un espai d'adreces independent de la resta d'interfícies. A continuació teniu un exemple de configuració:

```yaml=
# Configuració Box1
network:
  ethernets:
    enp1s0:
      dhcp4: true
    enp2s0:
      addresses:
        - 10.0.0.3/24
    wg0:
      addresses:
        - 10.0.1.101/24
  version: 2
```
  - Adjunteu captura provant que la interfície està activada realitzant un ping a aquesta interfície.

3. (1 punt) Adjunteu captura de cada pas.
  - Instal·leu el paquet apache2.
  - Reemplaceu el fitxer /var/www/html/index.html pel següent contingut:
  ```html=
<!DOCTYPE html>
<html>
    <head>
        <title>Pàgina d'ASIX2</title>
    </head>
    <body>
        <h1>
            Pàgina d'ASIX2
        </h1>
    </body>
</html>
```
4. (1 punt) Creació de claus.
  Wireguard utlitza l'algorisme [Curve25519](https://ca.wikipedia.org/wiki/Curve25519) de criptografia asimètrica.
  - Utilitzeu la comanda wg per a crear una nova clau privada.
  ```bash=
wg genkey > key
sudo wg set wg0 private-key key
sudo wg show
```
  - No necessitem crear una clau pública perquè amb wireguard la podem crear a partir de la clau privada:
```bash=
wg pubkey < key
```
5. (3 punt) Connexió entre Peers.
  Una interfície wireguard fa servir UDP.
  Una interfície wireguard només respon a un paquet UDP si el remitent és un node de confiança.
  Un node és de confiança si has registrat la seva clau pública com a un peer.
  - Instal·la wireguard i configura wg0 a la màquina box2 amb l'adreça 10.0.1.102/24.
  - Comprova que desde la mateixa box2 pots fer ping a la interfície wg0
  - La id d'un node és la seva clau pública. Executa la comanda ```sudo wg show wg0``` a la box2 per a consultar la seva id i el port on està escoltant.
  - Amb la clau pública de box2 podem anar a box1 i afegir-ne un nou peer de confiança:
  ```bash=
  sudo wg set wg0 peer la_pubkey_de_box2 allowed-ips 10.10.0.102/32 endpoint 10.0.0.4:el_port_de_box2
  ```
  - Executeu la comanda ```sudo wg show wg0``` per a comprovar que estem acceptant el peer box2.
  - Repetiu els passos anteriors però afengint en aquesta ocasió el peer box1 a la màquina box2.
  - Comproveu que hi ha connexió per la interfície de VPN
  ![imagen](https://hackmd.io/_uploads/HypVKJJz-x.png)

6. (3 punts) Integració de la configuració amb Netplan.
  - Afegiu la següent configuració al fitxer Netplan d'ambdues màquines per a que es configuri automìcament el sistema:
  ```yaml=
network:
  ethernets:
    enp1s0:
      dhcp4: true
    enp2s0:
      addresses:
        - 10.0.0.3/24  
  tunnels:
    wg0:
      mode: wireguard
      port: 51820
      key: UMjI9WbobURkCDh2RT8SRM5osFI7siiR/sPOuuTIDns=
      addresses:
        - 172.16.0.1/24
      peers:
        - allowed-ips: [172.16.0.0/24]
          endpoint: 10.86.126.56:51820
          keys:
            public: AIm+QeCoC23zInKASmhu6z/3iaT0R2IKraB7WwYB5ms=
  ``` 
  
  On port és el port UDP d'escolta, key és la clau privada de la màquina que estem configurant i keys:->public és la clau pública del peer que volem aceptar.
  
  - Lliureu captures de pantalla demostrant el funcionament i la configuració netplan.