So wie ich es haben wollte

zumindest für den Anfang…

ein Netzwerk aus 3 OpenBSD Routern auf APU4b4’s. Einer als Verbindung in die Welt für die beiden anderen und den Desktops (repräsentiert durch je eine Raspberry Pi 3) dahinter.

Was der Sinn sein soll? Lernen … wie funktioniert pf, wie funktioniert routing über mehrer router hinweg, … tunnel und so weiter. Und natürlich das Niederschreiben was man getan hat um es ggf. reproduzieren zu können. Es gibt nur wenige Anleitungen auf deutsch zu diesem Thema.

Gut einen der im letzten Artikel erwähnten Switche konnte ich schon weg rationalisieren… der hatte die Router mit Internet versorgt, solange ich nicht verstanden hatte, wie NAT bei OpenBSD funktioniert und noch ein paar Routen falsch waren… back to stock.

Im Grunde alles was ich gemacht habe benötigt root Rechte. Deshalb hab ich mich erst einmal zum root gemacht doas su -. Jeder sollte wissen was, was bedeutet.

Das erste was man auf allen OpenBSD Rechnern die routen sollen benötigt ist der sysctl Eintrag net.inet.ip.forwarding=1 standardmässig steht dieser auf 0 also nicht forwarden.
Um es sofort und permanent zu machen benötigt man 2 Zeile:

sysctl net.inet.ip.forwarding=1
echo "net.inet.ip.forwarding=1" >> /etc/sysctl.conf

Das Routing funktioniert sehr einfach mit route add
Um sie Permanent zu machen kommen die Routen in die /etc/hostname.
Ich habe, der Einheitlichkeit halber am ersten Netzwerk-Anschluss grundsätzlich die Kabel für das Interne Netzwerk 172.16.71.0/24.
Am zweiten die, so fern vorhanden, verbundenen Netze. Bei puffy-lab-2 das Netz 172.16.65.0/24. Und bei puffy-lab-3 das Netz 172.16.79.0/24. Ja die Zahl im dritte Oktett hat eine Bedeutung, ist aber für andere irrelevant.
Und am vierten der Weg zu meinem Hauptnetz mit dem Gateway zum ISP. Da das in nächster Zeit mal auf eine andere IP umgezogen wird (damit ein geplantes Routing via IPSec oder SSH Tunnel VPN sich nicht ins Gehege kommt) nennen wir hier einfach mal 192.168.178.0/24

puffy-lab-1# cat /etc/hostname.em0
inet 172.16.71.1 255.255.255.0
!route add 172.16.65.0/24 172.16.71.2 >/dev/null 2>&1
!route add 172.16.79.0/24 172.16.71.3 >/dev/null 2>&1
puffy-lab-1# cat /etc/hostname.em3
inet 192.168.178.2 255.255.255.0 192.168.178.255
!route add default 192.168.178.1 >/dev/null 2>&1
puffy-lab-2# cat /etc/hostname.em0
inet 172.16.71.2 255.255.255.0 172.16.71.255
!route add default 172.16.71.1 >/dev/null 2>&1
puffy-lab-2# cat /etc/hostname.em1
inet 172.16.65.1 255.255.255.0 172.16.65.255
puffy-lab-3# cat /etc/hostname.em0
inet 172.16.71.3 255.255.255.0 172.16.71.255
!route add default 172.16.71.1 >/dev/null 2>&1
puffy-lab-3# cat /etc/hostname.em1
inet 172.16.79.1 255.255.255.0 172.16.79.255

Lässt man >/dev/null 2>&1 weg, werden bei jedem sh /etc/netstart die Routen angezeigt. Kann beim Debugging hilfreich sein… sonst eher nervig.
Da das jetzt nur die einfachste Form eines NAT Netzwerkes ist, lass ich die anderen /etc/pf.conf einfach weg. Die funktionierten auch ohne Änderungen.

puffy-lab-1# cat /etc/pf.conf                                                 #       $OpenBSD: pf.conf,v 1.55 2017/12/03 20:40:04 sthen Exp $
#
# See pf.conf(5) and /etc/examples/pf.conf

set skip on lo

###block return # block stateless traffic
###pass         # establish keep-state

# By default, do not permit remote connections to X11
block return in on ! lo0 proto tcp to port 6000:6010

# Port build user does not need network
block return out log proto {tcp udp} user _pbuild

extif = "em3"
extip = "192.168.178.2"
intnet = "{ 172.16.65.0/24 172.16.71.0/24 172.16.79.0/24 }"

pass out on $extif from $intnet to any nat-to $extip

Man sieht vielleicht, das ich im Grunde nur die unteren 5 Zeilen in der Standard /etc/pf.conf angehängt, und 2 Einträge mit triple-sharp ### auskommentiert habe.

Überprüfung mit pfctl -nf /etc/pf.conf und einbinden mit pfctl -f /etc/pf.conf funktionierten problemlos

Ohne NAT sind eine paar unangenehme Seiteneffekte zu spüren. Wie etwa das sich ein route show und route -F #auf raspbian tot läuft. Auch lässt sich der ISP Router nicht erreichen.
Sobald NAT funktioniert sollte auf den Raspberry Pi’s das WLAN zum ISP Router abgeschaltet werden… sonst fliegt man häufiger mal von den Rechnern, weil die mit den 2 Wegen nicht wirklich umgehen können, wenn man versucht sie aus dem ISP Netzwerk zu Steuern. So hat mir z.B. Ansible diese Warnungen ausgestossen

 [WARNING]: sftp transfer mechanism failed on [172.16.65.100]. Use ANSIBLE_DEBUG=1 to see detailed information



 [WARNING]: scp transfer mechanism failed on [172.16.65.100]. Use ANSIBLE_DEBUG=1 to see detailed information

raspi-lab-1 | UNREACHABLE! => {
    "changed": false,
    "msg": "SSH Error: data could not be sent to remote host \"172.16.65.100\". Make sure this host can be reached over ssh",
    "unreachable": true
}

Als ich einfach nur ein ansible -i hosts -m setup all ausführen wollte, während auf raspi-lab-1 WLAN im Netz 192.168.178.0/24 eingewählt war, und die Control Machine ebenso.
Nach abschalte des WLAN auf raspi-lab-1, funktionierte das Modul setup anstandslos.

Dieser Beitrag wurde unter APU4b4, Hardware, Netzwerk, OpenBSD, pf, routing veröffentlicht. Setze ein Lesezeichen auf den Permalink.