Спасибо всем за помощь.
Ответ был получен из списка рассылки администраторов FreeBSD. Был бы очень признателен, если бы кто-то прояснил ситуацию с прохождением
пакетов через сетевой стёк - добавление мета-информации о recv, xmit
интерфейсах
и со сменой направления in/out. Особенно после выхода из ipfw nat и
pipe/queue.
http://nuclight.livejournal.com/124348.html
Поэтому пишем правило для NAT-а:
${ipfw_cmd} add 1030 nat 1 ip from ${localnet} to any in recv ${int_if}
^^^ ^^^^^^^^^^^^^^^^^
Так нельзя.
NAT подменил ip сотрудника из localnet на ip интерфейса ext_if и,
снова-таки если верить документации :), пакет идёт
в следующее правило, а не в начало ruleset-а, но мета-информация теперь
какая???
ip from ext_ip to any in recv ${int_if} теперь как-то неправильно,
так как у пакета теперь ip интерфейса ext_if :)
ip from 1.2.3.4 to any in recv ${int_if}
???
Как оно на самом деле? После ipfw nat какая мета-информация в пакета?
Как она меняется?
Не меняется (нат инджектит в то же место, куда показывала метаинформация).
В правиле ошибка - нат вешают на out и внешний интерфейс, а не на
внутренний. Более того, оно так даже и не заработает без ключа реверса -
нат увидит входящие пакеты и посчитает, что их надо разнатить обратно.