Nowe posty

Autor Wątek: ProFTPD - połączenie z serwerem  (Przeczytany 2994 razy)

eskill

  • Gość
ProFTPD - połączenie z serwerem
« dnia: 2012-10-01, 21:24:07 »
Witam,

Na bardzo starym komputerze (P166 MMX) zainstalowałem Slackware 8.0 (2.2.19),
sprzęt miał realizować tylko SSH i FTP. Do FTP zainstalowany jest ProFTPD.

Podczas próby połączenia na adres zewnętrzny, badz tez porzez usługę routera
DynDNS.org, klient FTP nie łączy się i pojawia się komunikat:

pod Ubuntu:  connect: Connection timed out
pod Windows: połączenie przerwane przez hosta zdalnego

Połączenie po LAN (na adres wew. - 192.168.x.x) łączy się z FTP bez problemu.
SSH też działa i łączy zarówno na adres wew. jak i zew.
Na routerze forwardowane mam porty 20, 21 i 22.
iptables ani inne filtrowanie raczej nie jest włączone.

Co jeszcze należy zrobić żeby z FTP było połączenie przez Internet?

Pozdrawiam i z góry dziękuję za podpowiedzi.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3069
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
ProFTPD - połączenie z serwerem
« Odpowiedź #1 dnia: 2012-10-01, 23:03:25 »
W ogólności serwer FTP nie nadaje się do przebywania za NATem.

FTP ma dwa tryby pracy:

Active - łączysz się do serwera FTP na port 21 (tzw. kanał kontrolny), przy przesyłaniu plików w dowolną stronę wysyłasz do serwera komendę PORT zawierającą adres i port na którym TY słuchasz a serwer tam "oddzwania". Po zestawieniu tego połączenia (kanał danych) dane są przesyłane w odpowiednią stronę. Zalety - serwer musi wystawić w internet tylko jeden port (TCP/21). Wady - lipa jak klient jest za własnym NATem (FTP--NAT---WAN---NAT--Klient), bo wtedy klient pokaże w "PORT" swój adres prywatny a serwer nie będzie się w stanie tam połączyć. Pomocą jest tzw "helper NAT" działający na nacie u klienta i podmieniający prywatne adresy w poleceniu PORT na swój adres publiczny i robiąc tymczasowe połączenie zwrotne dla serwera oddzwaniającego do klienta.

Passive - tak jak poprzednio łączysz się do serwera FTP na port 21, przy przesyłaniu plików w dowolną stronę wysyłasz do serwera komendę PASV na którą serwer losuje u siebie port i odsyła klientowi dane gdzie klient ma się połączyć z kanałem danych. Działa świetnie, gdy klient jest za NAT (bo oba połączenia są klient->serwer) ale się sypie gdy to serwer jest za NATem. Są tu dwa rozwiązania: pierwsze - w serwerach FTP możesz ustalić zakres portów z których losowana jest odpowiedź na PASV oraz wymuszasz adres na zewnętrzny (a nie samego serwera). Szacujesz, ile maksymalnie transferów plików może odbywać się równocześnie (polecenie LS też potrzebuje kanału danych) i rezerwujesz tyle portów (np od X do Y) i wszystkie te porty przekierowujesz na serwer (oczywiśnie 21 też). drugie - helper FTP działa w dwie strony: użyty na nacie za którym jest serwer przechwytuje odpowiedź serwera na PASV (z prywatnym adresem serwera i portem wylosowanym przez serwer), podmienia to na swój publiczny adres i jakiś swój wolny, wylosowany port i robi dynamiczne, tymczasowe przekierowanie z "podłożonego" portu do serwera.

Najbardziej elastycznym rozwiązaniem jest transfer PASV (teraz właściwie default wszystkich klientów FTP) oraz zainstalowany na nacie przed serwerem helper FTP (wystarczy załadować moduł przez modprobe ip_conntrack_ftp).

HTH.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy