From 2745a3e1d15a35492ce98f8d20ee8d1d242020d0 Mon Sep 17 00:00:00 2001 From: Trumeet Date: Tue, 30 Mar 2021 21:51:51 -0700 Subject: fix(central): wg-quick does not support IP switching --- .../dn42peering/manage/ManagementProvision.java | 24 ++++++++++++---------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/central/src/main/java/moe/yuuta/dn42peering/manage/ManagementProvision.java b/central/src/main/java/moe/yuuta/dn42peering/manage/ManagementProvision.java index 5c9b531..11ec50f 100644 --- a/central/src/main/java/moe/yuuta/dn42peering/manage/ManagementProvision.java +++ b/central/src/main/java/moe/yuuta/dn42peering/manage/ManagementProvision.java @@ -29,20 +29,22 @@ class ManagementProvision { // This will cause unnecessary wastes. boolean canReload = inPeer.getType() == existingPeer.getType() && inPeer.getNode() == existingPeer.getNode(); - // wg-quick does not support switching local IP addresses. - // However, switch between link local addresses and real IPv6 addresses require the change of - // local v6 address. Therefore, in such cases, we have to do a full re-provision. + // wg-quick does not support switching IP addresses. + // TODO: Move reload detection to agents. if(canReload && // Only check if no other factors prevent us from reloading. inPeer.getType() == Peer.VPNType.WIREGUARD && existingPeer.getType() == Peer.VPNType.WIREGUARD) { - try { - final boolean existingLL = existingPeer.isIPv6LinkLocal(); - final boolean newLL = inPeer.isIPv6LinkLocal(); - if(existingLL != newLL) { - canReload = false; - } - } catch (IOException e) { - return Future.failedFuture(e); + if(!inPeer.getIpv4().equals(existingPeer.getIpv6())) { + canReload = false; + } + if(inPeer.getIpv6() != null && !inPeer.getIpv6().equals(existingPeer.getIpv6())) { + try { + // LL addrs does not have anything to do with ifconfig. + if(inPeer.isIPv6LinkLocal() && existingPeer.isIPv6LinkLocal()) + canReload = true; + else + canReload = false; + } catch (IOException ignored) {} } } // wg-quick will also not clear EndPoint setting if we just reload it. -- cgit v1.2.3