ESP32 Wireguard-Beispiel mit HTTP-Zugriff über Wireguard (PlatformIO)
In diesem Beispiel verwenden wir Wireguard-ESP32-Arduino, um HTTP-Anfragen über Wireguard auf dem ESP32 durchzuführen.
[env:esp32-gateway]
platform = espressif32
board = esp32-gateway
framework = arduino
monitor_speed = 115200
lib_deps =
ciniml/WireGuard-ESP32@^0.1.5#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:
[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 = 60welche automatisch durch die folgende GuardMyWire-Konfiguration generiert wird:
{
"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
python3 -m http.serverFlashen Sie nun die Firmware auf den ESP32.
Mit wg show sollten Sie sehen, wie sich der ESP verbindet:
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 minuteSuchen Sie nach der
latest handshake: 5 seconds agoZeile.
In der Shell, in der python3 -m http.server läuft, sollten Sie die Dummy-HTTP-Anfragen sehen:
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