Browse Source

custom packet for proxy config change

Abhishek Kondur 2 years ago
parent
commit
2855d7c617

+ 2 - 0
nm-proxy/common/common.go

@@ -14,8 +14,10 @@ var IsIngressGateway bool
 var IsRelayed bool
 var IsServer bool
 var InterfaceName string
+var BehindNAT bool
 
 var WgIfaceMap = models.WgIfaceConf{
+	Iface:   nil,
 	PeerMap: make(map[string]*models.ConnConfig),
 }
 

+ 12 - 0
nm-proxy/packet/packet.go

@@ -64,6 +64,18 @@ func ConsumeHandshakeInitiationMsg(initiator bool, buf []byte, src *net.UDPAddr,
 	return nil
 }
 
+func CreateProxyUpdatePacket(msg *ProxyUpdateMessage) ([]byte, error) {
+	var buff [MessageProxyUpdateSize]byte
+	writer := bytes.NewBuffer(buff[:0])
+	err := binary.Write(writer, binary.LittleEndian, msg)
+	if err != nil {
+		return nil, err
+	}
+	packet := writer.Bytes()
+	return packet, nil
+
+}
+
 func CreateMetricPacket(id uint32, sender, reciever wgtypes.Key) ([]byte, error) {
 	msg := MetricMessage{
 		Type:      MessageMetricsType,

+ 9 - 3
nm-proxy/packet/packet_helper.go

@@ -20,7 +20,7 @@ func init() {
 }
 
 type MessageInitiation struct {
-	Type      uint32
+	Type      MessageType
 	Sender    uint32
 	Ephemeral NoisePublicKey
 	Static    [NoisePublicKeySize + poly1305.TagSize]byte
@@ -30,7 +30,7 @@ type MessageInitiation struct {
 }
 
 type MetricMessage struct {
-	Type      uint32
+	Type      MessageType
 	ID        uint32
 	Sender    wgtypes.Key
 	Reciever  wgtypes.Key
@@ -38,7 +38,13 @@ type MetricMessage struct {
 }
 
 type ProxyMessage struct {
-	Type     uint32
+	Type     MessageType
 	Sender   [16]byte
 	Reciever [16]byte
 }
+
+type ProxyUpdateMessage struct {
+	Type       MessageType
+	Action     ProxyActionType
+	ListenPort uint32
+}

+ 15 - 5
nm-proxy/packet/utils.go

@@ -10,16 +10,26 @@ import (
 	"golang.org/x/crypto/curve25519"
 )
 
+type MessageType uint32
+type ProxyActionType uint32
+
 const (
-	MessageInitiationType = 1
-	MessageMetricsType    = 5
-	MessageProxyType      = 6
+	MessageInitiationType  MessageType = 1
+	MessageMetricsType     MessageType = 5
+	MessageProxyType       MessageType = 6
+	MessageProxyUpdateType MessageType = 7
+)
 
+const (
+	UpdateListenPort ProxyActionType = 1
+)
+const (
 	NoisePublicKeySize  = 32
 	NoisePrivateKeySize = 32
 
-	MessageMetricSize = 148
-	MessageProxySize  = 36
+	MessageMetricSize      = 148
+	MessageProxyUpdateSize = 148
+	MessageProxySize       = 36
 
 	NoiseConstruction = "Noise_IKpsk2_25519_ChaChaPoly_BLAKE2s"
 	WGIdentifier      = "WireGuard v1 zx2c4 [email protected]"

+ 1 - 1
nm-proxy/server/server.go

@@ -102,7 +102,7 @@ func (p *ProxyServer) Listen(ctx context.Context) {
 			}
 
 			msgType := binary.LittleEndian.Uint32(buffer[:4])
-			switch msgType {
+			switch packet.MessageType(msgType) {
 			case packet.MessageMetricsType:
 				metricMsg, err := packet.ConsumeMetricPacket(buffer[:origBufferLen])
 				// calc latency