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