You need to remove port 2990 from the backend server.
Haproxy needs to connect the same port from the frontend to the backend server (30000 on the frontend needs to go to 30000 on the backend, not be forced to port 2121 or 2990, which is control plane, not the data plane).
Also I’m not convinced that your backend servers actually support the proxy protocol. How can you be certain that the support the binary v2 proxy protocol on both control and data plane ports?
But from the documentation i’ve understood that port 2990 here is only for checks, rzv-app01-ftp.rozzano.diennea.lan:2990 would instead cause a redirection.
Anyway i’m sure that the backend support proxy protocol because is declared in teh documentation, and there are some opzion to enable it, so if it dosen’t work i definitely a bug, an this is a possibility.
Anyway…as said plain ftp on 2121 works well, this points me in the direction that the probelm is in my setup.
Maybe the proxy protocol is only supposed to be enabled for the control protocol, not the data plane?
Maybe there is no issue with haproxy and crushftp at all and clear text FTP is the only protocol that works because a NAT helper is actually able to help out, while this is obviously not possible for FTP with TLS.