From 56e766d329d928ca0f6739fac2d081f211628003 Mon Sep 17 00:00:00 2001 From: ntozaks Date: Wed, 23 Jul 2025 09:37:14 -0600 Subject: [PATCH 1/7] endpoint DNS to config, serve resolve --- src/cmd/serve.go | 7 ++++++- src/peer/config.go | 20 +++++++++++++++----- src/peer/peer_config.go | 25 ++++++++++++++++++++----- 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/cmd/serve.go b/src/cmd/serve.go index 2639c2a..14aa81f 100644 --- a/src/cmd/serve.go +++ b/src/cmd/serve.go @@ -11,6 +11,7 @@ import ( "strings" "sync" "time" + "net" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -353,7 +354,11 @@ func (c serveCmdConfig) Run() { Peers: []peer.PeerConfigArgs{ { PublicKey: viper.GetString("Relay.Peer.publickey"), - Endpoint: viper.GetString("Relay.Peer.endpoint"), + Endpoint: func() string { + endpoint, err := net.ResolveUDPAddr("udp", (viper.GetString("Relay.Peer.endpoint"))) + check("failed to resolve DNS", err) + return endpoint.String() + }(), PersistentKeepaliveInterval: func() int { if len(viper.GetString("Relay.Peer.endpoint")) > 0 { return viper.GetInt("Relay.Peer.keepalive") diff --git a/src/peer/config.go b/src/peer/config.go index c8d5968..0221dc9 100644 --- a/src/peer/config.go +++ b/src/peer/config.go @@ -378,12 +378,22 @@ func (c *Config) GetPeerPublicKey(i int) string { func (c *Config) GetPeerEndpoint(i int) string { if len(c.peers) > i { - endpoint := c.peers[i].config.Endpoint - if endpoint != nil { - return endpoint.String() - } + if len(c.peers[i].endpoint) > 0 { + endpoint := c.peers[i].endpoint + if endpoint != "" { + return endpoint + } + + return "" - return "" + } else { + endpoint := c.peers[i].config.Endpoint + if endpoint != nil { + return endpoint.String() + } + + return "" + } } return "" diff --git a/src/peer/peer_config.go b/src/peer/peer_config.go index 7cc4064..b802775 100644 --- a/src/peer/peer_config.go +++ b/src/peer/peer_config.go @@ -8,6 +8,7 @@ import ( "net/netip" "strings" "time" + "regexp" "golang.zx2c4.com/wireguard/wgctrl/wgtypes" ) @@ -15,6 +16,7 @@ import ( type PeerConfig struct { config wgtypes.PeerConfig privateKey *wgtypes.Key + endpoint string nickname string } @@ -170,12 +172,19 @@ func (p *PeerConfig) SetPresharedKey(presharedKey string) error { } func (p *PeerConfig) SetEndpoint(addr string) error { - endpoint, err := net.ResolveUDPAddr("udp", addr) - if err != nil { - return err + host, _, _ := net.SplitHostPort(addr) + ip := regexp.MustCompile(`\d`).MatchString(host) + if ip { + endpoint, err := net.ResolveUDPAddr("udp", addr) + if err != nil { + return err + } + p.config.Endpoint = endpoint + return nil + } else { + endpoint := addr + p.endpoint = endpoint } - - p.config.Endpoint = endpoint return nil } @@ -275,6 +284,9 @@ func (p *PeerConfig) AsFile() string { if p.config.Endpoint != nil { s.WriteString(fmt.Sprintf("Endpoint = %s\n", p.config.Endpoint.String())) } + if p.endpoint != "" { + s.WriteString(fmt.Sprintf("Endpoint = %s\n", p.endpoint)) + } if p.config.PersistentKeepaliveInterval != nil { s.WriteString(fmt.Sprintf("PersistentKeepalive = %d\n", *p.config.PersistentKeepaliveInterval/time.Second)) } @@ -289,6 +301,9 @@ func (p *PeerConfig) AsIPC() string { if p.config.Endpoint != nil { s.WriteString(fmt.Sprintf("endpoint=%s\n", p.config.Endpoint.String())) } + if p.endpoint != "" { + s.WriteString(fmt.Sprintf("Endpoint = %s\n", p.endpoint)) + } for _, a := range p.config.AllowedIPs { s.WriteString(fmt.Sprintf("allowed_ip=%s\n", a.String())) } From a4c500ef385d9a95b40cf374460abf26d8044e02 Mon Sep 17 00:00:00 2001 From: ntozaks Date: Wed, 23 Jul 2025 14:38:39 -0600 Subject: [PATCH 2/7] updating logic --- src/peer/peer_config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/peer/peer_config.go b/src/peer/peer_config.go index b802775..5050bd1 100644 --- a/src/peer/peer_config.go +++ b/src/peer/peer_config.go @@ -173,7 +173,7 @@ func (p *PeerConfig) SetPresharedKey(presharedKey string) error { func (p *PeerConfig) SetEndpoint(addr string) error { host, _, _ := net.SplitHostPort(addr) - ip := regexp.MustCompile(`\d`).MatchString(host) + ip := regexp.MustCompile(`^[0-9]+$`).MatchString(host) if ip { endpoint, err := net.ResolveUDPAddr("udp", addr) if err != nil { @@ -302,7 +302,7 @@ func (p *PeerConfig) AsIPC() string { s.WriteString(fmt.Sprintf("endpoint=%s\n", p.config.Endpoint.String())) } if p.endpoint != "" { - s.WriteString(fmt.Sprintf("Endpoint = %s\n", p.endpoint)) + s.WriteString(fmt.Sprintf("endpoint=%s\n", p.endpoint)) } for _, a := range p.config.AllowedIPs { s.WriteString(fmt.Sprintf("allowed_ip=%s\n", a.String())) From ea02f08d898c9c9fab9261cb40aee48ce870947a Mon Sep 17 00:00:00 2001 From: sankofa Date: Wed, 23 Jul 2025 18:21:13 -0600 Subject: [PATCH 3/7] fixing outbound logic --- src/cmd/serve.go | 14 +++++++++----- src/peer/peer_config.go | 24 ++++++++++++------------ 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/cmd/serve.go b/src/cmd/serve.go index 14aa81f..a592f6a 100644 --- a/src/cmd/serve.go +++ b/src/cmd/serve.go @@ -5,13 +5,13 @@ import ( "fmt" "io" "log" + "net" "net/netip" "os" "slices" "strings" "sync" "time" - "net" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -354,10 +354,14 @@ func (c serveCmdConfig) Run() { Peers: []peer.PeerConfigArgs{ { PublicKey: viper.GetString("Relay.Peer.publickey"), - Endpoint: func() string { - endpoint, err := net.ResolveUDPAddr("udp", (viper.GetString("Relay.Peer.endpoint"))) - check("failed to resolve DNS", err) - return endpoint.String() + Endpoint: func() string { + if len(viper.GetString("Relay.Peer.endpoint")) > 0 { + endpoint, err := net.ResolveUDPAddr("udp", (viper.GetString("Relay.Peer.endpoint"))) + check("failed to resolve endpoint DNS name"+Endpoint, err) + return endpoint.String() + } else { + return "" + } }(), PersistentKeepaliveInterval: func() int { if len(viper.GetString("Relay.Peer.endpoint")) > 0 { diff --git a/src/peer/peer_config.go b/src/peer/peer_config.go index 5050bd1..97bf7ff 100644 --- a/src/peer/peer_config.go +++ b/src/peer/peer_config.go @@ -8,7 +8,6 @@ import ( "net/netip" "strings" "time" - "regexp" "golang.zx2c4.com/wireguard/wgctrl/wgtypes" ) @@ -89,7 +88,7 @@ func GetPeerConfig(args PeerConfigArgs) (PeerConfig, error) { return PeerConfig{}, err } } - + if args.Nickname != "" { err = c.SetNickname(args.Nickname) if err != nil { @@ -111,7 +110,7 @@ func NewPeerConfig() (PeerConfig, error) { PublicKey: privateKey.PublicKey(), }, privateKey: &privateKey, - nickname: "", + nickname: "", }, nil } @@ -172,18 +171,19 @@ func (p *PeerConfig) SetPresharedKey(presharedKey string) error { } func (p *PeerConfig) SetEndpoint(addr string) error { - host, _, _ := net.SplitHostPort(addr) - ip := regexp.MustCompile(`^[0-9]+$`).MatchString(host) - if ip { + host, _, err := net.SplitHostPort(addr) + if err != nil { + return err + } + ip := net.ParseIP(host) + if ip != nil { endpoint, err := net.ResolveUDPAddr("udp", addr) if err != nil { return err } p.config.Endpoint = endpoint - return nil } else { - endpoint := addr - p.endpoint = endpoint + p.endpoint = addr } return nil } @@ -267,13 +267,13 @@ func (p *PeerConfig) SetNickname(nickname string) error { func (p *PeerConfig) AsFile() string { var s strings.Builder s.WriteString("[Peer]\n") - + if p.nickname != "" { s.WriteString(fmt.Sprintf("%s Nickname = %s\n", CUSTOM_PREFIX, p.nickname)) } - + s.WriteString(fmt.Sprintf("PublicKey = %s\n", p.config.PublicKey.String())) - + ips := []string{} for _, a := range p.config.AllowedIPs { ips = append(ips, a.String()) From 90490cf9df63a662425787329351d02ce15834f3 Mon Sep 17 00:00:00 2001 From: Adam <37312852+Aptimex@users.noreply.github.com> Date: Thu, 24 Jul 2025 11:16:43 -0600 Subject: [PATCH 4/7] Fix error message variable --- src/cmd/serve.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/serve.go b/src/cmd/serve.go index a592f6a..f9ffc36 100644 --- a/src/cmd/serve.go +++ b/src/cmd/serve.go @@ -357,7 +357,7 @@ func (c serveCmdConfig) Run() { Endpoint: func() string { if len(viper.GetString("Relay.Peer.endpoint")) > 0 { endpoint, err := net.ResolveUDPAddr("udp", (viper.GetString("Relay.Peer.endpoint"))) - check("failed to resolve endpoint DNS name"+Endpoint, err) + check("failed to resolve endpoint DNS name for '" + viper.GetString("Relay.Peer.endpoint") + "'", err) return endpoint.String() } else { return "" From b4ac029cfd73f0473e6fb051528dd893bf076d51 Mon Sep 17 00:00:00 2001 From: ntozaks Date: Mon, 28 Jul 2025 12:21:53 -0600 Subject: [PATCH 5/7] endpoint dns to JSON --- src/peer/config.go | 23 +++++++---------------- src/peer/peer_config.go | 4 ++++ 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/peer/config.go b/src/peer/config.go index 0221dc9..822994a 100644 --- a/src/peer/config.go +++ b/src/peer/config.go @@ -378,25 +378,16 @@ func (c *Config) GetPeerPublicKey(i int) string { func (c *Config) GetPeerEndpoint(i int) string { if len(c.peers) > i { - if len(c.peers[i].endpoint) > 0 { - endpoint := c.peers[i].endpoint - if endpoint != "" { - return endpoint - } - - return "" - - } else { - endpoint := c.peers[i].config.Endpoint - if endpoint != nil { - return endpoint.String() - } + endpoint := c.peers[i].endpoint + if endpoint != "" { + return endpoint + } - return "" + endpoint := c.peers[i].config.Endpoint + if endpoint != nil { + return endpoint.String() } } - - return "" } func (c *Config) GetLocalhostIP() string { diff --git a/src/peer/peer_config.go b/src/peer/peer_config.go index 97bf7ff..d47addf 100644 --- a/src/peer/peer_config.go +++ b/src/peer/peer_config.go @@ -16,6 +16,7 @@ type PeerConfig struct { config wgtypes.PeerConfig privateKey *wgtypes.Key endpoint string + endpointDNS string nickname string } @@ -23,6 +24,7 @@ type peerConfigJSON struct { Config wgtypes.PeerConfig PrivateKey *wgtypes.Key Nickname string + EndpointDNS string } type PeerConfigArgs struct { @@ -119,6 +121,7 @@ func (p *PeerConfig) MarshalJSON() ([]byte, error) { p.config, p.privateKey, p.nickname, + p.endpointDNS }) } @@ -133,6 +136,7 @@ func (p *PeerConfig) UnmarshalJSON(b []byte) error { p.config = tmp.Config p.privateKey = tmp.PrivateKey p.nickname = tmp.Nickname + p.endpointDNS = tmp.EndpointDNS return nil } From 833a86eb141fded69fd595a31a896f3605ab3122 Mon Sep 17 00:00:00 2001 From: ntozaks Date: Mon, 28 Jul 2025 12:54:06 -0600 Subject: [PATCH 6/7] fixing syntax --- src/peer/config.go | 3 ++- src/peer/peer_config.go | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/peer/config.go b/src/peer/config.go index 822994a..350f8d6 100644 --- a/src/peer/config.go +++ b/src/peer/config.go @@ -382,12 +382,13 @@ func (c *Config) GetPeerEndpoint(i int) string { if endpoint != "" { return endpoint } - + } else { endpoint := c.peers[i].config.Endpoint if endpoint != nil { return endpoint.String() } } + return "" } func (c *Config) GetLocalhostIP() string { diff --git a/src/peer/peer_config.go b/src/peer/peer_config.go index d47addf..112ceb8 100644 --- a/src/peer/peer_config.go +++ b/src/peer/peer_config.go @@ -121,7 +121,7 @@ func (p *PeerConfig) MarshalJSON() ([]byte, error) { p.config, p.privateKey, p.nickname, - p.endpointDNS + p.endpointDNS, }) } From b35c9ed169905f95914b955ad9b391957c39e6c8 Mon Sep 17 00:00:00 2001 From: ntozaks Date: Tue, 29 Jul 2025 16:33:43 -0600 Subject: [PATCH 7/7] fixing var names and logic --- src/peer/config.go | 7 +++---- src/peer/peer_config.go | 11 +++++------ 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/peer/config.go b/src/peer/config.go index 350f8d6..d9c100a 100644 --- a/src/peer/config.go +++ b/src/peer/config.go @@ -378,11 +378,10 @@ func (c *Config) GetPeerPublicKey(i int) string { func (c *Config) GetPeerEndpoint(i int) string { if len(c.peers) > i { - endpoint := c.peers[i].endpoint - if endpoint != "" { - return endpoint + endpointDNS := c.peers[i].endpointDNS + if endpointDNS != "" { + return endpointDNS } - } else { endpoint := c.peers[i].config.Endpoint if endpoint != nil { return endpoint.String() diff --git a/src/peer/peer_config.go b/src/peer/peer_config.go index 112ceb8..0b20e6a 100644 --- a/src/peer/peer_config.go +++ b/src/peer/peer_config.go @@ -15,7 +15,6 @@ import ( type PeerConfig struct { config wgtypes.PeerConfig privateKey *wgtypes.Key - endpoint string endpointDNS string nickname string } @@ -187,7 +186,7 @@ func (p *PeerConfig) SetEndpoint(addr string) error { } p.config.Endpoint = endpoint } else { - p.endpoint = addr + p.endpointDNS = addr } return nil } @@ -288,8 +287,8 @@ func (p *PeerConfig) AsFile() string { if p.config.Endpoint != nil { s.WriteString(fmt.Sprintf("Endpoint = %s\n", p.config.Endpoint.String())) } - if p.endpoint != "" { - s.WriteString(fmt.Sprintf("Endpoint = %s\n", p.endpoint)) + if p.endpointDNS != "" { + s.WriteString(fmt.Sprintf("Endpoint = %s\n", p.endpointDNS)) } if p.config.PersistentKeepaliveInterval != nil { s.WriteString(fmt.Sprintf("PersistentKeepalive = %d\n", *p.config.PersistentKeepaliveInterval/time.Second)) @@ -305,8 +304,8 @@ func (p *PeerConfig) AsIPC() string { if p.config.Endpoint != nil { s.WriteString(fmt.Sprintf("endpoint=%s\n", p.config.Endpoint.String())) } - if p.endpoint != "" { - s.WriteString(fmt.Sprintf("endpoint=%s\n", p.endpoint)) + if p.endpointDNS != "" { + s.WriteString(fmt.Sprintf("endpoint=%s\n", p.endpointDNS)) } for _, a := range p.config.AllowedIPs { s.WriteString(fmt.Sprintf("allowed_ip=%s\n", a.String()))