relayd(8) lernt rdomain(4)

double-p

BOFH
Es hat ein bischen gedauert, aber jetzt habe ich zumindest mal was zum testen *hint*.

Patches fuer relayd und relayctl: https://github.com/double-p/smtf/tree/master/patches

Damit kann man dann sowas machen:
Code:
/etc/relayd-21.conf:
table <local> { 127.0.0.1 }
redirect "foo" {
  listen on 127.0.0.1 port http
  forward to <local> port 8000 check icmp rtable 21
}

/etc/relayd-23.conf:
table <local> { 127.0.0.1 }
redirect "bar" {
  listen on 127.0.0.1 port http
  forward to <local> port 8000 check icmp rtable 23
}

Dann das minimum an rdomain networking:
Code:
ifconfig lo1 127.0.0.1/8 rdomain 21 up
ifconfig lo2 127.0.0.1/8 rdomain 23 up
route -T 21 -n add default 127.0.0.1
route -T 23 -n add default 127.0.0.1
ohne route geht immer so garnix...
Dann zwei relayd in unterschiedlichen rdomain und neben eigener config auch eigener socket:
Code:
# route -T 21 exec usr.sbin/relayd/obj/relayd -d -v -a rdr21 -f /etc/relayd-21.conf -s /var/run/rdr21.sock &
startup
host 127.0.0.1, check icmp (0ms,icmp ok), state unknown -> up, availability 100.00%
table foo: 1 added, 0 deleted, 0 changed, 0 killed

# route -T 23 exec usr.sbin/relayd/obj/relayd -d -v -a rdr23 -f /etc/relayd-23.conf -s /var/run/rdr23.sock &
startup
host 127.0.0.1, check icmp (0ms,icmp ok), state unknown -> up, availability 100.00%
table bar: 1 added, 0 deleted, 0 changed, 0 killed
Damit laufen die (# ps auxo rtable |grep relayd) und man sieht auch die entsprechenden rdr-to in die ziel rtable on der 'on rdomain' passend dazu.
Code:
# usr.sbin/relayctl/obj/relayctl -s /var/run/rdr21.sock show sum
Id  Type  Name  Avlblty Status
1  redirect  foo  active
1  table  local:8000  active (1 hosts)
1  host  127.0.0.1  100.00% up

# pfctl -a 'rdr23/*' -sr
anchor "bar" all {
  pass in quick on rdomain 23 inet proto tcp from any to 127.0.0.1 port = 80 flags S/SA keep state (tcp.established 600) rtable 23 rdr-to <bar> port 8000 round-robin
}

Feedback zum patch gerne genommen..
 
hi

würde auch das thema "routing gateway" funktionieren ?

wenn ja , würde ich das am we mal testen

holger
 
Usecase:
Du hast 5 Kunden, jeder hat ein carpX (1-5). Das ist je in einer eigenen routing domain 1-5.
Um jetzt redirect-relayd verwenden zu koennen, muss ich relayd 5 mal starten (on rdomain) und kontrollieren koennen..
Das ist zum einen via relayctl (+ -s /var/run/kunde1.sock ..) und zum anderen via dem entsprechenden
anchor in pf.conf (anchor "kunde1/*"). Das 'rtable' keyword in der config ist dann noch Beiwerk, wenn man
ggfs noch zwischen den rdomains hin und her muss/will.
 
Usecase:
Du hast 5 Kunden, jeder hat ein carpX (1-5). Das ist je in einer eigenen routing domain 1-5.
Um jetzt redirect-relayd verwenden zu koennen, muss ich relayd 5 mal starten (on rdomain) und kontrollieren koennen..
Das ist zum einen via relayctl (+ -s /var/run/kunde1.sock ..) und zum anderen via dem entsprechenden
anchor in pf.conf (anchor "kunde1/*"). Das 'rtable' keyword in der config ist dann noch Beiwerk, wenn man
ggfs noch zwischen den rdomains hin und her muss/will.

Mmh, aber wenn Du einen icmp-check machst, geht der doch eh nur in der rdomain, in der relayd gestartet wurde?!
Und wenn Du zwischen den Kunden/rdomains Pakete schicken willst, gibt es doch pair(4)?
 
Dass das Beispiel nur die neue "Faehigkeit" aufzeigt, sollte schon klar sein? ;-) So fuer sich ergibt das Beispiel natuerlich keinen "Zweck".

Der check an sich soll ja auch "innerhalb" sein. pair(4) geht natuerlich "auch", muss man dann wieder filtern, statt explizit 'pass'en.
 
Ich brauche halt manchmal bissel länger. Könntest Du das neue Feature bitte mal an einem konkreten Beispiel erklären?
 
Siehe Beitrag 5 als "Grundlage". Mit dem aktuellen 6.0-relayd geht sowas wegen folgender Probleme nicht so wirklich:
ich kann zwar zB zwei relayd starten, aber
a) schreiben beide unterhalb des anchor "relayd/*" - und wenn einer davon beendet wird, raeumt er darunter *alles* auf
b) "benutzen" beide /var/run/relayd.sock fuer die Ansteuerung via relayctl. Effektiv hat der zuletzt gestartete den
Socket auf (und verwirft ihn beim beenden); damit kann man auch nur schlecht arbeiten (show sum, disable host/table, ..)
c) relayctl hat auch nur statisch definiert /var/run/relayd.sock als control-socket
Diese "Probleme" behebt mein patch.

In einem "wenn ich schonmal bei bin", habe ich noch das rtable als table-option hinzugefuegt. Wie schon geschrieben,
ist pair(4) nicht immer wuenschenswert oder macht dann wieder mehr Arbeit als es erspart.

Ich hab vorhin auch meinen Talk von naechster Woche schon hochgeladen, evtl. hilft das auch noch ein bischen weiter,
sonst gerne fragen.
https://github.com/double-p/smtf/blob/master/asiabsdcon2017-talk.pdf
 
Danke!!!

Jetzt habe ich es verstanden.

Also für mich nochmal zum Verständnis: Du willst relayd als relay in rdomain 1 laufen lassen und ggf. nach rdomain 2 relayen?! Und dementsprechend den icmp-Check von relayd in rdomain 1 nach rdomain 2 laufen lassen?!

Das mit den Sockets hatte ich ned im Kopf und auch ned mit den Anchors.

Vielen Dank für Deine Erläuterung - klingt richtig spannend! Werde ich bei Gelegenheit mal testen.
 
Zurück
Oben