Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3973fa72a5 |
+1
-1
@@ -108,7 +108,7 @@ func (*inventory) renderRingOneZone(out *tools.LazyBuffer, r *cluster.Region, z
|
||||
z.ForEachMachine(func(m *cluster.Machine) bool {
|
||||
addr := m.RingOneAddress()
|
||||
cidr := netip.PrefixFrom(addr, 32)
|
||||
_ = out.Printf("%s\t\t%s\n", cidr, m.Name)
|
||||
_ = out.Printf("%s\t\t%s-%v\n", cidr, m.Name, 1)
|
||||
return false
|
||||
})
|
||||
return nil
|
||||
|
||||
+49
-5
@@ -191,17 +191,61 @@ func (r *Ring) AddPeer(p *Machine) bool {
|
||||
},
|
||||
}
|
||||
|
||||
r.setRingZeroAllowedIPs(rp)
|
||||
switch {
|
||||
case r.ID == rings.RingZeroID:
|
||||
r.setRingZeroAllowedIPs(rp)
|
||||
case p.IsGateway():
|
||||
r.setRingOneGatewayAllowedIPs(rp)
|
||||
default:
|
||||
r.setRingOneNodeAllowedIPs(rp)
|
||||
}
|
||||
|
||||
r.Peers = append(r.Peers, rp)
|
||||
return true
|
||||
}
|
||||
|
||||
func (*Ring) setRingZeroAllowedIPs(rp *RingPeer) {
|
||||
// ring0 peer
|
||||
func (r *Ring) setRingZeroAllowedIPs(rp *RingPeer) {
|
||||
regionID, zoneID, _, _ := r.Decode(rp.Address)
|
||||
|
||||
// everyone on ring0 is a gateway to ring1
|
||||
subnet, _ := rings.RingOnePrefix(regionID, zoneID)
|
||||
rp.AllowSubnet(subnet)
|
||||
|
||||
// peer
|
||||
rp.AllowCIDR(rp.Address, 32)
|
||||
}
|
||||
|
||||
func (r *Ring) setRingOneGatewayAllowedIPs(rp *RingPeer) {
|
||||
regionID, zoneID, _, _ := r.Decode(rp.Address)
|
||||
|
||||
// peer
|
||||
rp.AllowCIDR(rp.Address, 32)
|
||||
|
||||
// everyone on ring0 has a leg on ring1
|
||||
rp.AllowCIDR(rp.Node.RingOneAddress(), 32)
|
||||
// ring1 gateways connect to all other ring1 networks
|
||||
r.ForEachZone(func(z *Zone) bool {
|
||||
if !z.Is(regionID, zoneID) {
|
||||
subnet := z.RingOnePrefix()
|
||||
rp.AllowSubnet(subnet)
|
||||
}
|
||||
return false
|
||||
})
|
||||
|
||||
// ring1 gateways also connect to all ring0 addresses
|
||||
r.ForEachZone(func(z *Zone) bool {
|
||||
z.ForEachMachine(func(p *Machine) bool {
|
||||
if p.IsGateway() {
|
||||
addr, _ := p.RingZeroAddress()
|
||||
rp.AllowCIDR(addr, 32)
|
||||
}
|
||||
return false
|
||||
})
|
||||
return false
|
||||
})
|
||||
}
|
||||
|
||||
func (*Ring) setRingOneNodeAllowedIPs(rp *RingPeer) {
|
||||
// only to the peer itself
|
||||
rp.AllowCIDR(rp.Address, 32)
|
||||
}
|
||||
|
||||
// ForEachMachine calls a function for each Machine in the ring
|
||||
|
||||
@@ -82,6 +82,13 @@ func (m *Cluster) WriteWireguardConfig(ring rings.RingID) error {
|
||||
switch ring {
|
||||
case rings.RingZeroID:
|
||||
return writeWireguardConfig(m, m, ring)
|
||||
case rings.RingOneID:
|
||||
var err error
|
||||
m.ForEachZone(func(z *Zone) bool {
|
||||
err = writeWireguardConfig(m, z, ring)
|
||||
return err != nil
|
||||
})
|
||||
return err
|
||||
default:
|
||||
return ErrInvalidRing(ring)
|
||||
}
|
||||
@@ -90,12 +97,10 @@ func (m *Cluster) WriteWireguardConfig(ring rings.RingID) error {
|
||||
// WriteWireguardConfig rewrites all wgN.conf on all machines
|
||||
// on the Zone attached to that ring
|
||||
func (z *Zone) WriteWireguardConfig(ring rings.RingID) error {
|
||||
switch ring {
|
||||
case rings.RingZeroID:
|
||||
if ring == rings.RingZeroID || ring == rings.RingOneID {
|
||||
return writeWireguardConfig(z.zones, z.zones, ring)
|
||||
default:
|
||||
return ErrInvalidRing(ring)
|
||||
}
|
||||
return ErrInvalidRing(ring)
|
||||
}
|
||||
|
||||
func writeWireguardConfig(z ZoneIterator, m MachineIterator, ring rings.RingID) error {
|
||||
@@ -156,6 +161,13 @@ func (m *Cluster) SyncWireguardConfig(ring rings.RingID) error {
|
||||
switch ring {
|
||||
case rings.RingZeroID:
|
||||
return syncWireguardConfig(m, m, ring)
|
||||
case rings.RingOneID:
|
||||
var err error
|
||||
m.ForEachZone(func(z *Zone) bool {
|
||||
err = syncWireguardConfig(m, z, ring)
|
||||
return err != nil
|
||||
})
|
||||
return err
|
||||
default:
|
||||
return ErrInvalidRing(ring)
|
||||
}
|
||||
@@ -167,6 +179,8 @@ func (z *Zone) SyncWireguardConfig(ring rings.RingID) error {
|
||||
switch ring {
|
||||
case rings.RingZeroID:
|
||||
return syncWireguardConfig(z.zones, z.zones, ring)
|
||||
case rings.RingOneID:
|
||||
return syncWireguardConfig(z.zones, z, ring)
|
||||
default:
|
||||
return ErrInvalidRing(ring)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user