Памятка по IPFW для дебилов типа меня, которые каждый раз учат мануал заново.
1. Для ipfw пакет логически входит куда-то и выходит откуда-то, вне зависимости от того, что там за интерфейсы по логике между. Два предмета - вошёл и вышел.
2. Если пакет предназначен для IP на данном хосте, то интерфейс будет один - тот, в который он вошёл. Т.е. если к lan0 привязан адрес 1 из подсети 1, а к lan1 привязан адрес 2 из подсети 2, пакет пришел из подсети 1 на интерфейс lan1 и предназначем для адреса 2, который на интерфейсе lan2, то правило "blablabla via lan2" для него не применимо - он как вошёл lan1 in, так и остался там.
3. in/out - это логический вход/выход с интерфейса. Физический - recv и xmit. Например recv via lan1 - это то, что реально пришло снаружи хоста.
4. Когда мы NATим для своей того же хоста - это боль. Потому что мы можем выкинуть все динамические правила.