Auf einem Server einlaufenden TCP-Connections kann man nicht immer auch genau dort gebrauchen. Ein frei konfigurierbarer Redirector lenkt das digitale Strandgut an einen neuen, besseren Ort um.
| Inhalt | |
|---|---|
| 62 | TCP-Reset TCP-Verbindungen lassen sich viel leichter abschießen, als Protokollexperten immer dachten. Wo genau lag deren Rechenfehler? Und wie real ist die daraus entstehende Bedrohung? |
| 69 | Admin-Workshop Der X-Server ist Grundlage fast jeder grafischen Darstellung unter Linux. X11 bietet zudem hervorragende Netzwerkfähigkeiten und Möglichkeiten fürs Tuning. Der Workshop vermittelt Grundlagen, um sie zu nutzen. |
Vor einiger Zeit habe ich an dieser Stelle über Rinetd geschrieben [1], einen TCP-Redirector. Rinetd ist einfach konfigurierbar, schlank und zuverlässig. Im Gegenzug fehlen ihm alle fortgeschrittenen Features. Heute tritt Portfwd an, um diese Lücke zu schließen. Portfwd (Port Forwarding Daemon, [2]) kommt als 116 KByte großer Tarball, der sich wie üblich per
./configure; make; make install
installiert. Jedenfalls fast, denn das entscheidende Binärfile versteckte sich bei mir nach dem »make install« im Unterverzeichnis »src«. Ein Symlink (»ln -s /usr/local/portfwd-0.27/src/portfwd /usr/bin/portfwd«) behebt dies.
Erstes Beispiel: Kaum der Schreibe wert
Zunächst schauen ich mir an, wie Portfwd eine einfache Umleitung konfiguriert bekommt. Er soll alle TCP-Pakete, die auf Port 80 ankommen, an den Port 80 des Servers 10.20.30.40 weiterleiten. Die Konfigurationsdatei sieht so aus:
user nobody
group nobody
tcp { 80 { => 10.20.30.40:80 } }
In den äußeren geschweiften Klammern steht der Port, auf dem Portfwd eingehende Verbindungen annimmt, und in den inneren Klammern macht es sich das Ziel der Weiterleitung gemütlich. Das kann der gute alte Rinetd auch. Aber durch Angabe mehrerer Ziele entpuppt sich Portfwd schnell als einfacher Round-Robin-Loadbalancer. Ich modifiziere das erste Beispiel so, dass es eingehende Verbindungen auf Port 80 an zwei Server, 10.20.30.40 und 10.20.30.41, weiterleitet:
tcp { 80 { => 10.20.30.40:80,
10.20.30.41:80 } }
Hat meine Maschine mehrere IP-Adressen, so ist mittels »bind-adress« spezifizierbar, welches Interface ich meine. In meinem dritten Versuch hat mein Rechner die Adressen 192.168.1.1 und 192.168.1.2. Hier auf Port 25 einlaufende Verbindungen soll der Rechner auf zwei andere Mailserver weiterbeamen:
bind-adress 192.168.1.1
tcp { 25 { => 10.20.30.40:25 } }
bind-adress 192.168.1.2
tcp { 25 { => 10.20.30.41:25 } }
Portfwd verbiegt im Gegensatz zu Rinetd nicht nur TCP-Verbindungen, sondern gibt UDP-Datagrammen auch eine neue Richtung. Die Regel
udp { 53 { => dns.example.com:53 } }
sorgt dafür, dass er DNS-Anfragen annimmt und an den Server »dns.example.com« weiterleitet.
Wackelkandidatinnen
Außerdem erlaubt mir Portfwd, Verbindungen zu Servern, die an einer wackligen Anbindung hängen, einer Spezialbehandlung zu unterziehen. Das zarte Stichwort »fragile« weist Portfwd dazu an, bei Verbindungsfehlern großzügig zu sein und es – wie bei einer anmutigen Dame – öfter aufs Neue zu versuchen:
fragile tcp { 80 { =>
dialup.example.com:8080 } }
Mit diesem Rüstzeug statte ich gern all jene zentralen Rechner aus, die von außen wie Funktionsmonster wirken sollen, deren Dienste ich aber in Wirklichkeit auf andere Maschinen ausgelagert habe. Hauptsache die neuen Flugbahnen der TCP-Verbindungen stimmen. (jk)
| Infos |
|---|
| [1] Charly Kühnast, “Aus dem Leben eines Sysadmin: Rinetd”: Linux-Magazin 10/02, S. 67
[2] Portfwd: [http://portfwd.sf.net] |





