Skip to content

Commit

Permalink
Update packetfilter when peers change
Browse files Browse the repository at this point in the history
Previously we did not update the packet filter
when nodes changed, which would cause new nodes
to be missing from packet filters of old nodes.

Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com>
  • Loading branch information
kradalby committed Sep 19, 2023
1 parent a8079a2 commit 3b0749a
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 11 deletions.
27 changes: 16 additions & 11 deletions hscontrol/mapper/mapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -382,28 +382,31 @@ func (m *Mapper) DERPMapResponse(
func (m *Mapper) PeerChangedResponse(
mapRequest tailcfg.MapRequest,
machine *types.Machine,
machineKeys []uint64,
machineIDs []uint64,
pol *policy.ACLPolicy,
) ([]byte, error) {
var err error
changed := make(types.Machines, len(machineKeys))
changed := make(types.Machines, len(machineIDs))
lastSeen := make(map[tailcfg.NodeID]bool)
for idx, machineKey := range machineKeys {
peer, err := m.db.GetMachineByID(machineKey)
if err != nil {
return nil, err
}

changed[idx] = *peer
peersList, err := m.db.ListPeers(machine)
if err != nil {
return nil, err
}

peers := peersList.IDMap()

for idx, machineID := range machineIDs {
changed[idx] = peers[machineID]

// We have just seen the node, let the peers update their list.
lastSeen[tailcfg.NodeID(peer.ID)] = true
lastSeen[tailcfg.NodeID(machineID)] = true
}

rules, _, err := policy.GenerateFilterAndSSHRules(
rules, sshPolicy, err := policy.GenerateFilterAndSSHRules(
pol,
machine,
changed,
peersList,
)
if err != nil {
return nil, err
Expand Down Expand Up @@ -434,6 +437,8 @@ func (m *Mapper) PeerChangedResponse(

resp := m.baseMapResponse(machine)
resp.PeersChanged = tailPeers
resp.PacketFilter = policy.ReduceFilterRules(machine, rules)
resp.SSHPolicy = sshPolicy
// resp.PeerSeenChange = lastSeen

return m.marshalMapResponse(mapRequest, &resp, machine, mapRequest.Compress)
Expand Down
10 changes: 10 additions & 0 deletions hscontrol/types/machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -353,3 +353,13 @@ func (machines MachinesP) String() string {

return fmt.Sprintf("[ %s ](%d)", strings.Join(temp, ", "), len(temp))
}

func (machines Machines) IDMap() map[uint64]Machine {
ret := map[uint64]Machine{}

for _, machine := range machines {
ret[machine.ID] = machine
}

return ret
}

0 comments on commit 3b0749a

Please sign in to comment.