浏览代码

fix #2970 parsing IPv6 address in wireguard peers configure

lunafe 1 年之前
父节点
当前提交
b091076bae
共有 1 个文件被更改,包括 6 次插入4 次删除
  1. 6 4
      proxy/wireguard/client.go

+ 6 - 4
proxy/wireguard/client.go

@@ -254,7 +254,6 @@ func (h *Handler) makeVirtualTun(bind *netBindClient) (Tunnel, error) {
 	return t, nil
 }
 
-
 // serialize the config into an IPC request
 func (h *Handler) createIPCRequest(bind *netBindClient, conf *DeviceConfig) string {
 	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))
 		}
 
-		split := strings.Split(peer.Endpoint, ":")
-		addr := net.ParseAddress(split[0])
+		address, port, err := net.SplitHostPort(peer.Endpoint)
+		if err != nil {
+			newError("failed to split endpoint ", peer.Endpoint, " into address and port").AtError().WriteToLog()
+		}
+		addr := net.ParseAddress(address)
 		if addr.Family().IsDomain() {
 			dialerIp := bind.dialer.DestIpAddress()
 			if dialerIp != nil {
@@ -306,7 +308,7 @@ func (h *Handler) createIPCRequest(bind *netBindClient, conf *DeviceConfig) stri
 		}
 
 		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 {