WIP
This commit is contained in:
@@ -58,6 +58,9 @@ type App struct {
|
|||||||
dev WGDevice
|
dev WGDevice
|
||||||
controlConn ControlConn
|
controlConn ControlConn
|
||||||
|
|
||||||
|
// Relay-side forwarder; non-nil only when isRelay.
|
||||||
|
forwarder *Forwarder
|
||||||
|
|
||||||
// Peer state
|
// Peer state
|
||||||
relay *Peer
|
relay *Peer
|
||||||
peersByKey map[wgtypes.Key]*Peer
|
peersByKey map[wgtypes.Key]*Peer
|
||||||
|
|||||||
@@ -31,10 +31,15 @@ func New(
|
|||||||
return nil, fmt.Errorf("configure WG device: %w", err)
|
return nil, fmt.Errorf("configure WG device: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var fwd *Forwarder
|
||||||
if state.IsRelay {
|
if state.IsRelay {
|
||||||
if err := dev.EnableForwarding(); err != nil {
|
if err := dev.EnableForwarding(); err != nil {
|
||||||
return nil, fmt.Errorf("enable forwarding: %w", err)
|
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)
|
cc, err := newUDPControlConn(state.VPNIP, ControlPort)
|
||||||
@@ -73,6 +78,7 @@ func New(
|
|||||||
|
|
||||||
dev: dev,
|
dev: dev,
|
||||||
controlConn: cc,
|
controlConn: cc,
|
||||||
|
forwarder: fwd,
|
||||||
|
|
||||||
peersByKey: make(map[wgtypes.Key]*Peer),
|
peersByKey: make(map[wgtypes.Key]*Peer),
|
||||||
peersByIP: make(map[netip.Addr]*Peer),
|
peersByIP: make(map[netip.Addr]*Peer),
|
||||||
|
|||||||
@@ -38,6 +38,9 @@ func (a *App) onAddPeer(p HubPeer) {
|
|||||||
|
|
||||||
if !peer.IsPublic {
|
if !peer.IsPublic {
|
||||||
a.devAddPeer(peer)
|
a.devAddPeer(peer)
|
||||||
|
if a.forwarder != nil && endpoint.IsValid() {
|
||||||
|
a.forwarder.SetEndpoint(peer.VPNIP.As4()[3], endpoint)
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,6 +53,9 @@ func (a *App) onRemovePeer(key wgtypes.Key) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
a.devRemove(peer)
|
a.devRemove(peer)
|
||||||
|
if a.forwarder != nil {
|
||||||
|
a.forwarder.RemoveEndpoint(peer.VPNIP.As4()[3])
|
||||||
|
}
|
||||||
delete(a.peersByKey, key)
|
delete(a.peersByKey, key)
|
||||||
delete(a.peersByIP, peer.VPNIP)
|
delete(a.peersByIP, peer.VPNIP)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user