Download: SysadminCharly

Transkrypt

Download: SysadminCharly
Warsztat admina
SYSADMIN
Z poradnika administratora: Portfwd
NOWE
KIERUNKI
Przychodzące połączenia TCP nie zawsze trafiają tam,gdzie powinny.
Oferujący szerokie możliwości konfiguracji program
przeadresowujący kieruje je we właściwe miejsca.
CHARLY KÜHNAST
J
akiś czas temu prezentowaliśmy Rinetd
[1], program przeadresowujący TCP. Jest
on mały, niezawodny i łatwy w konfiguracji, ale niestety brakuje mu bardziej zaawansowanych możliwości. W tym miesiącu testuję
Portfwd, narzędzie oferujące niektóre funkcje,
których nie ma w Rinetd. Portfwd (Port Forwarding Daemon, [2]) zapisany jest w postaci
116-kilobajtowego archiwum tar, które można
zbudować i zainstalować w zwykły sposób:
./configure; make; make install
Wiąże się z tym jeden problem: gdy wpisałem polecenie make install, najważniejszy plik
binarny ukrył się w katalogu src. Rozwiązałem
to, tworząc odpowiednie dowiązanie symboliczne (ln -s /usr/local/portfwd-0.27/src/portfwd
/usr/bin/portfwd).
Bez wysiłku
Sprawdźmy najpierw, jak Portfwd radzi sobie z prostymi przekierowaniami. Chcielibyśmy przekazywać wszystkie pakiety TCP
przychodzące przez port 80 do serwera o adresie 10.20.30.40. Plik konfiguracyjny wygląda następująco:
user nobody
group nobody
tcp { 80 { => 10.20.30.40:80 } }
W zewnętrznym nawiasie klamrowym
znajduje się numer portu, na którym Port-
fwd odbiera połączenia przychodzące,
a w wewnętrznym nawiasie podany jest adres, na który zostają one przekierowywane.
Oczywiście, stary dobry Rinetd także to
umożliwiał. Odkryłem jednak, że w Portfwd
można podać wiele adresów docelowych i,
dzięki temu, wykorzystać go jako proste narzędzie do równoważenia obciążenia sieci
metodą round-robin. Zmieniłem pierwszy
przykład tak, aby połączenia przychodzące
na port 80 przekazywane były do dwóch serwerów, 10.20.30.40 i 10.20.30.41:
tcp { 80 { => 10.20.30.40:80,
10.20.30.41:80 } }
Gdybym korzystał z komputera o wielu adresach sieciowych (multi-homed), mógłbym
zdefiniować odpowiedni interfejs za pomocą
polecenia bind-adress. W ramach kolejnego
eksperymentu przydzieliłem mojemu komputerowi adresy 192.168.1.1 i 192.168.1.2.
Chcę, aby wszystkie połączenia przychodzące
na port 25 przekazywane były do dwóch innych serwerów pocztowych:
bind-address 192.168.1.1
tcp { 25 { => 10.20.30.40:25 } }
bind-address 192.168.1.2
tcp { 25 { => 10.20.30.40:25 } }
W odróżnieniu od Rinetd, Portfwd umożliwia przekazywanie nie tylko połączeń TCP,
WWW.LINUX-MAGAZINE.PL
ale także datagramów UCP. Poniższa reguła
odpowiada za przyjmowanie zapytań o DNS
i przesyłanie ich do serwera dns.example.com:
udp { 53 { => §§
dns.example.com:53 } }
Odporność
Portfwd pozwala także zdefiniować szczególne przypadki dla połączeń, które są często
zrywane. Parametr fragile sprawia, że w przypadku wystąpienia błędów program Portfwd
jest bardziej „pobłażliwy” i częściej podejmuje próby ponownego nawiązania połączenia:
fragile tcp { 80 { => §§
dialup.example.com:8080 } }
Ustawienia tego lubię używać wtedy, kiedy
chcę, aby komputer centralny wyglądał z zewnątrz jak monstrum z ogromną liczbą funkcji, choć w rzeczywistości większość z tych
funkcji przekazuję, w miarę potrzeb, innym
komputerom w podsieci. ■
INFO
[1] Charly Kühnast, „Z poradnika administratora: Rinetd”: Linux Magazine 11/02,
str. 51
[2] Portfwd: http://portfwd.sf.net
NUMER 20 PAŹDZIERNIK 2005
59

Podobne dokumenty