package main import ( "context" "log" "net" "time" pb "git.h3cx.dev/NulTNL/control-plane-proto-go" "golang.zx2c4.com/wireguard/wgctrl" "golang.zx2c4.com/wireguard/wgctrl/wgtypes" "google.golang.org/grpc" ) type server struct { pb.UnimplementedControlServiceServer wgClient *wgctrl.Client } func (s *server) Ping(ctx context.Context, req *pb.PingRequest) (*pb.PingResponse, error) { return &pb.PingResponse{Reply: "Pong: " + req.Message}, nil } func main() { client, _ := wgctrl.New() defer client.Close() lis, err := net.Listen("tcp", ":50051") if err != nil { log.Fatalf("failed to listen: %v", err) } grpcServer := grpc.NewServer() srv := &server{wgClient: client} pb.RegisterControlServiceServer(grpcServer, srv) log.Println("gRPC server running on :50051") if err := grpcServer.Serve(lis); err != nil { log.Fatalf("failed to server: %v", err) } } func newcfg(client *wgctrl.Client, pubkey string) { peerPubKey, err := wgtypes.ParseKey(pubkey) if err != nil { log.Fatalf("invalid peer public key: %v", err) } allowedIP1 := net.IPNet{IP: net.ParseIP("10.0.0.3"), Mask: net.CIDRMask(32, 32)} persistentKeepalive := 25 * time.Second peerCfg := wgtypes.PeerConfig{ PublicKey: peerPubKey, AllowedIPs: []net.IPNet{allowedIP1}, PersistentKeepaliveInterval: &persistentKeepalive, } cfg := wgtypes.Config{ Peers: []wgtypes.PeerConfig{peerCfg}, } if err := client.ConfigureDevice("wg0", cfg); err != nil { log.Fatalf("failed to add peer: %v", err) } log.Println("Peer added") }