LINUX.ORG.RU
ФорумAdmin

ip адрес для pasv

 , ,


0

1

господа. прошу помощи. прокидываю фтп через нат. все работет, все хорошо, но смущает один момент. лог filezilla:

Ответ: 200 Switching to Binary mode. Команда: PASV Ответ: 227 Entering Passive Mode (172,17,251,14,155,95). Статус: Сервер отправил пассивный ответ с неопределяемым адресом. Использую существующий адрес сервера.

дело в том что нат-сервер отдает свой внутренний ip адрес, а подключаюсь я к внешнему. подключение происходит, но хочется знать есть ли возможность задать этот адрес.


нат-сервер отдает свой внутренний ip адрес

Не ftp-сервер, а NAT-cервер? То есть модуль nf_nat_ftp загружен, но подменяет адрес на неправильный?

mky ★★★★★
()

Можно в настройках FTP сервера указать какой IP отдавать для пассивных соединений. Но это пожалуй не лучший вариант, лучше через conntrack

MrClon ★★★★★
()
Ответ на: комментарий от mky

Да, nf_nat_ftp подменяет адрес на локальный: 172,17,251,14

А я хочу чтобы он менял на внешний. Но машина эта не знает про свой внешний адрес. Можно ли где-то указать nat_ftp на какой адрес ему подменять?

fote
() автор топика
Ответ на: комментарий от MrClon

Дело в том, что когда клиент подключается, он проходит через NAT. На NAT-e заменяется IP-адрес, который отдает сервер для пассивного соединения, на локальный IP этой машины. А нужно чтобы он заменял на внешний.

fote
() автор топика
Ответ на: комментарий от fote

Но машина эта не знает про свой внешний адрес.

Это как? Там ещё один NAT по дороге, что-ли?

Так, nf_nat_ftp переписывает содержимое пакета с командой PASV и ставит там адрес и порт в соответствии с записью в conntrac, то есть как этот пакет будет отначен на данной машине.

Наверное, можно пропатчить kernel-src/net/ipv4/netfilter/nf_nat_ftp.c, и сделать, чтобы можно было задавать произвольный адрес, но мне не понятна ваша ситуация с незнанием машины её ip-адреса. А если там дальше её один NAT, то он ведь может менять не только ip-адрес, но и порт.

mky ★★★★★
()
Ответ на: комментарий от mky

Да, есть еще один нат. Машина сидит в локалке. Т.е. клиент проходит нат, через фаервол, приходит в локальную сеть, на нат, который сейчас настраиваю.

Схема извращенная, но по другому никак.

ставит там адрес и порт в соответствии с записью в conntrac

В смысле с записью conntrac? Её можно где нибудь поменять?

fote
() автор топика
Ответ на: комментарий от fote

Схема нормальная, но чтобы пассивный ftp работал, нужно на каждом nat поддержку ftp-протокола.

Для работы с таблицей conntrack есть команда conntrack, по ней есть man. Только не знаю, правильно ли вы понимаете как устроен NAT в линуксе. Записи в iptables таблице nat это общие указания для ядра, они не занимаются переписыванием адресов в заголовках пакетов. Первый пакет соединения прогоняется через цепочки таблицы nat. Если правило сработало, то для данного соединения (пара ip-адресов и пара портов) создаётся (изменяется) запись в таблице conntrack, потом по этом записи меняется src или dst адрес пакета (SNAT или DNAT) и меняется dst или src адрес ответного пакет, соответственно. Поддержка nat'ом какого-либо протокола фактически означает, что будет изменён не только заголовок пакет (ip, tcp, udp), но и частично его содержимое. Изменёно для соответствия содержимого пакета его заголовку. И, если вы хотите менять содержимое пакета по своим правилам, то вам не таблицу conntrack править надо (так как это повлияет и на src/dst-адреса), а исходники ядра.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.