Дмитрий Радищев (dibr) wrote,
Дмитрий Радищев
dibr

tcp/ip = -itc

     Особенности деления TCP на IP в наших местных интернетах.

     Если подключиться по FTP к моему домашнему серверу из сети ИПФ РАН (провайдер - Сэнди, которая сейчас "МТС Стрим"), то получится так, как ниже (звёздочками забит пароль и "локальный" адрес в PORT). Замечу, что домашний сервер подключён к тому же Сэнди, которая Стрим:

. 14-04-13 15:04:34: "connected!"
< 14-04-13 15:04:34: "220-SlimFTPd 3.181, by WhitSoft Development (www.whitsoftdev.com)\x0d\x0a"
< 14-04-13 15:04:34: "220-You are connecting from 194.190.188.1:39326.\x0d\x0a"
< 14-04-13 15:04:34: "220 Proceed with login.\x0d\x0a"
> 14-04-13 15:04:34: "USER dibr\x0d\x0a"
< 14-04-13 15:04:34: "331 Need password for user "dibr".\x0d\x0a"
> 14-04-13 15:04:34: "PASS ****\x0d\x0a"
< 14-04-13 15:04:34: "230 User "dibr" logged in.\x0d\x0a"
> 14-04-13 15:04:34: "SYST\x0d\x0a"
< 14-04-13 15:04:34: "215 WIN32 Type: L8 Version: SlimFTPd 3.181, by WhitSoft Development (www.whitsoftdev.com)\x0d\x0a"
> 14-04-13 15:04:34: "PWD\x0d\x0a"
< 14-04-13 15:04:34: "257 "/" is current directory.\x0d\x0a"
> 14-04-13 15:04:34: "TYPE I\x0d\x0a"
< 14-04-13 15:04:34: "200 TYPE command successful.\x0d\x0a"
> 14-04-13 15:04:34: "REST 0\x0d\x0a"
< 14-04-13 15:04:34: "350 Ready to resume transfer at 0 bytes.\x0d\x0a"
> 14-04-13 15:04:34: "PWD\x0d\x0a"
< 14-04-13 15:04:34: "257 "/" is current directory.\x0d\x0a"
> 14-04-13 15:04:34: "PORT *,*,*,*,12,96\x0d\x0a"
< 14-04-13 15:04:34: "502 Active FTP not allowed.\x0d\x0a"

. 14-04-13 15:04:36: "connection closed"


     Если же подключаться к нему же, но из другой сети (например, с мобильного интернета того же МТС, подключенного к тому же самому компьютеру), то результат будет немного другим:

. 14-04-13 15:06:26: "connected!"
< 14-04-13 15:06:26: "220-SlimFTPd 3.181, by WhitSoft Development (www.whitsoftdev.com)\x0d\x0a"
< 14-04-13 15:06:26: "220-You are connecting from 213.87.141.83:62466.\x0d\x0a"
< 14-04-13 15:06:26: "220 Proceed with login.\x0d\x0a"
> 14-04-13 15:06:26: "USER dibr\x0d\x0a"
< 14-04-13 15:06:26: "331 Need password for user "dibr".\x0d\x0a"
> 14-04-13 15:06:26: "PASS ****\x0d\x0a"
< 14-04-13 15:06:26: "230 User "dibr" logged in.\x0d\x0a"
> 14-04-13 15:06:26: "SYST\x0d\x0a"
< 14-04-13 15:06:26: "215 WIN32 Type: L8 Version: SlimFTPd 3.181, by WhitSoft Development (www.whitsoftdev.com)\x0d\x0a"
> 14-04-13 15:06:26: "PWD\x0d\x0a"
< 14-04-13 15:06:26: "257 "/" is current directory.\x0d\x0a"
> 14-04-13 15:06:26: "TYPE I\x0d\x0a"
< 14-04-13 15:06:27: "200 TYPE command successful.\x0d\x0a"
> 14-04-13 15:06:27: "REST 0\x0d\x0a"
< 14-04-13 15:06:27: "350 Ready to resume transfer at 0 bytes.\x0d\x0a"
> 14-04-13 15:06:27: "PORT *,*,*,*,12,120\x0d\x0a"
< 14-04-13 15:06:27: "200 PORT command successful.\x0d\x0a"
> 14-04-13 15:06:27: "TYPE A\x0d\x0a"
< 14-04-13 15:06:27: "200 TYPE command successful.\x0d\x0a"
> 14-04-13 15:06:27: "LIST\x0d\x0a"
< 14-04-13 15:06:27: "150 Opening active mode data connection for listing of "/".\x0d\x0a"
< 14-04-13 15:06:27: "226 LIST command successful.\x0d\x0a"
> 14-04-13 15:06:27: "TYPE I\x0d\x0a"
< 14-04-13 15:06:27: "200 TYPE command successful.\x0d\x0a"
. 14-04-13 15:07:04: "connection closed"


     Оба раза клиентский компьютер находился за NAT'ом (в случае мобильного интернета - по-моему даже за двумя NAT'ами, второй - в телефоне). Как известно, есть два способа пропустить "клиентский" FTP через NAT: модифицировать "на лету" команду PORT, подменяя адреса "транслируемыми" (до сих пор я видел в основном этот метод), или использовать пассивный режим (PASV) - правда, я пока не видел, чтобы его навязывали таким вот образом - подменяя ответ сервера, и имитируя отказ сервера работать в активном режиме.

     Ну PASV и PASV, и хрен с ним, казалось бы. Но! Услуга "статического IP", на котором висит мой домашний сервер, в исполнении от МТС выглядит несколько необычно. Выданного "белого" IP пользователь не видит, получает он по прежнему "серый" IP, но где-то внутри самого МТС есть этот самый "белый" IP, на котором настроен проброс входящих соединений на компьютер клиента. Для простых протоколов вроде HTTP этого и достаточно, но не для FTP в пассивном режиме: по команде PASV сервер должен сообщить, на какой адрес и порт должен обратиться клиент, а поскольку сам FTP "белого" адреса не видит - он выдаёт "серый", со всеми вытекающими. Обмануть (приписать к интерфейсу ручками ещё и "белый" адрес) не получается, подходящих опций у самого FTP не обнаружено. Поэтому получается смешно: я не могу соединиться из Сэнди (МТС) в Сэнди (МТС) по FTP, потому что оба возможных направления перекрыты самой Сэнди (МТС) :-)

     И возникает два вопроса. Один риторический, который я даже формулировать не буду (вопрос к обоим Сэнди, но в большей степени к той, которая у меня дома), а второй - практический. Практический вопрос - кто догадается, как я всё-таки выкрутился из этой ситуации? Вводная: сервер под виндой, FTP вот такой вот, и менять его я не буду, решение очень кривое (и я понимаю что оно очень кривое), но работающее :-)
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 17 comments