Repository navigation
fix(packaging): the wired LAN ports get a bridge of their own (br-mgmt) — rebased - #856
Amperstrand wants to merge 1 commit into
Conversation
…LAN ports get a bridge of their own, scoped to the admin surfaces
270822c to
b5d63e3
Compare
🔎 Integration finding —
|
fix(packaging): the wired LAN ports get a bridge of their own, scoped to the admin surfaces
Implements the bridge half of
docs/architecture/lan-port-management-bridge-decision.md(#599, D1-D8): the wired LAN ports move off the captive bridge onto
br-mgmt, soa cabled operator reaches the administration surfaces before paying anything, and
the port stops sharing a layer-2 domain with the strangers on the open guest
SSID.
The requirement this was written for has two halves, and this PR delivers one
of them. The operator asked for a
br-mgmt"where the connected devices canaccess luci and the luci alternative dashboard, but they still need to pay". The
first half is here. The second half — a paywalled wired bridge — is not
delivered, and cannot be with the shipped stack: #599 measured that nodogsplash
5.0.2 gates exactly one interface and that a second instance is the dangerous
wrong answer (fixed
nds*chain names in one namespace, teardown by name, onecontrol socket), so
br-mgmthas no captive gate at all. A bridge this modulecannot gate must not take money it cannot deliver, so it is built as a
management network: admin surfaces reachable, no internet, and the payment
surfaces unreachable. D8 in the decision record says exactly this; F1/F2 is
the follow-up if a wired customer network is still wanted.
The three writers
1.
setup_mgmt_bridgeinpackaging/files/etc/uci-defaults/99-tollgate-setup(
+206) — MOVES the port list the base image writes on the captive bridge ontobr-mgmt:eth1on the MT3000,lan1…lan5elsewhere — it moveswhat it finds on
network.lan.device's device section, located by NAME becausethe device sections are anonymous in a shipped config);
br-mgmtisrefused:
ERROR,return 1, and nouci setat all — a portlessbr-mgmtwould report a management bridge the operator has no way into;
network.mgmt.ipaddris kept (a reinstall must not move an addressthe operator chose); otherwise it takes the first free /24 next to the LAN's,
skipping the private network's and any upstream collision, reusing the existing
prefix24_of/octet_of/subnet_conflictshelpers;dhcp.mgmtso the laptop has a lease (and therefore so its MAC still resolves,which is what keeps a future F1 possible without redesigning identity);
firewall.mgmt_zonewithforward 'REJECT'and noconfig forwarding— deliberately notfirewall.private_zone, whoseforward 'ACCEPT'plusprivate → wanforwarding would hand every wired client freeinternet, which is the hole this change exists not to create.
The writer is re-asserted on the same-version (reinstall/upgrade) path as well
as full setup, because the port list is image-owned:
sysupgrade -nor a factoryreset puts the wired port back on the captive bridge, and nothing else in this
repository would notice. Each of the three configs it touches is committed only
when its export actually differs, so a converged router is a no-op.
2.
packaging/files/etc/nftables.d/33-mgmt-bridge-scope.nft(new, +86) — aninput fragment, same shape as its five siblings so
fw4 reloadloads it and anodogsplash restart does not remove it:
53/67/68), SSH (22), and the four administration surfaces443,8080,8090,8443;ip6assign '0'and no RA, the sameposture
setup_disable_ipv6_lantakes);counter dropfor everything else, which is what makesReplacement for #601: that PR's head branch on the felixfelix-bot fork was deleted, which froze its tracking — a recreated same-named branch cannot re-attach. This PR carries the identical change rebased onto current main (content ported via three-way patch; conflicts resolved: SSID fence + pre-commit fences unioned, rc-tester-guide kept at main's rc1 state, changelog entry re-spliced).