egress: refresh a leased pair on dhcp renewal and default anti-spoof to log
dnsmasq runs the dhcp-script on a renewal only with script-on-renewal, so a pair loaded at the first lease timed out while the lease kept renewing and the bridge table dropped the container's traffic. Set script-on-renewal, time pairs out remaining + 300s, default antiSpoof to log, and run the vm test through renewals with drop.
This commit is contained in:
parent
cf360b74b9
commit
5189e8fb4b
2 changed files with 107 additions and 39 deletions
|
|
@ -26,8 +26,8 @@
|
|||
# may use are not known until a container runs, so they are set contents.
|
||||
# `hive-priv egress-load` puts the current ones into the same transaction as the
|
||||
# tables; `egress-pin` (per new port from udev, and from a timer for the ports
|
||||
# still unbound) and dnsmasq's `dhcp-script` (per lease) keep them current.
|
||||
# `hive-priv`'s `egress.rs` documents how.
|
||||
# still unbound) and dnsmasq's `dhcp-script` (per lease and renewal) keep them
|
||||
# current. `hive-priv`'s `egress.rs` documents how.
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
|
|
@ -200,7 +200,7 @@ let
|
|||
# as the 48 bits that sit at the `chaddr` field of a DHCP message. A port
|
||||
# with no pair sends nothing, DHCP included.
|
||||
# - `lease_v4` holds the leased (MAC, IPv4) pairs; each times out with its
|
||||
# lease.
|
||||
# lease, and a renewal moves the timeout.
|
||||
# - IPv6 has no leases: a source is link-local, or `::` in the packets that
|
||||
# duplicate address detection and multicast listener reports send before an
|
||||
# address exists. The bridge carries no other IPv6 traffic.
|
||||
|
|
@ -335,7 +335,7 @@ in
|
|||
"drop"
|
||||
"log"
|
||||
];
|
||||
default = "drop";
|
||||
default = "log";
|
||||
description = ''
|
||||
What the `bridge hive_egress` table does with a frame whose source is not
|
||||
the sending container's own. Every port of the agent bridge is checked:
|
||||
|
|
@ -350,8 +350,10 @@ in
|
|||
cannot log gets a line with the prefix `hive-egress-spoof-unmetered `
|
||||
from a limit shared by all ports. A container sending from its leased
|
||||
address is never affected, so nothing legitimate breaks.
|
||||
- `log`: the same lines and counters, and the frame goes through. For
|
||||
finding out why a legitimate container is refused on a live hive.
|
||||
- `log` (the default): the same lines and counters, and the frame goes
|
||||
through. For finding out why a legitimate container is refused on a
|
||||
live hive. The default goes back to `drop` once the renewal fix
|
||||
(dnsmasq runs the lease script on a renewal) is proven live.
|
||||
|
||||
With `log`, the identity squid takes from the source of an intercepted
|
||||
flow (`egress.intercept`) can be spoofed: use it to diagnose, not to run.
|
||||
|
|
@ -448,7 +450,8 @@ in
|
|||
default = leaseScript;
|
||||
defaultText = lib.literalMD "the script that loads a lease into the bridge table";
|
||||
description = ''
|
||||
The program dnsmasq runs on each lease change (its `dhcp-script`).
|
||||
The program dnsmasq runs on each lease change and renewal (its
|
||||
`dhcp-script` with `script-on-renewal`).
|
||||
'';
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -84,8 +84,12 @@ in
|
|||
# `hive-priv egress-load` reads this file back (hive-egress.nix).
|
||||
dhcp-leasefile = "/var/lib/dnsmasq/dnsmasq.leases";
|
||||
# Each lease change updates the leased (MAC, IPv4) pairs the bridge
|
||||
# anti-spoofing table checks sources against (hive-egress.nix).
|
||||
# anti-spoofing table checks sources against (hive-egress.nix). A pair
|
||||
# times out with its lease, so the script must also run on a renewal:
|
||||
# without `script-on-renewal` dnsmasq runs it only for a new lease, and a
|
||||
# renewed one leaves the table when the first lease would have ended.
|
||||
dhcp-script = toString networkCfg.egress.leaseScript;
|
||||
script-on-renewal = true;
|
||||
# No explicit upstream: non-hive queries follow dnsmasq's
|
||||
# resolv.conf default — the host's own `/etc/resolv.conf`, so the
|
||||
# hive always uses the host's resolvers and follows them live with
|
||||
|
|
|
|||
Loading…
Reference in a new issue