MrReal Napisano Kwiecień 29, 2005 Zgłoszenie Share Napisano Kwiecień 29, 2005 Sytuacja jest następująca: Mam serwer NAT (FC2 - łącze DSL) na którym zrobiłem przekierowanie z portu 6001 na port 21 na serwer ftp, który działa na komputerze w LANie (Windows - CesarFTP): $IPT -A FORWARD -i eth1 -p tcp --dport 6001 -d 10.10.0.1 -j ACCEPT $IPT -t nat -A PREROUTING -p tcp --dport 6001 -j DNAT --to 10.10.0.1:21 -i eth1 Problem polega na tym, że nie każdy może się połączyć z ftp. Tzn niektóre osoby nie mają problemów podczas gdy inni nie mogą się połączyć. Oto log z ftp: Thu 28 Apr 2005 [20:55:54] 000001 USER anonymous Thu 28 Apr 2005 [20:55:54] 000001 User Public connected, login : anonymous Thu 28 Apr 2005 [20:55:54] 000001 331 User login OK, waiting for password Thu 28 Apr 2005 [20:55:54] 000001 PASS ********** Thu 28 Apr 2005 [20:55:54] 000001 User Public logged in successfully Thu 28 Apr 2005 [20:55:54] 000001 230 User password OK, CesarFTP server ready Thu 28 Apr 2005 [20:55:54] 000001 SYST Thu 28 Apr 2005 [20:55:54] 000001 215 Microsoft Windows Thu 28 Apr 2005 [20:55:54] 000001 FEAT Thu 28 Apr 2005 [20:55:54] 000001 500 Syntax error or unknown command Thu 28 Apr 2005 [20:55:54] 000001 PWD Thu 28 Apr 2005 [20:55:54] 000001 257 "/" Thu 28 Apr 2005 [20:55:54] 000001 TYPE A Thu 28 Apr 2005 [20:55:54] 000001 200 Type successfully set Thu 28 Apr 2005 [20:55:54] 000001 PORT 192,168,1,2,9,18 Thu 28 Apr 2005 [20:55:54] 000001 200 command successfully executed Thu 28 Apr 2005 [20:55:55] 000001 LIST Thu 28 Apr 2005 [20:55:55] 000001 150 Data connection created for directory listing Thu 28 Apr 2005 [21:00:15] 000001 PORT 192,168,1,2,9,30 Thu 28 Apr 2005 [21:00:15] 000001 200 command successfully executed Thu 28 Apr 2005 [21:00:15] 000001 LIST Thu 28 Apr 2005 [21:00:15] 000001 150 Data connection created for directory listing Thu 28 Apr 2005 [21:00:49] 000001 PORT 192,168,1,2,9,31 Thu 28 Apr 2005 [21:00:49] 000001 200 command successfully executed Thu 28 Apr 2005 [21:00:49] 000001 LIST Thu 28 Apr 2005 [21:00:49] 000001 150 Data connection created for directory listing User się załogował jednak nie może uzyskać listy katalogów. Zawsze w momencie "Data connection created for directory listing" następuje zwis, który kończy się po przekroczeniu timelimit przez klienta po czym zostaje on odłączny od serwera. Zauważyłem, że ten problem mają szczególnie osoby łączące się z Neostrady (jednak nie wszystkie). Dziwny jest fakt że ja mogę się bez problemu łączyć z serwerem ftp postawionym u kolegi który ma neo, ale on nie może się połączyć ze mną. Nie wiem co się dzieje. Myślałem że może trzeba odblokować jakieś dodatkowe porty, ale nie rozumiem dlaczego jedni łączą się bez problemu a inni nie. Przeprowadzałem testy z różnymi serwerami ftp i różnymi klientami jednak ciągle powtarzał się ten sam problem. Proszę o pomoc w wyjaśnieniu tego zjawiska. Pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
ati Napisano Kwiecień 29, 2005 Zgłoszenie Share Napisano Kwiecień 29, 2005 Załaduj moduły iptables chyba że masz skompilowane na stałe w kernelu modprobe ip_tables #ip_conntrack umozliwia sledzenie polaczen modprobe ip_conntrack # Raczej wymagane dla passive ftp modprobe ip_conntrack_ftp # wymagane przy przekierowaniu serwera ftp z LAN modprobe ip_nat_ftp I dodaj odpowiednie reguły IPT # Akceptujemy pakiety NEW na naszym porcie 21(ftp) tcp. # Oraz dla otworzenia kanalu danych w aktiv port 20 tcp. iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT iptables -A INPUT -p tcp --dport 20 -m state --state NEW -j ACCEPT Pamiętaj że FTP łączy sie na porcie 21 a 20 przesyła dane !!! wiec jak przekierowałeś i chcesz przesyłać na aktywnym połączeniu bedzie potrzebne odblokowanie portu 20. Dodatkowo zrób przekierowanie bo tego tu nie ująłem. Pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
mynus Napisano Kwiecień 29, 2005 Zgłoszenie Share Napisano Kwiecień 29, 2005 najłatwiej przekierować port 21, czyli tak: iptables -t nat -I PREROUTING -p tcp --dport 21 -i eth1 -j DNAT --to 10.10.0.1:21 z przekierowaniem innych portów zawsze pojawiał się problem, (ftp korzysta z portu 21 i 20 - jako active) przy trybie pasive również wykorzystuje 2 porty, więc jeśli koniecznie chcesz korzystać z portu 6001 czyli tak jak to zrobiłeś, to ustaw swojego klienia ftp w tryb passive i wszystko ruszy (błąd, który opisujesz polega właśnie na tym, że Twój klient ftp ustawiony jest jako active i oczekuje nawiązania połączenia przez serwer z portu 20, na porcie 21 przekazywane są tylko komendy, jednak Twój serwer nie nawiązuje tego połączenia, jeśli przestawisz klienta ftp na tryb pasive to sam otworzy drugie połączenie dla danych) zobacz tutaj: http://www.slacksite.com/other/ftp.html ------- P.S.1 testowałem te regułki: $IPT -A FORWARD -i eth1 -p tcp --dport 6001 -d 10.10.0.1 -j ACCEPT $IPT -t nat -A PREROUTING -p tcp --dport 6001 -j DNAT --to 10.10.0.1:21 -i eth1 działają po przestawieniu klienta na passive, jeśli tego nie uczynisz nawiążesz tylko połączenie i będziesz mógl wydać komendy ale nie dostaniesz odpowiedzi i po pewnym czasie zostaniesz rozłączony P.S.2 mam załadowane moduły do śledzenia połączeń (zobacz post ATI) Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się