Có vẻ như bạn đang chạy ứng dụng khách FTP của mình trên máy chủ được kết nối với máy chủ OpenVPN và lưu lượng truy cập của bạn được định tuyến trong VPN (vì vậy, đối với thế giới bên ngoài, địa chỉ IP nguồn của bạn là một trong những giao diện bên ngoài của máy chủ OpenVPN của bạn ).
Có thật không?
Nếu không .... xin vui lòng cho chúng tôi biết chi tiết.
Nếu có, vấn đề của bạn liên quan chính xác đến "hộp" OpenVPN:
là chính xác NATting các kết nối IP "tiêu chuẩn" của bạn (và trên thực tế, bạn có thể kết nối thành công với máy chủ FTP từ xa)
là KHÔNG đúng NATting giao thức FTP (mà, tiếc là, không phải là nhiều NAT thân thiện và được NATted, đòi hỏi phương pháp điều trị đặc biệt).
Để giải quyết vấn đề của bạn, bạn nên đảm bảo rằng mô-đun hạt nhân thích hợp được tải trên hộp NAT của bạn (OpenVPN). Trong Ubuntu của tôi (và có lẽ cũng trên CentOS 6):
# modprobe nf_conntrack_ftp
Mô-đun như vậy sẽ theo dõi cẩn thận tất cả lưu lượng truy cập dọc theo kết nối "điều khiển" FTP (loại mà bạn có thể thiết lập, để xác thực và "khởi chạy" tệp trasnslike) để kiểm tra cổng khách nào mà máy khách FTP của bạn đã khai báo sử dụng cho tệp -trasifts và kết nối điều khiển "xáo trộn" đúng cách (để "giả" các cổng như vậy, bằng cách áp đặt các hộp NAT).
Nói cách khác:
- không có các mô-đun trên:
- 1) Máy khách FTP thiết lập kết nối FTP đến máy chủ từ xa;
- 2) Máy khách FTP muốn bắt đầu truyền tệp (một "ls" đơn giản). Như vậy...
- 3) ... Máy khách FTP "mở" một cổng TCP để máy chủ FTP kết nối lại với cổng đó để truyền nội dung;
- 4) ... Máy khách FTP "báo cho" máy chủ FTP biết cổng nào đã được mở, sử dụng kết nối điều khiển được thiết lập tại điểm 1)
- 5) thật đáng tiếc, không có "đối xử đặc biệt", máy chủ FTP từ xa của bạn, đang đọc / ghi chính xác dọc theo kết nối được thiết lập tại điểm 1), nhận được cặp IP / PORT được chỉ định ở bước 4) có chứa địa chỉ IP "riêng tư" của bạn.
- 6) vì vậy máy chủ FTP thấy rằng kết nối điều khiển đến từ một IP trong khi kết nối dữ liệu liên quan đến một IP khác. Nó (chính xác) không thích một kịch bản như vậy, vì nó có thể dẫn đến một số kịch bản phản ánh / DDOS. Như vậy, nó sẽ gửi cho bạn thông báo lỗi mà bạn nhìn thấy.
.
- với mô-đun trên được tải
- mọi thứ đều giống như trên, ngoại trừ bước 5. Bước như vậy đã trở thành ...
- 5) hộp NAT của bạn, nhờ mô-đun conntrack_ftp, mở TCP PORT riêng (trên giao diện bên ngoài) và sẵn sàng nhận lại lưu lượng dữ liệu FTP trên các cổng đó. Sau khi nhận được, nó chuyển tiếp lưu lượng như vậy trở lại máy khách FTP của bạn. Ngoài ra, "kết nối điều khiển" được xử lý, do đó, để thay thế cặp IP / PORT được gửi bởi khách hàng của bạn bằng IP / PORT của hộp NAT.
- ... và nhờ vào điều này, mọi thứ sẽ hoạt động trơn tru :-) (... hoặc, ít nhất, tôi hy vọng).