LINUX.ORG.RU
ФорумAdmin

FTP в нутри локалки


0

0

Есть сервер FreeBSD + PF(шлюз), и локальный фтп сервак который надо выставить и интернет. Проблема такая, соединение проходит нормально вот только как доходит до передачи данных то сервер обламывается. И тут мой любимый вопрос что делать?


# ee /etc/pf.conf

prov_if="rl0" # Внешния сетевуха
int_if="fxp0" # Внутренния сетевуха
ftp_server="192.168.0.250" # фтп который хотим выставить.
internal_net="{192.168.0.0/24}" # Локалка

vip_ip="{213.234.204.34, 213.85.45.24, 212.119.122.76, 89.19.165.12}"
proxy_server="{127.0.0.1}"

# LAN_to_INT="{ftp,ftp-data,www,https,ssh,smtp,pop3,nntp,8080,ntp,411,5190}"
# scrub in all
nat on $prov_if from $internal_net to any -> $prov_if
nat on $prov_if from $vpn_network to any -> $prov_if
# nat from $prov_if to 192.168.0.3 port 21 -> 127.0.0.1

# rdr on $int_if inet proto tcp from $internal_net to any port www -> $proxy_server port 3128
rdr on $prov_if proto tcp from any to any port 110 -> 192.168.0.3
rdr on $prov_if proto tcp from any to any port 25 -> 192.168.0.3
# rdr on $prov_if proto tcp from any to any port 21 -> 192.168.0.3
# rdr on $prov_if proto tcp from any to any port 22 -> 192.168.0.5
# rdr on $prov_if proto tcp from any to any port 8080 -> 192.168.0.5
rdr on $prov_if proto tcp from any to any port 80 -> 192.168.0.250

rdr on $prov_if proto tcp from any to any port ftp-data -> $ftp_server port 21
rdr on $prov_if proto tcp from any to any port 21 -> $ftp_server port 21
rdr on $prov_if proto tcp from any to any port 49152:65535 -> $ftp_server port 49152:65535

pass in all
pass out all

# in on $ext_if
pass in quick on $prov_if proto tcp from any to $ftp_server port ftp-data keep state
pass in quick on $prov_if proto tcp from any to $ftp_server port 21 keep state
pass in quick on $prov_if proto tcp from any to $ftp_server port > 49151 keep state

# out on $int_if
pass out quick on $int_if proto tcp from any to $ftp_server port ftp-data keep state
pass out quick on $int_if proto tcp from any to $ftp_server port 21 keep state
pass out quick on $int_if proto tcp from any to $ftp_server port > 49151 keep state

pass quick on $int_if all keep state

Кусок из tcpdump:

17:15:54.070414 IP qmail.natu.local.ftp > 213.234.**.**.52465: . ack 86 win 33304 <nop,nop,timestamp 9955566 3641805492>
17:15:56.971000 IP qmail.natu.local.ftp-data > 213.234.**.**.55995: S 1385387211:1385387211(0) win 65535 <mss 1460,nop,wscale 1,nop,nop,timestamp 9958467 0,sackOK,eol>
17:16:00.170475 IP qmail.natu.local.ftp-data > 213.234.**.**.55995: S 1385387211:1385387211(0) win 65535 <mss 1460,nop,wscale 1,nop,nop,timestamp 9961667 0,sackOK,eol>
17:16:03.369934 IP qmail.natu.local.ftp-data > 213.234.***.**.55995: S 1385387211:1385387211(0) win 65535 <mss 1460,sackOK,eol>
17:16:06.569416 IP qmail.natu.local.ftp-data > 213.234.**.**.55995: S 1385387211:1385387211(0) win 65535 <mss 1460,sackOK,eol>

anonymous

использовать пассивный режим у клиента? (кучу текста после человеческого не читал)

manntes ★★
()

Для ftp надо пробрасывать не один а два порта (23 и 24, если не ошибаюсь). Если за натом, то юзать conntrack из iptables(там вроде есть поддержка ftp).

Ну или выбросить этот некорректный протокол и юзать файлы через webdav, у которого нет проблем ftp и которых ходит через одно соединение.

gaa ★★
()
Ответ на: комментарий от gaa

>Для ftp надо пробрасывать не один а два порта (23 и 24, если не ошибаюсь)

21 и 20 imho

manntes ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.