ciniml / WireGuard-ESP32-Arduino

WireGuard implementation for ESP32 Arduino
Other
804 stars 64 forks source link

Can't connect to server from ESP32 client #35

Open dwaynez opened 10 months ago

dwaynez commented 10 months ago

I am running Wireguard on a raspberry pi. I can connect with a number of devices (Windows, Android) and everything appears to be setup properly. I am trying to setup an ESP32 with a web server, but web server times out trying to load the web page. When I turn off wireguard I am able to access the webserver. Any advice?

define DEVMODE 0 // - comment out for production mode (remove print statements)

include

include

include

include

include

include

include

include

include

include

include

define PRINTLN(...) Serial.println(VA_ARGS); WebSerial.println(VA_ARGS); wifi_send(t_state,String(__VA_ARGS__),true)

define PRINT(...) Serial.print(VA_ARGS); WebSerial.print(VA_ARGS); wifi_send(t_state,String(__VA_ARGS__))

define PRINTLN2(...) Serial.println(VA_ARGS); WebSerial.println(VA_ARGS)

define PRINT2(...) Serial.print(VA_ARGS); WebSerial.print(VA_ARGS)

// #define PRINTLN(...) // #define PRINT(...)

// WIFI communication constants

define wifi_retry_max 500

define host "10.6.0.1"

define ssid "xxxx"

define password "yyyy"

define private_key "zzz"

define remote_address "xxxxx.duckdns.org"

define public_key "aaaaa"

define remote_port 51820

WiFiClient client; static WireGuard wg; IPAddress local_ip(10,6,0,6); // Define OTA variables AsyncWebServer server(80); const char* serverIndex = "<!DOCTYPE html><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\nZHM Garage\n<a href=""/update"">Update firmware
<a href=""/webserial"">Web Serial
<a href=""/vars"">Variables";

void setup() { Serial.begin(115200); WiFi.onEvent(Wifi_connected,ARDUINO_EVENT_WIFI_STA_CONNECTED); WiFi.onEvent(Get_IPAddress, ARDUINO_EVENT_WIFI_STA_GOT_IP); WiFi.onEvent(Wifi_disconnected, ARDUINO_EVENT_WIFI_STA_DISCONNECTED); WiFi.begin(ssid, password); delay(5000);

// Create the OTA server
server.on("/",      HTTP_GET, [](AsyncWebServerRequest *request) {request->send(200, "text/html", serverIndex); });
server.on("/vars",  HTTP_GET, [](AsyncWebServerRequest *request) {request->send(200, "text/html", SendHTML()); });
server.on("/get",   HTTP_GET, [](AsyncWebServerRequest *request) {char inputMessage[5];

    if (request->hasParam("debug_sw")) {
        request->getParam("debug_sw")->value().toCharArray(inputMessage,5);
        debug_sw = atoi(inputMessage);
        request->send(200, "text/html", "Value set. Press go back" );
    } else if (request->hasParam("reboot")) {
        request->getParam("alarmoff")->value().toCharArray(inputMessage,5);
        if (strcmp(inputMessage, "111") == 0) {
            request->send(200, "text/html", "Rebooting Press Go back" );
            ESP.restart();
        } else {
            request->send(200, "text/html", "Bad reboot code" );
        }
    }

});

AsyncElegantOTA.begin(&server); WebSerial.begin(&server); server.begin();

}

// Main processing loop void loop() { if (!wg_connected) { Serial.println("Attempting WG connection"); wg_connect();

}

//Format variable page String SendHTML(){ String ptr = "<!DOCTYPE html> \n"; ptr +="<meta name=\"viewport\" content=\"no-cache\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n"; ptr +="Boat Warehouse variables\n"; ptr +="\n"; ptr +="

Boat Warehouse variables

\n"; ptr +="\n";

ptr +="<form action=\"/get\">"; ptr +="Debug Switch: <input type=\"number\" value=\""; ptr +=(String)debug_sw; ptr +="\" name=\"debug_sw\">"; ptr +="<input type=\"submit\" value=\"Submit\">"; ptr +="
";

ptr +="<form action=\"/get\">"; ptr +="Reboot: <input type=\"number\" value=\"\" name=\"reboot\">"; ptr +="<input type=\"submit\" value=\"Submit\">"; ptr +="
";

ptr +="<form action=\"/get\">"; ptr +="Alarm set on/off: <input type=\"number\" value=\"\" name=\"alarmoff\">"; ptr +="<input type=\"submit\" value=\"Submit\">"; ptr +="
";

ptr +="<div id=\"webpage\">\n"; ptr +="

Horn Status: "; ptr +=(String)state[s_horn_status]; ptr +="

"; ptr +="
\n"; ptr +="\n"; ptr +="\n"; return ptr; }

//WIFI Connected void Wifi_connected(WiFiEvent_t event, WiFiEventInfo_t info){ // wifi_connected = true; Serial.println("WIFI Connected"); }

// WIFI IP address assigned void Get_IPAddress(WiFiEvent_t event, WiFiEventInfo_t info){ Serial.print("WiFi connected with IP: "); Serial.println(WiFi.localIP()); configTime(9 60 60, 0, "ntp.jst.mfeed.ad.jp", "ntp.nict.jp", "time.google.com"); wg_connect(); client_connect(); }

// WIF disconnected void Wifi_disconnected(WiFiEvent_t event, WiFiEventInfo_t info){ Serial.println("Disconnected from WIFI access point"); // Serial.print("WiFi lost connection. Reason: "); // Serial.println(info.disconnected.reason); Serial.println("Reconnecting..."); WiFi.begin(ssid, password); }

// Connect to wifi void wg_connect() { Serial.print("WireGuard IP1: "); Serial.println(local_ip.toString()); if (wg.begin( local_ip, // IP address of the local interface private_key, // Private key of the local interface remote_address, // Address of the endpoint peer. public_key, // Public key of the endpoint peer. remote_port)) { // Port pf the endpoint peer. Serial.println("WG connected2");

      Serial.print("WireGuard IP: ");

Serial.println(local_ip.toString()); wg_connected = true;

    IPAddress ip (192,168,39,18);
    Serial.println("before ping 1");
    bool ret = Ping.ping(ip);
    Serial.println("after ping 1");
    if (ret)
        Serial.println("ping 1 ok");
    else
        Serial.println("ping 1 failed");
    IPAddress ip2 (10,6,0,1);
    if (Ping.ping(ip2))
        Serial.println("ping 2 ok");
    else
        Serial.println("ping 2 failed");

} else {
    Serial.println("WG connect failed");
    wg_connected = false;
}

}