mirror of
https://github.com/netbirdio/netbird.git
synced 2024-11-24 09:03:14 +01:00
0c039274a4
This update adds new relay integration for NetBird clients. The new relay is based on web sockets and listens on a single port. - Adds new relay implementation with websocket with single port relaying mechanism - refactor peer connection logic, allowing upgrade and downgrade from/to P2P connection - peer connections are faster since it connects first to relay and then upgrades to P2P - maintains compatibility with old clients by not using the new relay - updates infrastructure scripts with new relay service
77 lines
2.2 KiB
Protocol Buffer
77 lines
2.2 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
import "google/protobuf/descriptor.proto";
|
|
|
|
option go_package = "/proto";
|
|
|
|
package signalexchange;
|
|
|
|
service SignalExchange {
|
|
// Synchronously connect to the Signal Exchange service offering connection candidates and waiting for connection candidates from the other party (remote peer)
|
|
rpc Send(EncryptedMessage) returns (EncryptedMessage) {}
|
|
// Connect to the Signal Exchange service offering connection candidates and maintain a channel for receiving candidates from the other party (remote peer)
|
|
rpc ConnectStream(stream EncryptedMessage) returns (stream EncryptedMessage) {}
|
|
}
|
|
|
|
// Used for sending through signal.
|
|
// The body of this message is the Body message encrypted with the Wireguard private key and the remote Peer key
|
|
message EncryptedMessage {
|
|
|
|
// Wireguard public key
|
|
string key = 2;
|
|
|
|
// Wireguard public key of the remote peer to connect to
|
|
string remoteKey = 3;
|
|
|
|
// encrypted message Body
|
|
bytes body = 4;
|
|
}
|
|
|
|
// A decrypted representation of the EncryptedMessage. Used locally before/after encryption
|
|
message Message {
|
|
// WireGuard public key
|
|
string key = 2;
|
|
|
|
// WireGuard public key of the remote peer to connect to
|
|
string remoteKey = 3;
|
|
|
|
Body body = 4;
|
|
}
|
|
|
|
// Actual body of the message that can contain credentials (type OFFER/ANSWER) or connection Candidate
|
|
// This part will be encrypted
|
|
message Body {
|
|
// Message type
|
|
enum Type {
|
|
OFFER = 0;
|
|
ANSWER = 1;
|
|
CANDIDATE = 2;
|
|
MODE = 4;
|
|
}
|
|
Type type = 1;
|
|
string payload = 2;
|
|
// wgListenPort is an actual WireGuard listen port
|
|
uint32 wgListenPort = 3;
|
|
string netBirdVersion = 4;
|
|
Mode mode = 5;
|
|
|
|
// featuresSupported list of supported features by the client of this protocol
|
|
repeated uint32 featuresSupported = 6;
|
|
|
|
// RosenpassConfig is a Rosenpass config of the remote peer our peer tries to connect to
|
|
RosenpassConfig rosenpassConfig = 7;
|
|
|
|
// relayServerAddress is url of the relay server
|
|
string relayServerAddress = 8;
|
|
}
|
|
|
|
// Mode indicates a connection mode
|
|
message Mode {
|
|
optional bool direct = 1;
|
|
}
|
|
|
|
message RosenpassConfig {
|
|
bytes rosenpassPubKey = 1;
|
|
// rosenpassServerAddr is an IP:port of the rosenpass service
|
|
string rosenpassServerAddr = 2;
|
|
} |