>[оверквотинг удален]
>> но проблема очевидно в этом. т.е какой-то модуль ядра или ipfw
>> должен отслеживать командный канал по порту 69 и автоматически открывать порт
>> для связанных соединений на пердачу данных.
>> PS
>> ИМХО Вам просто надо нагуглить нужный модуль и подгрузить его.
> Всё верно, и с этого произвольного порта идет попытка ответить клиенту, а
> нат не знает куда транслировать этот ответ, т.к. у него в
> таблице трансляции есть только 69 порт. Походу решением тут будет заставить
> сервер отвечать тоже по 69 порту. Вот только какой демон tftpd
> под фрибсд так умеет?никакой. tftp-сервер не может использовать порт 69 для передачи данных - это порт для передачи команд от пользователя. если сервер будет использовать данный порт для передачи данных, то на все время передачи он будет заблокирован и другой пользователь не сможет соединиться с сервисом. поэтому после получения команды ч/з порт 69 сервер для передачи данных открывает произвольный порт и обмен данными идет уже по нему. это специфика протокола: есть командный порт 69 (для установки соединения с сервером и пердачи ему команд) и есть порт для передачи данных (который в общем случае выбирается произвольно).
Еще раз: все что Вам нужно сделать - это подгрузить соответствующий модуль. Related connections и lsmod Вам о чем-нибудь говорит?
Покажу со своего линукса про ФТП, чтоб понятней было:
- тупо смотрю в каталоге модулей моего сетевого фильтра, есть ли что про ftp:
[root@localhost netfilter]# ls /usr/lib/modules/3.4.6-2.fc17.i686.PAE/kernel/net/ipv4/netfilter|grep ftp
nf_nat_ftp.ko
^^^^^^^^^^^^^
nf_nat_tftp.ko
- смотрю какие модули для ftp подгружены в данный момент:
[root@localhost netfilter]# lsmod|grep ftp
nf_nat_ftp 12645 0
^^^^^^^^^^^^^^
nf_conntrack_ftp 14007 1 nf_nat_ftp
nf_nat 24339 2 nf_nat_ftp,iptable_nat
nf_conntrack 71517 6 nf_nat_ftp,nf_nat,xt_state,nf_conntrack_ftp,iptable_nat,nf_conntrack_ipv4
как видите, для решения подобной же проблемы при работе с FTP, у меня подгружен соответствующий модуль - nf_nat_ftp. он тянет за собой загрузку зависимых модулей - в частности nf_conntrack_ftp. эти модули отслеживают какой порт сервер выбрал для обмена данными с конкретным клиентом и автоматом открывают его для пакетов, приходящих с адреса клиента. вот так (упрощенно) это работает.
как видите модуль nf_nat_tftp в моей системе тоже есть - можно использовать при желании.
где это во free расположено и как запускается при старте системы - спрашивайте у знатоков ОС (ну или гуглите - вроде я уже все что можно разжевал)
PS
возможен костыльный вариант: если конфигурация tftp-сервера разрешает указать диапазон портов, используемый для передачи данных, то можете просто эти порты открыть в ipfw для всех и навсегда (но тогда - Вы сам себе злобный буратино :).