Skip to content

WS Client over OpenVPN does not reconnect after tunnel reconnects #106

@Dash83UPV

Description

@Dash83UPV

Dear all
As always, thank you for your hard work

In Windows 10, I have been doing some long time testing to our application and I have found a possible issue.
We connect using WS and mantain the connection during the whole life of the application.

Due to the nature of our project, the Surreal DataBase is located in a Virtualized environment where we connect using OpenVPN.

I have looking at the logs of the OpenVPN client and it reconnects every hour. i.e.:

[Jun 17, 2024, 09:45:46] SSL Handshake: peer certificate: CN=server, 2048 bit RSA, cipher: TLS_AES_256_GCM_SHA384         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(256)            Mac=AEAD
[Jun 17, 2024, 10:45:46] Tunnel Options:V4,dev-type tun,link-mtu 1603,tun-mtu 1500,proto TCPv4_CLIENT,keydir 1,cipher AES-256-CBC,auth SHA512,keysize 256,tls-auth,key-method 2,tls-client
[Jun 17, 2024, 10:45:46] Creds: UsernameEmpty/PasswordEmpty
[Jun 17, 2024, 10:45:46] Sending Peer Info:

[Jun 17, 2024, 10:45:46] SSL Handshake: peer certificate: CN=server, 2048 bit RSA, cipher: TLS_AES_256_GCM_SHA384         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(256)            Mac=AEAD
[Jun 17, 2024, 11:45:46] Tunnel Options:V4,dev-type tun,link-mtu 1603,tun-mtu 1500,proto TCPv4_CLIENT,keydir 1,cipher AES-256-CBC,auth SHA512,keysize 256,tls-auth,key-method 2,tls-client
[Jun 17, 2024, 11:45:46] Creds: UsernameEmpty/PasswordEmpty
[Jun 17, 2024, 11:45:46] Sending Peer Info:

Then we have noticied that the SurrealDb.NET client looses connection and we have to set a timer to disconnect and reconnect every 30 minutes.
Then we can guarantee that the connection is available when a user requires data.


private void initializeReconnectTimer()
{
    timer = new System.Timers.Timer()
    {
        AutoReset = true,
        Enabled = true,
        Interval = RECONNECT_TIMER,
    };
    timer.Elapsed += Timer_Elapsed;
    timer.Start();
}

private bool isReconecting;

private void Timer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
{
    if (isConnected)
    {
        isReconecting = true;
        Disconnect();
        Thread.Sleep(WAIT_TIME_FOR_RECONNECT);
        Connect(ipAddress, port, dbUsername, dbPassword, database);
        isReconecting = false;
    }
}

To test this behaviour, just establish the SurrealDB server behind a OpenVPN tunnel and manually disconnect and reconnect the tunnel.
The SurrealDB.NET client WS should not recover from this.

Could you kindly take a look at it.

Best regards.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions