Skip to main content

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ß, dass 172.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

  1. Switch auf Werkseinstellungen zurücksetzen (Reset‑Taster > 5 s).
  2. An eth1 des Debian‑Hosts stecken.
  3. Mit tcpdump überprüfen, dass Option 43 im DHCPACK auftaucht:
    sudo tcpdump -ni eth1 port 67 or port 68 | grep -i "Vendor specific"
  4. 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