fix #2970 parsing IPv6 address in wireguard peers configure

This commit is contained in:
lunafe 2024-02-12 15:03:29 +08:00 committed by yuhan6665
parent 7c9e3f97f1
commit b091076bae

View file

@ -254,7 +254,6 @@ func (h *Handler) makeVirtualTun(bind *netBindClient) (Tunnel, error) {
return t, nil return t, nil
} }
// serialize the config into an IPC request // serialize the config into an IPC request
func (h *Handler) createIPCRequest(bind *netBindClient, conf *DeviceConfig) string { func (h *Handler) createIPCRequest(bind *netBindClient, conf *DeviceConfig) string {
var request strings.Builder var request strings.Builder
@ -275,8 +274,11 @@ func (h *Handler) createIPCRequest(bind *netBindClient, conf *DeviceConfig) stri
request.WriteString(fmt.Sprintf("preshared_key=%s\n", peer.PreSharedKey)) request.WriteString(fmt.Sprintf("preshared_key=%s\n", peer.PreSharedKey))
} }
split := strings.Split(peer.Endpoint, ":") address, port, err := net.SplitHostPort(peer.Endpoint)
addr := net.ParseAddress(split[0]) if err != nil {
newError("failed to split endpoint ", peer.Endpoint, " into address and port").AtError().WriteToLog()
}
addr := net.ParseAddress(address)
if addr.Family().IsDomain() { if addr.Family().IsDomain() {
dialerIp := bind.dialer.DestIpAddress() dialerIp := bind.dialer.DestIpAddress()
if dialerIp != nil { if dialerIp != nil {
@ -306,7 +308,7 @@ func (h *Handler) createIPCRequest(bind *netBindClient, conf *DeviceConfig) stri
} }
if peer.Endpoint != "" { if peer.Endpoint != "" {
request.WriteString(fmt.Sprintf("endpoint=%s:%s\n", addr, split[1])) request.WriteString(fmt.Sprintf("endpoint=%s:%s\n", addr, port))
} }
for _, ip := range peer.AllowedIps { for _, ip := range peer.AllowedIps {