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
.
- 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;
}
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
- Option 43 fehlt ➜ DHCP checken.
- NAT/Firewall blockt Port 8080 ➜ iptables‑Regeln prüfen.
- Falsche Subnetzmaske ➜ Switch glaubt, Controller sei lokal.
Anhang A · IP‑Adresse in Hexadezimal umrechnen – Schritt für Schritt
Warum überhaupt Hex?
DHCP‑Option 43 braucht die Controller‑IP als rohe Bytefolge. Bytes schreibt man in der Netzwerktechnik üblich in Hexadezimal (“Hex”). Ein Byte kann Werte von 00
bis ff
(= 0 – 255 dezimal) annehmen.
1 · Vier Oktette der IP aufschreiben
Beispiel‑IP unseres Controllers:
172 . 19 . 0 . 154
2 · Jedes Oktett einzeln nach Hex konvertieren
Dezimal | Rechenweg | Hexadezimal |
---|---|---|
172 | 172 / 16 = 10 Rest 12 → 10 = a , 12 = c |
ac |
19 | 19 / 16 = 1 Rest 3 → 1 = 1 , 3 = 3 |
13 |
0 | 0 = 0 → 00 |
00 |
154 | 154 / 16 = 9 Rest 10 → 9 = 9 , 10 = a |
9a |
Merksatz: Wenn das Ergebnis nur ein Hex‑Zeichen hat (z. B. a
), wird immer eine führende Null ergänzt → 0a
. So entstehen exakt vier Byte.
3 · Bytes zusammenfügen
ac 13 00 9a
4 · In DHCP‑Option 43 einbauen
Die Struktur lautet: 01 : 04 : <IP‑Hex‑Byte1> : <IP‑Hex‑Byte2> : <IP‑Hex‑Byte3> : <IP‑Hex‑Byte4>
01
= Sub‑Option 1 (Controller‑IP)04
= Länge (4 Byte)ac:13:00:9a
= die vier Hex‑Bytes von oben
option vendor-encapsulated-options 01:04:ac:13:00:9a;
Schnell‑Check mit Python
Für größere Netze lohnt es sich, nicht zu rechnen, sondern einen Einzeiler zu nutzen:
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
– genau wie von Hand.
Spickzettel 0 – 255 → Hex
Dez | Hex | Dez | Hex | Dez | Hex | Dez | Hex |
---|---|---|---|---|---|---|---|
0 | 00 | 16 | 10 | 128 | 80 | 240 | f0 |
1 | 01 | 32 | 20 | 144 | 90 | 241 | f1 |
2 | 02 | 64 | 40 | 160 | a0 | 250 | fa |
3 | 03 | 100 | 64 | 176 | b0 | 255 | ff |
Damit können auch Azubis ohne Vorwissen eine IP schnell in Hex umbrechen und die Option 43 korrekt setzen.
No Comments