From 2006fae0e3b886ce154256714fc5dd8715af078b Mon Sep 17 00:00:00 2001 From: Drew Wells Date: Wed, 8 Apr 2026 10:04:35 -0500 Subject: [PATCH] fix(wireguard): support IPv6 address formatting from config files (#3273) --- .../configuration/sources/files/wireguard.go | 16 ++++++++++------ .../sources/files/wireguard_test.go | 5 +++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/internal/configuration/sources/files/wireguard.go b/internal/configuration/sources/files/wireguard.go index 0b86f662..3c3f1519 100644 --- a/internal/configuration/sources/files/wireguard.go +++ b/internal/configuration/sources/files/wireguard.go @@ -3,6 +3,7 @@ package files import ( "errors" "fmt" + "net" "os" "path/filepath" "regexp" @@ -82,12 +83,15 @@ func parseWireguardPeerSection(peerSection *ini.Section) ( publicKey = getINIKeyFromSection(peerSection, "PublicKey") endpoint := getINIKeyFromSection(peerSection, "Endpoint") if endpoint != nil { - parts := strings.Split(*endpoint, ":") - endpointIP = &parts[0] - const partsWithPort = 2 - if len(parts) >= partsWithPort { - endpointPort = new(string) - *endpointPort = strings.Join(parts[1:], ":") + host, port, err := net.SplitHostPort(*endpoint) + if err == nil { + endpointIP = &host + // IPv6 hosts contain colons; port is managed by the provider for those + if !strings.Contains(host, ":") { + endpointPort = &port + } + } else { + endpointIP = endpoint } } diff --git a/internal/configuration/sources/files/wireguard_test.go b/internal/configuration/sources/files/wireguard_test.go index 53d9c838..d934ddd5 100644 --- a/internal/configuration/sources/files/wireguard_test.go +++ b/internal/configuration/sources/files/wireguard_test.go @@ -179,6 +179,11 @@ Endpoint = 1.2.3.4:51820`, endpointIP: ptrTo("1.2.3.4"), endpointPort: ptrTo("51820"), }, + "ipv6_endpoint": { + iniData: `[Peer] +Endpoint = [2a02:bbbb:aaaa:8075::10]:51820`, + endpointIP: ptrTo("2a02:bbbb:aaaa:8075::10"), + }, } for testName, testCase := range testCases {