---
title: 'Quick creation of VPN with WireGuard Server to Server'
url: 'https://rizzato-souel.fr/quick-creation-of-vpn-with-wireguard-server-to-server'
markdown: 'https://rizzato-souel.fr/quick-creation-of-vpn-with-wireguard-server-to-server.md'
date: '2025-04-01'
description: 'The goal is to create a virtual private network between only 2 linux machines. The use case is to connect a VPS hosted by a provider and a local machine with a secure connection. The github repo contains a better documentation than the official one: wireguard-docs Prerequisite is two linux servers …'
taxonomy:
  tag:
    - selfhosting
    - networking
    - vpn
---

# Quick creation of VPN with WireGuard Server to Server

## [Quick creation of VPN with WireGuard Server to Server](https://rizzato-souel.fr/quick-creation-of-vpn-with-wireguard-server-to-server)

    1st Apr 2025   [selfhosting](https://rizzato-souel.fr/tag:selfhosting#body-wrapper) [networking](https://rizzato-souel.fr/tag:networking#body-wrapper) [vpn](https://rizzato-souel.fr/tag:vpn#body-wrapper)  

The goal is to create a virtual private network between only 2 linux machines. The use case is to connect a VPS hosted by a provider and a local machine with a secure connection.

The github repo contains a better documentation than the official one: [wireguard-docs](https://github.com/pirate/wireguard-docs/)

Prerequisite is two linux servers with a fix ip address (it may be possible to use a dynamic dns(ex: duckdns))

Here we will create a new network wg0 between hosts with ip 192.168.1.1 and 192.168.1.2. On the new network, there ip will be 192.168.2.1 and 192.168.2.2. Subnet mask is set to 30 allowing only 2 IP address.

Both servers need to have the same configuration:

1. install wireguard ```
    # apt install wireguard
    ```
2. generate private and the public key files: ```
    wg genkey | tee privatekey | wg pubkey > publickey
    ```
3. create WireGuard configuration for a new network interface (wg0): ```
    sudoedit /etc/wireguard/wg0.conf
    ```

    ```
    [Interface]
    Address = 192.168.2.1 # the IP to create for the new wg0 interface
    ListenPort = 51820
    PrivateKey = privatekey_of_this_server_found_in_files_privatekey
    [Peer]
    Endpoint = 192.168.1.2:51820 #IP + port where can reach the distant server (the public fixed ip)
    PublicKey = publickey_of_the_DISTANT_server_found_in_files_publickey
    AllowedIPs = 192.198.2.2/32 # the IP off the peer on the new wg0 interface. mask 32 allow only 1 IP
    ```

    on the distant server, the configuration is the same, only all ip and keys should be switch
4. start the tunnel on both side ('down' to remove the tunnel): ```
    wg-quick up wg0
    ```
5. enjoy: ```
    ping 192.168.2.2
    ```

    For autostart when booting (wg-quick down wg0 before):

    ```
    sudo systemctl enable --now wg-quick@wg0
    ```

some useful command to check your new VPN:

```
ip -4 -c -br link show
ip -4 -c -br address show
sudo wg show
```

 [ Previous Post](https://rizzato-souel.fr/restore-mariadb-in-docker)

---

## Navigation

- Parent: [Blog](https://rizzato-souel.fr/index.md)
- Next: [Restore MariaDb in Docker](https://rizzato-souel.fr/restore-mariadb-in-docker.md)
