UniFi‑Switch ohne SSH hinter NAT‑Firewall adoptieren per DHCP‑Option 43
Diese Anleitung beschreibt Schritt für Schritt, wie du einen UniFi‑Switch (z. B. USW‑Flex‑Mini), der kein SSH bietet, mit einem Controller koppelst, der sich hinter einer NAT‑Firewall befindet.
Der Trick: Wir geben dem Switch die Controller‑IP direkt via DHCP Option 43
.
Voraussetzungen
- Debian‑/Ubuntu‑System mit zwei NICs (
eth0
= uplink/NAT‑Seite,eth1
= Switch‑Port). - UniFi Controller bereits unter
172.19.0.154
erreichbar. - Root‑ oder sudo‑Zugriff auf den Debian‑Host.
1 · Netzdesign / Topologie
# uplink‑LAN (z. B. 172.20.1.0/23)
Internet/Router ──> eth0 (172.20.1.102/23) [Debian] \
\ NAT
eth1 (172.19.2.1/24) [Debian] ──> UniFi‑Switch 172.19.2.10
# Controller liegt im Uplink‑LAN: 172.19.0.154
- eth1 bekommt ein separates /24 (hier
172.19.2.0/24
), damit der Switch weiß, dass172.19.0.154
außerhalb seines Netzes liegt und das Gateway nutzt. - NAT / Masquerade auf dem Debian‑Host erlaubt dem Switch, den Controller über eth0 zu erreichen.
2 · Interface‑ und System‑Basis
# /etc/network/interfaces – Ausschnitt
auto eth1
iface eth1 inet static
address 172.19.2.1
netmask 255.255.255.0
# IP‑Forwarding permanent einschalten
echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-nat.conf
sudo sysctl -p /etc/sysctl.d/99-nat.conf
# Einfaches Masquerading für das Subnetz 172.19.2.0/24
sudo iptables -t nat -A POSTROUTING -s 172.19.2.0/24 -o eth0 -j MASQUERADE
# Regeln persistent speichern – z. B. via iptables-persistent
3 · ISC‑DHCP‑Server installieren & konfigurieren
sudo apt-get update
sudo apt-get install isc-dhcp-server
3.1 Server‑Interface festlegen
# /etc/default/isc-dhcp-server
INTERFACESv4="eth1"
3.2 /etc/dhcp/dhcpd.conf
subnet 172.19.2.0 netmask 255.255.255.0 {
range 172.19.2.10 172.19.2.50;
option routers 172.19.2.1;
option broadcast-address 172.19.2.255;
# *** UniFi‑Magie: DHCP Option 43 ***
# 01 -> Sub‑Option 1 (Controller‑IP)
# 04 -> Länge in Bytes (4)
# ac 13 00 9a -> 172.19.0.154 in Hex
option vendor-encapsulated-options 01:04:ac:13:00:9a;
# optional – DNS "unifi" » Controller‑IP
option domain-name-servers 172.19.0.154;
}
IP → Hex‑Konvertierung
Jedes Oktett der Controller‑IP in Hex schreiben:
- 172 =
ac
- 19 =
13
- 0 =
00
- 154 =
9a
01:04:ac:13:00:9a
sudo systemctl enable --now isc-dhcp-server
sudo systemctl status isc-dhcp-server
4 · Firewall / Ports
Port | Protokoll | Zweck |
---|---|---|
8080 | TCP | Inform & Adoption |
3478 | UDP | STUN |
10001 | UDP | Discovery (alt) |
8443 | TCP | Controller‑GUI/API |
Achte darauf, dass diese Ports von 172.19.2.0/24
über NAT zu 172.19.0.154
passieren dürfen.
5 · Switch anschließen & adoptieren
- Switch auf Werkseinstellungen zurücksetzen (Reset‑Taster > 5 s).
- An
eth1
des Debian‑Hosts stecken. - Mit
tcpdump
überprüfen, dass Option 43 imDHCPACK
auftaucht:
sudo tcpdump -ni eth1 port 67 or port 68 | grep -i "Vendor specific"
- Controller‑UI öffnen
https://<Controller‑FQDN>:8443
➜ Devices » Pending Adoption.
Gerät erscheint? → Adopt.
Debugging‑Checks
# Kommt der Switch raus?
ping -c3 172.19.0.154
# Siehst du Inform‑Traffic?
sudo tcpdump -ni eth1 host 172.19.0.154 and port 8080
# Controller‑Logs
tail -f /usr/lib/unifi/logs/server.log
Gerät taucht nicht auf?
- Option 43 fehlt ➜ DHCP checken.
- NAT/Firewall blockt Port 8080 ➜ iptables‑Regeln prüfen.
- Falsche Subnetzmaske ➜ Switch glaubt, Controller sei lokal.
Anhang A · Schnelle IP → Hex‑Tabelle
Dezimal | Hex |
---|---|
0–9 | 00–09 |
10–15 | 0a–0f |
16 | 10 |
… | … |
154 | 9a |
172 | ac |
Python‑Einzeiler (zum Kopieren):
python3 -c 'import sys,ipaddress,struct; \
print(":".join(f"{b:02x}" for b in ipaddress.IPv4Address(sys.argv[1]).packed))' 172.19.0.154
Ausgabe: ac:13:00:9a
© 2025 – Anleitung zusammengestellt für BookStack / UniFi NAT Adoption