Frank's call: no per-host graveyard. The four /system/dankware/ pages carried two pieces of knowledge that outlive the box, and one that does not. Distilled: - omp-docs/system/network.md (new) — LAN topology plus the multi-link resolver law: a client with two +DefaultRoute links flaps its DNS, and the fix is a static per-connection resolver, not resolved.conf. Keeps the flush-caches-loop verification, because one successful dig proves nothing. - omp-docs/tools/niri/displays.md (new) — the multi-monitor rig: portrait transforms, absolute positions, auto-placed third panel, the iGPU render-node pin, and the three failure modes (duplicate output blocks, positions that do not reflow, a mode the panel cannot drive). Dropped: the machine's own spec sheet (CPU/GPU/PCI/NVMe inventory for a box Frank sold) and its quick-facts table. The OS and userspace facts it repeated already live in tools/cachyos.md. omp-docs/system/dankware/ moved to .AGENTTRASH/20260928-retired-workstation/ (not deleted; git history holds it too). system/index.md and the niri index repoint; niri's [[displays]] wikilink now resolves to the new page instead of the trashed one. kb-lint: 0 violations.
98 lines
3.2 KiB
Markdown
98 lines
3.2 KiB
Markdown
---
|
|
type: reference
|
|
title: Network
|
|
description: LAN topology for the fleet and the client-side DNS pinning rule for multi-homed Linux workstations.
|
|
tags:
|
|
- network
|
|
- dns
|
|
- systemd-resolved
|
|
- workstation
|
|
- unverified
|
|
verified: 2026-08-28
|
|
---
|
|
|
|
# Network
|
|
|
|
How the LAN is addressed, which host answers what, and the one DNS rule that
|
|
bites every Linux workstation with both Wi-Fi and Ethernet plugged in.
|
|
|
|
---
|
|
|
|
## Topology
|
|
|
|
| Host | IP | Role |
|
|
|------|----|------|
|
|
| Router | 192.168.0.1 | DHCP; hands out the DNS server to clients |
|
|
| Dankclaw | 192.168.0.143 | Pi-hole DNS, Caddy edge, Gitea, large inference model |
|
|
| Dankserver | 192.168.0.235 | small inference model |
|
|
| Clients | DHCP from 192.168.0.0/24 | workstations, phones |
|
|
|
|
The router hands clients `192.168.0.143` as their DNS server; Pi-hole answers
|
|
every `*.franksdank.cloud` name with the LAN address of the box that serves
|
|
it. Names that resolve to the public WAN address time out on the LAN because
|
|
the G36 has no NAT loopback — a symptom that looks like "the network is
|
|
down" and is not. Full DNS mechanics live in the serverAppConfigs knowledge
|
|
base (`Infrastructure/LAN-DNS.md`); this page is the client-side view.
|
|
|
|
---
|
|
|
|
## The multi-link resolver rule
|
|
|
|
**A Linux client with two `+DefaultRoute` links will flap its DNS.**
|
|
|
|
NetworkManager marks both a wired and a Wi-Fi connection as default routes.
|
|
Both get the same DHCP DNS list from the router, and `systemd-resolved`
|
|
resolves queries against one "current" resolver *per link*. When the links
|
|
disagree — one landed on the Pi-hole address, the other on a DHCP-provided
|
|
upstream that answers with the public WAN IP — every lookup can return a
|
|
different address, and half of them time out on the LAN.
|
|
|
|
Enumerate the links and their resolvers before changing anything:
|
|
|
|
```bash
|
|
nmcli -t -f NAME,DEVICE connection show --active # one entry per default link
|
|
resolvectl status # per-link "Current DNS Server"
|
|
ip -br addr
|
|
```
|
|
|
|
The fix is to pin the LAN resolver **on each connection**, because
|
|
`/etc/systemd/resolved.conf`'s `DNS=` is only a per-link fallback and does
|
|
not override what the link itself was handed:
|
|
|
|
```bash
|
|
for c in "<wired connection>" "<wifi connection>"; do
|
|
nmcli connection modify "$c" ipv4.method auto \
|
|
ipv4.dns 192.168.0.143 \
|
|
ipv4.ignore-auto-dns yes \
|
|
ipv4.ignore-auto-routes no
|
|
done
|
|
nmcli connection up "<wired connection>"
|
|
nmcli connection up "<wifi connection>"
|
|
systemctl restart systemd-resolved
|
|
```
|
|
|
|
`method auto` keeps DHCP for address, gateway, and routes; `ignore-auto-dns
|
|
yes` makes the static resolver the only one used; `ignore-auto-routes no`
|
|
keeps the DHCP routes, so the dual-default traffic path survives.
|
|
|
|
Verify with a cache-clear loop — the name must return the LAN address on
|
|
every run, not on average:
|
|
|
|
```bash
|
|
for i in $(seq 1 10); do resolvectl flush-caches; dig romm.franksdank.cloud +short; done
|
|
```
|
|
|
|
A single successful `dig` proves nothing on a flapping resolver.
|
|
|
|
---
|
|
|
|
## Servers
|
|
|
|
- [Dankserver](/system/dankserver.md) — small inference model
|
|
- [Dankclaw](/system/dankclaw.md) — large inference model, DNS, proxy
|
|
|
|
## See Also
|
|
|
|
- [System Documentation](/system/index.md) — bundle navigation
|
|
- [CachyOS](/tools/cachyos.md) — NetworkManager, systemd-resolved, BlueZ
|