Rdomains verstehen lernen - einfaches Szenario

MCPO

Member
Hallo Leute,

ich versuche mich derzeit in rdomains einzuarbeiten und habe mir zu diesem Zweck ein OpenBSD 6.0 mit 3 Interfaces aufgesetzt. Mein erster Anlaufpunkt was dieser Artikel: https://www.packetmischief.ca/2011/09/20/virtualizing-the-openbsd-routing-table/

Leider alles ohne Erfolg. Deshalb dachte ich ich frage einfach mal ;)

Mein System hat drei Interfaces (em0, em1, em2).

hostname.em1:
inet 192.168.1.10 255.255.255.0 192.168.1.255
description "LAN"

hostname.em2:
rdomain 1
inet 192.168.2.10 255.255.255.0 192.168.2.255
description "DMZ"
!route -T 0 add 192.168.2.10 -iface 192.168.1.10

route -T 0 -n show -inet
Destination Gateway Flags Refs Use Mtu Prio Iface
default 172.16.151.2 UGS 0 13 - 8 em0
224/4 127.0.0.1 URS 0 0 32768 8 lo0
127/8 127.0.0.1 UGRS 0 0 32768 8 lo0
127.0.0.1 127.0.0.1 UHl 1 1 32768 1 lo0
172.16.151/24 172.16.151.158 UC 2 0 - 4 em0
172.16.151.1 00:50:56:c0:00:08 UHLc 1 2 - 4 em0
172.16.151.2 00:50:56:fc:31:2a UHLc 1 6 - 4 em0
172.16.151.158 00:0c:29:91:68:3c UHLl 0 4 - 1 em0
172.16.151.255 172.16.151.158 UHb 0 0 - 1 em0
192.168.1/24 192.168.1.10 UC 0 0 - 4 em1
192.168.1.10 00:50:56:3d:38:b8 UHLl 0 5 - 1 em1
192.168.1.255 192.168.1.10 UHb 0 0 - 1 em1
192.168.2.10 192.168.1.10 UHS 0 1 - 8 em1

route -T 1 -n show -inet
Destination Gateway Flags Refs Use Mtu Prio Iface
192.168.2/24 192.168.2.10 UC 0 0 - 4 em2
192.168.2.10 00:0c:29:91:68:50 UHLl 0 0 - 1 em2
192.168.2.255 192.168.2.10 UHb 0 0 - 1 em2

pf.conf:
icmp_types="{ echoreq, unreach }"
pass out # establish keep-state
pass in
pass in on em1 inet rtable 1
pass inet proto icmp all icmp-type $icmp_types


Und nun, ping von rdomain 1 auf das Interface in rdomain 0:
route -T 1 exec ping 192.168.1.10
PING 192.168.1.10 (192.168.1.10): 56 data bytes
ping: sendto: No route to host
ping: wrote 192.168.1.10 64 chars, ret=-1

Ping von rdomain 0 auf das Interface in rdomain 1:
route -T 0 exec ping 192.168.2.10
PING 192.168.1.10 (192.168.1.10): 56 data bytes
ping: sendto: No route to host
ping: wrote 192.168.1.10 64 chars, ret=-1

Stehe komplett auf dem Schlauch :-/
Bin über jede Hilfe sehr dankbar

Schönen Gruß
 
pf.conf auf Fehler testen:
pfctl -vvnf /etc/pf.conf # ist 2mal "v"

Monitoring:
tcpdump -eni pflog0

tcpdump nur icmp:
tcpdump -nni $interface icmp # $interface durch deins ersetzen


Sind paar Tipps zur Fehlersuche, habs mir an sich nicht durchgelesen, grad leider keinen Kopf für

Greetz
 
Sagt doch alles.
Versuch erstmal dein Routing zu fixen - ohne aktives pf. Dann gehts weiter.

Schon klar, dass es das Routing ist - aber deswegen frage ich ja. rdomains brauchen, wenn ich es richtig verstanden habe in eine Richtung eine pf Regel und in die andere Richtung einen Routing-Eintrag. Also geht es nicht komplett ohne aktives pf, oder?
 
Offene pf.conf:
(erstmal mit: "pfctl -vvnf pf.conf" testen, keine Ahnung ob da grad was mitm Syntax nicht passt)
Code:
set skip on lo0
block return log all
pass in on egress inet all
pass out on egress inet all

Denke mit egress bist du besser bedient zum Testen.
rtable musste selbst einbauen, hab das nie genutzt
 
hi

bei rdomains gilt zu beachten
es muss eine default route vorhanden sein !

warum

um die kommunkation zur aussenwelt herzustellen benötigst du pf , und damit pf überhaupt das packet sieht muss es "in den kernel" rein.

am einfachsten ist es zu verstehen
wenn du in deiner rdomain 1 mal ein 2tes virtuelles if z.b. vether0 mit der ip 10.10.10.1 /24 erstellst
und das default gw in der rdomain 1 dann auf die 10.10.10.1 legst.

dann mal pass any log on vether0 machst ( sinn gemäß )

nun kannst du schön im pflog beobchten was das packeta macht.

alternativ geht auch tcpdump -n -i vether0


ein pass on vether0 from any to any nat-to (lan_if) rtable 0 würde alle packete dann nach lan naten .

holger
 
Super, genau diese Info habe ich gebraucht! Die Quellen, die ich bisher zurate gezogen habe nämlich nur in eine Richtung eine Route gesetzt und in die andere eine pf-Regel. In der rdomain in der meine pf-Regel greifen soll (statt Route) habe ich in der Tat keine Default-Route gesetzt. Fortsetzung folgt..
 
Du magst Dir auch noch pair(4) anschauen - die Zeiten (wie in dem urspruenglichen Link), wo man das alles mit pf "rumwuchten" muss, sind nicht mehr zwingend.
 
Wenn OpenBSD noch source routing hätte...

Gängiger Fall bei mir ist z.B. "diese IP-Adresse muss über die rdomain raus".
 
Wenn OpenBSD noch source routing hätte...

Gängiger Fall bei mir ist z.B. "diese IP-Adresse muss über die rdomain raus".

zum glück abgeschafft ..............

es geht hier darum rdomains und deren funktion zu verstehen.

wenn da 1x der groschen gefallen ist , sind rdmoans eine wirklich feine sache , sogar aus security sicht.

selbst wenn man pair verwendet muss man das routing , im speziellen die rück route , beachten.

her sollte man überlegen wofür, und warum ich rdmains nutzen will.

holger
 
Wäre halt schön, das auch nicht mit pf rumwuchten zu müssen, zumal dabei noch einige Fehler auftreten, die z.B. ein traceroute verhunzen.
 
hi

dann hast du rdomains noch nicht verstanden.

das das Routing Komplett isoliert ist muss das Paket über den kernel zu einer anderen rdomain
und da biete sich pf einfach an.



holger
 
source routing ist zum glück vor einigen jahren aus dem kernel rausgeflogen , zu recht.

ich finde leider nicht auf den schnelle die entsprechende errata

holger
 
Habe versucht in rdomain1 eine Default-Route einzutragen...ohne Erfolg.

# route -T 1 -n show -inet
192.168.2/24 192.168.2.10 UC 0 0 - 4 em2
192.168.2.10 00:0c:29:91:68:50 UHLl 0 0 - 1 em2
192.168.2.255 192.168.2.10 UHb 0 0 - 1 em2

Und nun:
# route -T 1 add default 172.16.151.2 (default GW in rdomain 0)
add net default: gateway 172.16.151.2: Network is unreachable

Stehe wieder auf dem Schlauch :(
 
default gw muss in der rdmaon geset werden

du kann auch ein

ifconfig vether0 172.16.151.2/24 rdomain 1 machen

und da dann default gw setzen .

die doppelte ip stört dann nich das ja das ganze gekapselt ist.

holger
 
Zurück
Oben