Keksinautin
@Keksinautin
Software Engineer

VMware подменяет порт для пассивного ftp подключения?

На моей машине (ubuntu 13.10) установлен VMware Player 6.0.1.
В нем запускаю BitrixVM4.2, по сути это CentOS 6.3.
В виртуалке запущен vsftpd на 21 порту. Eго конфиг:
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022

dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES

xferlog_std_format=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

chroot_local_user=YES

pasv_enable=YES
pasv_min_port=10121
pasv_max_port=10123
pasv_address=127.0.0.1

Но в нем я почти не сомневаюсь, на другом сервере этот конфиг (только без переопределений для pasv) прекрасно работает.
К нашему ftp стучимся через NAT, настроенный в VMware, его конфиг:
[host]
ip = 192.168.117.2
netmask = 255.255.255.0
device = /dev/vmnet8
activeFTP = 0
allowAnyOUI = 1
resetConnectionOnLinkDown = 1
resetConnectionOnDestLocalHost = 1

[tcp]
timeWaitTimeout = 30

[udp]
timeout = 60

[netbios]
nbnsTimeout = 2
nbnsRetries = 3
nbdsTimeout = 3

[incomingtcp]
2222  = 192.168.117.128:22
10021 = 192.168.117.128:21
10080 = 192.168.117.128:80
10033 = 192.168.117.128:33
#ftp-passive ports
10121 = 192.168.117.128:10121
10122 = 192.168.117.128:10122
10123 = 192.168.117.128:10123

[incomingudp]

Логика работы такая:
> telnet 127.0.0.1 10021
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 (vsFTPd 2.2.2)
user bitrix
331 Please specify the password.
pass bitrix
230 Login successful.
pasv
227 Entering Passive Mode (127,0,0,1,167,77).
list

- стучимся на 127.0.0.1:10021, попадаем на наш vsftpd;
- логинимся, переключаемся в пассивный режим (потом спрашиваем LIST);
А вот тут интересно:
нам приходит ответ: "227 Entering Passive Mode (127,0,0,1,164,77)";
т.е. нам нужно подключится к 127.0.0.1:42061 (164 << 8 + 77).
Но как? vsftpd может открывать порты для пассивного режима только в диапазоне 10121-10123.
Что собственно он и делает, смотрим на серваке - нас ждет открытый порт 192.168.117.128:10122.
А 127.0.0.1:42061 любезно открывает VMware (числится за процессом vmnet-natd).
Только если мы на него постучимся, получаем ничего:
> telnet 127.0.0.1 42061
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Connection closed by foreign host.

Если обратимся к 127.0.0.1:10122, то получим, что и хотели (например LIST).
К тому же, если обращаться к vsftpd из гостевой ос (без NAT), то все отлично: для пассивного режима возвращается тот порт, который и открыт - подключаемся туда, забираем результат.
А вот если из базовой ос, через NAT, то каким-то образом VMware подменяет порт в ответе "227", и заставляет клиента стучаться к себе, но ничего не отвечает.
Приветствуется любая помощь:
- может кто-то объяснит мне дураку, что я делаю не так;
- или расскажет способ для проброса ftp через VMware получше.
  • Вопрос задан
  • 4338 просмотров
Решения вопроса 1
Keksinautin
@Keksinautin Автор вопроса
Software Engineer
Пока проблему для себя решил забив на NAT и используя Bridged (виртуальная машина получает отдельный ip в локальной сети). Но если ответ на вопрос все же найдется, имхо, будет очень полезно, т.к. ответа в гугле я не нашел.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
kenny_opennix
@kenny_opennix
Открыл свой конфиг у меня еще добавлены такие строчки
pasv_promiscuous=YES
pasv_address=ip
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы