From 566541bea2d51bc4edca23c7a1dc8e0eb3e3db82 Mon Sep 17 00:00:00 2001 From: Daniel Ding Date: Mon, 29 Sep 2025 19:26:36 +0800 Subject: [PATCH] fix: correct openvpn clients --- pkg/config/network.go | 5 +--- pkg/config/openvpn.go | 60 +++++++++++++++++++------------------------ pkg/config/switch.go | 3 +-- 3 files changed, 28 insertions(+), 40 deletions(-) diff --git a/pkg/config/network.go b/pkg/config/network.go index 8da6edf..5256a2b 100755 --- a/pkg/config/network.go +++ b/pkg/config/network.go @@ -90,10 +90,7 @@ func (n *Network) Correct(sw *Switch) { CorrectRoutes(n.Routes, ipAddr) if n.OpenVPN != nil { - n.OpenVPN.Network = n.Name - obj := DefaultOpenVPN() - n.OpenVPN.Merge(obj) - n.OpenVPN.Correct(sw) + n.OpenVPN.Correct(sw.AddrPool, n.Name) } for key, value := range n.FindHop { diff --git a/pkg/config/openvpn.go b/pkg/config/openvpn.go index 1fb2ebf..6c77c82 100755 --- a/pkg/config/openvpn.go +++ b/pkg/config/openvpn.go @@ -50,10 +50,6 @@ var defaultVpn = &OpenVPN{ Script: "/usr/bin/openlan", } -func DefaultOpenVPN() *OpenVPN { - return defaultVpn -} - func (o *OpenVPN) AuthBin(obj *OpenVPN) string { bin := obj.Script bin += " -l " + obj.Url @@ -62,63 +58,59 @@ func (o *OpenVPN) AuthBin(obj *OpenVPN) string { return bin } -func (o *OpenVPN) Merge(obj *OpenVPN) { - if obj == nil { - return - } - if o.Network == "" { - o.Network = obj.Network - } +func (o *OpenVPN) Correct(pool, network string) { + o.Network = network + if o.Auth == "" { - o.Auth = obj.Auth + o.Auth = defaultVpn.Auth } if o.Protocol == "" { - o.Protocol = obj.Protocol + o.Protocol = defaultVpn.Protocol } if o.DhPem == "" { - o.DhPem = obj.DhPem + o.DhPem = defaultVpn.DhPem } if o.RootCa == "" { - o.RootCa = obj.RootCa + o.RootCa = defaultVpn.RootCa } if o.ServerCrt == "" { - o.ServerCrt = obj.ServerCrt + o.ServerCrt = defaultVpn.ServerCrt } if o.ServerKey == "" { - o.ServerKey = obj.ServerKey + o.ServerKey = defaultVpn.ServerKey } if o.TlsAuth == "" { - o.TlsAuth = obj.TlsAuth + o.TlsAuth = defaultVpn.TlsAuth } if o.Cipher == "" { - o.Cipher = obj.Cipher + o.Cipher = defaultVpn.Cipher + } + + if o.Script == "" { + o.Script = o.AuthBin(defaultVpn) } - if len(o.Routes) == 0 { - o.Routes = append(o.Routes, obj.Routes...) - } - if len(o.Push) == 0 { - o.Push = append(o.Push, obj.Push...) - } - if o.Script == "" { - o.Script = o.AuthBin(obj) - } - if len(o.Clients) == 0 { - o.Clients = append(o.Clients, obj.Clients...) - } -} -func (o *OpenVPN) Correct(sw *Switch) { o.Directory = VarDir("openvpn", o.Network) if !strings.Contains(o.Listen, ":") { o.Listen += ":1194" } + _, port := libol.GetHostPort(o.Listen) o.Device = fmt.Sprintf("tun%s", port) - pool := sw.AddrPool + if o.Subnet == "" { value, _ := strconv.Atoi(port) o.Subnet = fmt.Sprintf("%s.%d.0/24", pool, value&0xff) } + + for _, c := range o.Clients { + if c.Name == "" || c.Address == "" { + continue + } + if !strings.Contains(c.Name, "@") { + c.Name = c.Name + "@" + o.Network + } + } } func (o *OpenVPN) AddRedirectDef1() bool { diff --git a/pkg/config/switch.go b/pkg/config/switch.go index 6b7290b..e368af4 100755 --- a/pkg/config/switch.go +++ b/pkg/config/switch.go @@ -127,8 +127,7 @@ func (s *Switch) Correct() { } s.Http.Correct() - vpn := DefaultOpenVPN() - vpn.Url = s.Http.GetUrl() + defaultVpn.Url = s.Http.GetUrl() if s.Timeout == 0 { s.Timeout = 120