В такива случай е добре да пуснеш един tcpdump на фтп сървъра и да се замислиш какво се случва. Ей, много обичам да развивам сценарии аз

'> Значи клиента (.5 да речем) се опитва да установи връзка със машината (.66) която го ДНАТ-ва към фтп сървъра (.21). Как преминава това?
TCP (.5 -> .66, SYN)
.66 DNAT-ва, адреса на получателя се променя на .21 и пакета се препраща (.5 -> .21, SYN)
.21 получава пакета и се опитва да установи връзка: (.21 -> .5, SYNACK)
.5 получава отговора, обаче отговорът идва от .21, а не от .66, следователно пакета-отговор или е сбъркан или не е за него => връзка не се установява.
Следователно очевидно на фтп сървъра (.21) се налага да се сложи едно правило за SNAT, така че адреса-източник да бъде .66, а не неговия.
Обаче, както вече се спомена, има други грозни моменти в цялата работа..данните преминават по други сокети, по UDP и на случайни портове. След добавяне на SNAT правилото ще се установи че се връзваш, но нито ls можеш да изпълниш, нито да теглиш файлове.
Трансфери биха били възможни само в ACTIVE режим, с PASV няма вариант. Идеята е да създадеш на фтп сървъра още едно SNAT правило, което да променя адреса-източник за всички UDP пакети със source port 20 (ftp-data) от .21 на .66. При това положение клиентът (.5) ще прати по контролния канал (tcp,21) номера на порта, на който сървъра трябва да се свърже, за да изпрати данните. Сорс порт-а при това положение винаги е 20 според протокола.
В пасивен режим, сървъра праща на клиента номер на порт на който да се върже да си издърпа данните. Тъй като това е случаен порт много трудно ще стане момента с ДНАТ-ването при .66
Та значи трябва да сложиш следните правила на фтп сървъра (.21):
iptables -t nat -A POSTROUTING -p tcp --sport 21-j SNAT --to-source 192.168.0.66:21
iptables -t nat -A POSTROUTING -p udp --sport 20 -j SNAT --to-source 192.168.0.66:21
На .66 ще трябва да се добави и това правило:
iptables -t nat -A PREROUTING -p udp --dport 20 -j DNAT --to-destination 192.168.0.21:20
Тези стъпки ако малоумната ми теория е вярна биха решили проблема стига да не указваш на фтп клиента да ползва passive mode.