This commit is contained in:
jdl
2026-06-09 06:08:14 +02:00
parent c258d877e8
commit 3968fd8f16
3 changed files with 15 additions and 0 deletions

View File

@@ -58,6 +58,9 @@ type App struct {
dev WGDevice
controlConn ControlConn
// Relay-side forwarder; non-nil only when isRelay.
forwarder *Forwarder
// Peer state
relay *Peer
peersByKey map[wgtypes.Key]*Peer

View File

@@ -31,10 +31,15 @@ func New(
return nil, fmt.Errorf("configure WG device: %w", err)
}
var fwd *Forwarder
if state.IsRelay {
if err := dev.EnableForwarding(); err != nil {
return nil, fmt.Errorf("enable forwarding: %w", err)
}
fwd, err = NewForwarder(state.VPNIP)
if err != nil {
return nil, fmt.Errorf("forwarder: %w", err)
}
}
cc, err := newUDPControlConn(state.VPNIP, ControlPort)
@@ -73,6 +78,7 @@ func New(
dev: dev,
controlConn: cc,
forwarder: fwd,
peersByKey: make(map[wgtypes.Key]*Peer),
peersByIP: make(map[netip.Addr]*Peer),

View File

@@ -38,6 +38,9 @@ func (a *App) onAddPeer(p HubPeer) {
if !peer.IsPublic {
a.devAddPeer(peer)
if a.forwarder != nil && endpoint.IsValid() {
a.forwarder.SetEndpoint(peer.VPNIP.As4()[3], endpoint)
}
return
}
@@ -50,6 +53,9 @@ func (a *App) onRemovePeer(key wgtypes.Key) {
return
}
a.devRemove(peer)
if a.forwarder != nil {
a.forwarder.RemoveEndpoint(peer.VPNIP.As4()[3])
}
delete(a.peersByKey, key)
delete(a.peersByIP, peer.VPNIP)