![FTP-клиенты (любые) будут зависать на MLSD в пассивном режиме в macOS Big Sur 11.4 и 11.5](https://rvso.com/image/1654354/FTP-%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D1%8B%20(%D0%BB%D1%8E%D0%B1%D1%8B%D0%B5)%20%D0%B1%D1%83%D0%B4%D1%83%D1%82%20%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B0%D1%82%D1%8C%20%D0%BD%D0%B0%20MLSD%20%D0%B2%20%D0%BF%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%BC%20%D1%80%D0%B5%D0%B6%D0%B8%D0%BC%D0%B5%20%D0%B2%20macOS%20Big%20Sur%2011.4%20%D0%B8%2011.5.png)
Недавно я заметил странную проблему с macOS Big Sur 11.4 и 11.5 (Mac M1), когда все FTP-клиенты, независимо от того, какой я использую, заканчиваются одной и той же проблемой. (CyberDuck, FileZilla или просто старый добрый MC). О проблеме мне сообщил другой пользователь в другой сети с той же ОС.
Проблема в том, что FTP-клиент зависает на команде MLSD и выходит из строя по тайм-ауту. Иногда вы можете перечислить несколько каталогов, и через несколько секунд он заблокируется.
То же самое поведение с TLS или просто FTP. Никакой сетевой активности после MLSD. Проверено с помощью Wireshark.
12:06:29 Response: 257 "/public_html" is your current location
12:06:29 Trace: CFtpChangeDirOpData::ParseResponse() in state 5
12:06:29 Trace: CFtpControlSocket::ResetOperation(0)
12:06:29 Trace: CControlSocket::ResetOperation(0)
12:06:29 Trace: CFtpChangeDirOpData::Reset(0) in state 5
12:06:29 Trace: CFtpListOpData::SubcommandResult(0) in state 1
12:06:29 Trace: CControlSocket::SendNextCommand()
12:06:29 Trace: CFtpListOpData::Send() in state 2
12:06:29 Trace: CFtpRawTransferOpData::Send() in state 0
12:06:29 Trace: CFtpRawTransferOpData::Send() in state 2
12:06:29 Command: PASV
12:06:29 Trace: tls_layer_impl::on_read()
12:06:29 Trace: CFtpControlSocket::OnReceive()
12:06:29 Response: 227 Entering Passive Mode (*,*,*,*,133,42)
12:06:29 Trace: CFtpRawTransferOpData::ParseResponse() in state 2
12:06:29 Trace: CControlSocket::SendNextCommand()
12:06:29 Trace: CFtpRawTransferOpData::Send() in state 4
12:06:29 Trace: Binding data connection source IP to control connection source IP 192.168.1.145
12:06:29 Trace: tls_layer_impl::client_handshake()
12:06:29 Trace: Trying to resume existing TLS session.
12:06:29 Command: MLSD
Я протестировал это с macOS Big Sur 11.2 на другом MacBook (Intel) в той же сети Wi-Fi с той же версией FileZilla, и все работает без проблем.
Также я заметил, что на M1 Big Sur 11.4 и 11.5 иногда Chrome получает "connection timeout" и я также не могу подключиться через SSH. Я думаю, что что-то не так с TCP.
Обновлять: Итак, я проверил трафик с помощью Wireshark и похоже, что по какой-то причине есть один пакет TCP SYN, а на Big Sur 11.2 я получаю SYN ACK от FTP-сервера. С Big Sur 11.4 и 11.5 есть TCP SYN, но нет ответа ACK от сервера. Сервер получит SYN, но не ответит на этот пакет ACK.
решение1
Проблема была вызвана конфигурацией на стороне CentOS. Это повлияло на Big Sur 11.3+, так как 11.2 работала с ней нормально. Windows 10 также работала нормально без проблем.
Исправлено:
sysctl -w net.ipv4.tcp_tw_recycle=0