making dual stack addressing work client side

This commit is contained in:
afeiszli
2022-04-25 21:16:47 -04:00
parent b03b4cfcff
commit 894fd1f5bd
4 changed files with 46 additions and 15 deletions

View File

@@ -150,9 +150,22 @@ func initWireguard(node *models.Node, privkey string, peers []wgtypes.PeerConfig
logger.Log(0, "failed to get network"+err.Error())
return err
}
net := strings.Split(network.AddressRange, "/")
mask := net[len(net)-1]
setKernelDevice(ifacename, node.Address, mask)
var address4 string
var address6 string
var mask4 string
var mask6 string
if network.AddressRange != "" {
net := strings.Split(network.AddressRange, "/")
mask4 = net[len(net)-1]
address4 = node.Address
}
if network.AddressRange6 != "" {
net := strings.Split(network.AddressRange6, "/")
mask6 = net[len(net)-1]
address6 = node.Address
}
setKernelDevice(ifacename, address4, mask4, address6, mask6)
}
nodeport := int(node.ListenPort)
@@ -247,7 +260,7 @@ func initWireguard(node *models.Node, privkey string, peers []wgtypes.PeerConfig
return err
}
func setKernelDevice(ifacename, address, mask string) error {
func setKernelDevice(ifacename, address4, mask4, address6, mask6 string) error {
ipExec, err := exec.LookPath("ip")
if err != nil {
return err
@@ -256,7 +269,12 @@ func setKernelDevice(ifacename, address, mask string) error {
// == best effort ==
ncutils.RunCmd("ip link delete dev "+ifacename, false)
ncutils.RunCmd(ipExec+" link add dev "+ifacename+" type wireguard", true)
ncutils.RunCmd(ipExec+" address add dev "+ifacename+" "+address+"/"+mask, true) // this was a bug waiting to happen
if address4 != "" {
ncutils.RunCmd(ipExec+" address add dev "+ifacename+" "+address4+"/"+mask4, true)
}
if address6 != "" {
ncutils.RunCmd(ipExec+" address add dev "+ifacename+" "+address6+"/"+mask6, true)
}
return nil
}