mirror of
				https://github.com/gravitl/netmaker.git
				synced 2025-10-31 12:16:29 +08:00 
			
		
		
		
	forward unknown pkts to all interfaces
This commit is contained in:
		| @@ -104,6 +104,7 @@ func GetPeersForProxy(node *models.Node, onlyPeers bool) (manager.ManagerPayload | |||||||
| 					peerConfMap[peer.PublicKey] = manager.PeerConf{ | 					peerConfMap[peer.PublicKey] = manager.PeerConf{ | ||||||
| 						IsRelayed: true, | 						IsRelayed: true, | ||||||
| 						RelayedTo: relayTo, | 						RelayedTo: relayTo, | ||||||
|  | 						Address:   peer.PrimaryAddress(), | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -74,7 +74,7 @@ var WgIFaceMap = make(map[string]map[string]*Conn) | |||||||
|  |  | ||||||
| var PeerKeyHashMap = make(map[string]RemotePeer) | var PeerKeyHashMap = make(map[string]RemotePeer) | ||||||
|  |  | ||||||
| var WgIfaceKeyMap = make(map[string]struct{}) | var WgIfaceKeyMap = make(map[string]RemotePeer) | ||||||
|  |  | ||||||
| var RelayPeerMap = make(map[string]map[string]RemotePeer) | var RelayPeerMap = make(map[string]map[string]RemotePeer) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -13,6 +13,7 @@ import ( | |||||||
| 	"github.com/gravitl/netmaker/nm-proxy/common" | 	"github.com/gravitl/netmaker/nm-proxy/common" | ||||||
| 	"github.com/gravitl/netmaker/nm-proxy/packet" | 	"github.com/gravitl/netmaker/nm-proxy/packet" | ||||||
| 	peerpkg "github.com/gravitl/netmaker/nm-proxy/peer" | 	peerpkg "github.com/gravitl/netmaker/nm-proxy/peer" | ||||||
|  | 	"github.com/gravitl/netmaker/nm-proxy/proxy" | ||||||
| 	"github.com/gravitl/netmaker/nm-proxy/wg" | 	"github.com/gravitl/netmaker/nm-proxy/wg" | ||||||
| 	"golang.zx2c4.com/wireguard/wgctrl/wgtypes" | 	"golang.zx2c4.com/wireguard/wgctrl/wgtypes" | ||||||
| ) | ) | ||||||
| @@ -225,7 +226,16 @@ func (m *ManagerAction) AddInterfaceToProxy() error { | |||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	log.Printf("wg: %+v\n", wgInterface) | 	log.Printf("wg: %+v\n", wgInterface) | ||||||
|  | 	wgListenAddr, err := proxy.GetInterfaceListenAddr(wgInterface.Port) | ||||||
|  | 	if err != nil { | ||||||
|  | 		log.Println("failed to get wg listen addr: ", err) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	common.WgIfaceKeyMap[fmt.Sprintf("%x", md5.Sum([]byte(wgInterface.Device.PublicKey.String())))] = common.RemotePeer{ | ||||||
|  | 		PeerKey:   wgInterface.Device.PublicKey.String(), | ||||||
|  | 		Interface: wgInterface.Name, | ||||||
|  | 		Endpoint:  wgListenAddr, | ||||||
|  | 	} | ||||||
| 	for _, peerI := range m.Payload.Peers { | 	for _, peerI := range m.Payload.Peers { | ||||||
| 		peerConf := m.Payload.PeerMap[peerI.PublicKey.String()] | 		peerConf := m.Payload.PeerMap[peerI.PublicKey.String()] | ||||||
| 		if peerI.Endpoint == nil && !(peerConf.IsAttachedExtClient || peerConf.IsExtClient) { | 		if peerI.Endpoint == nil && !(peerConf.IsAttachedExtClient || peerConf.IsExtClient) { | ||||||
|   | |||||||
| @@ -1,7 +1,6 @@ | |||||||
| package peer | package peer | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"crypto/md5" |  | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"log" | 	"log" | ||||||
| @@ -105,6 +104,6 @@ func AddNewPeer(wgInterface *wg.WGIface, peer *wgtypes.PeerConfig, | |||||||
| 		common.WgIFaceMap[wgInterface.Name] = make(map[string]*common.Conn) | 		common.WgIFaceMap[wgInterface.Name] = make(map[string]*common.Conn) | ||||||
| 		common.WgIFaceMap[wgInterface.Name][peer.PublicKey.String()] = &peerConn | 		common.WgIFaceMap[wgInterface.Name][peer.PublicKey.String()] = &peerConn | ||||||
| 	} | 	} | ||||||
| 	common.WgIfaceKeyMap[fmt.Sprintf("%x", md5.Sum([]byte(wgInterface.Device.PublicKey.String())))] = struct{}{} |  | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|   | |||||||
| @@ -125,9 +125,22 @@ func (p *ProxyServer) Listen(ctx context.Context) { | |||||||
|  |  | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
|  | 				continue | ||||||
|  |  | ||||||
| 			} | 			} | ||||||
|  | 			// forward to all interfaces | ||||||
|  | 			for _, ifaceCfg := range common.WgIfaceKeyMap { | ||||||
|  | 				log.Println("###--------> Forwarding Unknown PKT to ", ifaceCfg.Interface) | ||||||
|  | 				conn, err := net.DialUDP("udp", source, ifaceCfg.Endpoint) | ||||||
|  | 				if err == nil { | ||||||
|  | 					_, err := conn.Write(buffer[:n]) | ||||||
|  | 					if err != nil { | ||||||
|  | 						log.Println("Failed to forward the unknown pkt to ifcace: ", ifaceCfg.Interface, err) | ||||||
|  | 					} | ||||||
|  | 					conn.Close() | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 	} | 	} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Abhishek Kondur
					Abhishek Kondur