From 4292a500aedd65e6ffac9605f1a1b7c78397a227 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Sat, 10 Jun 2023 20:23:21 +0000 Subject: [PATCH] fix(wireguard): delete existing Wireguard link before adding it --- internal/wireguard/run.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/internal/wireguard/run.go b/internal/wireguard/run.go index e9095766..0c933a1f 100644 --- a/internal/wireguard/run.go +++ b/internal/wireguard/run.go @@ -168,6 +168,23 @@ func setupKernelSpace(ctx context.Context, Name: interfaceName, MTU: mtu, } + links, err := netLinker.LinkList() + if err != nil { + return link, nil, fmt.Errorf("listing links: %w", err) + } + + // Cleanup any previous Wireguard interface with the same name + // See https://github.com/qdm12/gluetun/issues/1669 + for _, link := range links { + if link.Type == "wireguard" && link.Name == interfaceName { + err = netLinker.LinkDel(link) + if err != nil { + return link, nil, fmt.Errorf("deleting previous Wireguard link %s: %w", + interfaceName, err) + } + } + } + linkIndex, err := netLinker.LinkAdd(link) if err != nil { return link, nil, fmt.Errorf("%w: %s", ErrAddLink, err)