ESP32 Wireguard-Beispiel mit HTTP-Zugriff über Wireguard (PlatformIO)

English Deutsch

In diesem Beispiel verwenden wir Wireguard-ESP32-Arduino, um HTTP-Anfragen über Wireguard auf dem ESP32 durchzuführen.

platformio.ini
[env:esp32-gateway]
platform = espressif32
board = esp32-gateway
framework = arduino
monitor_speed = 115200
lib_deps =
    ciniml/WireGuard-ESP32@^0.1.5
esp32_wireguard_example.cpp
#include <WiFi.h>
#include <WireGuard-ESP32.h>

// WLAN-Konfiguration --- AKTUALISIEREN Sie diese Konfiguration für Ihren WLAN-AP
char ssid[] = "MyWifiESSID";
char password[] = "my-wifi-password";

// WireGuard-Konfiguration --- AKTUALISIEREN Sie diese Konfiguration aus JSON
char private_key[] = "gH2YqDa+St6x5eFhomVQDwtV1F0YMQd3HtOElPkZgVY=";
IPAddress local_ip(10, 217, 59, 2);
char public_key[] = "X6NJW+IznvItD3B5TseUasRPjPzF0PkM5+GaLIjdBG4=";
char endpoint_address[] = "192.168.178.133"; // IP des Wireguard-Endpunkts, mit dem verbunden werden soll.
int endpoint_port = 19628;

static WireGuard wg;

void setup()
{
    Serial.begin(115200);
    Serial.println("Verbindung mit AP wird hergestellt...");
    WiFi.begin(ssid, password);
    while( !WiFi.isConnected() ) {
        delay(100);
    }
    Serial.println(WiFi.localIP());
    Serial.println("Systemzeit wird angepasst...");
    configTime(9 * 60 * 60, 0, "ntp.jst.mfeed.ad.jp", "ntp.nict.jp", "time.google.com");

    Serial.println("Verbunden. WireGuard wird initialisiert...");
    wg.begin(
        local_ip,
        private_key,
        endpoint_address,
        public_key,
        endpoint_port);
}

void loop()
{
    WiFiClient client;

    /**
     * Verbinden mit
     * python3 -m http.server
     */
    if( !client.connect("10.217.59.1", 8000) ) {
        Serial.println("Verbindung fehlgeschlagen...");
        delay(1000);
        return;
    } else { // Client erfolgreich verbunden. Dummy-HTTP-Anfrage senden.
        client.write("GET /wireguard-test HTTP/1.1\\r\\n");
        client.write("Host: wireguard.test.com\\r\\n");
        client.write("\\r\\n\\r\\n");
    }

}

Ersetzen Sie 192.168.238.133 durch die IP-Adresse des Computers, mit dem Ihr ESP32 sich verbinden soll (d.h. der Computer, auf dem WireGuard läuft). Sie müssen außerdem die korrekten WLAN-Zugangsdaten eingeben.

Auf dem Computer deployen Sie diese WireGuard-Konfiguration:

wireguard_computer.ini
[Interface]
# Name = Computer
PrivateKey = ONj6Iefel47uMKtWRCSMLan2UC5eW3Fj9Gsy9bqcyEc=
Address = 10.217.59.1/24
ListenPort = 19628

[Peer]
# Name = ESP32
PublicKey = H3KaL/X94984cLDNWFsM4Hx6Rs/Ku0bW2ECkDUn7wFw=
AllowedIPs = 10.217.59.2/32
PersistentKeepalive = 60

welche automatisch durch die folgende GuardMyWire-Konfiguration generiert wird:

guardmywire_config.json
{
    "rules": {
        "Node": {
            "connect_to": ["*"],
            "keepalive": 60
        }
    },
    "peers": [
        {
            "name": "Computer",
            "endpoint": "192.168.178.233:19628",
            "addresses": [
                "10.217.59.1/24"
            ],
            "type": "Node",
            "interface_name": "wg0"
        }, {
            "name": "ESP32",
            "addresses": [
                "10.217.59.2/24"
            ],
            "type": "Node",
            "interface_name": "wg0"
        }
    ]
}

Aktivieren Sie diese Konfiguration und starten Sie einen Python-HTTP-Server, um die Anfragen zu empfangen, mit

run_http_server.sh
python3 -m http.server

Flashen Sie nun die Firmware auf den ESP32.

Mit wg show sollten Sie sehen, wie sich der ESP verbindet:

wg_show_output.txt
interface: Computer
  public key: X6NJW+IznvItD3B5TseUasRPjPzF0PkM5+GaLIjdBG4=
  private key: (hidden)
  listening port: 19628

peer: H3KaL/X94984cLDNWFsM4Hx6Rs/Ku0bW2ECkDUn7wFw=
  endpoint: 10.9.1.108:19628
  allowed ips: 10.217.59.2/32
  latest handshake: 5 seconds ago
  transfer: 11.71 MiB received, 10.43 MiB sent
  persistent keepalive: every 1 minute

Suchen Sie nach der

wg_latest_handshake.txt
latest handshake: 5 seconds ago

Zeile.

In der Shell, in der python3 -m http.server läuft, sollten Sie die Dummy-HTTP-Anfragen sehen:

http_server_requests.txt
10.217.59.2 - - [31/Dec/2021 02:36:48] "GET /wireguard-test HTTP/1.1" 404 -
10.217.59.2 - - [31/Dec/2021 02:36:48] code 404, message File not found
10.217.59.2 - - [31/Dec/2021 02:36:48] "GET /wireguard-test HTTP/1.1" 404 -
10.217.59.2 - - [31/Dec/2021 02:36:48] code 404, message File not found
10.217.59.2 - - [31/Dec/2021 02:36:48] "GET /wireguard-test HTTP/1.1" 404 -
10.217.59.2 - - [31/Dec/2021 02:36:48] code 404, message File not found

Check out similar posts by category: ESP8266/ESP32, PlatformIO, Wireguard