Схема построения PBR на IPFW; Разрешаем траффик, который не надо натить - т.е. из локальных сетей в локальные сети
00100 allow all from <localnet> to any out xmit <Локальный интерфейс1>
00105 allow all from <localnet> to any out xmit <Локальный интерфейс2>
; где-то тут надо бы добавить правила, чтобы локальная сеть видела внешние айпишники рутера
; может быть это "100 allow from any to any out xmit <локальные интерфейсы>"
; но для начала и так пойдет. Проблема будет в том, что с внешнего айпи пакеты будут
;форвардиться во внешний интерфейс, даже если они должны были пойти в локалку.
#Заворачиваем на нат всё что пытается покинуть рутер через внешний интерфейс (внутрений трафик разрешен сотыми правилами)
;заворачиваем с разных айпи траффик на разный нат
00200 divert 8668 ip from 192.168.0.200 to any out
00205 divert 8667 ip from 192.168.0.100 to any out
; тут можно вставить вырезание пакетов, идущих во внешние сети с приватным src-адресом
;00250 reject all from 192.168.0.0/16 to any out
;разрешаем пакетам, которые идут куда надо идти куда они идут :)
00400 allow all from <айпи канал1> to <сеть интерфейс1> out xmit <Интерфейс1>
00405 allow all from <айпи канал2> to <сеть интерфейс2> out xmit <Интерфейс2>
; меняем интерфейс назначения, если надо идти через шлюз
; форвардим даже если требуемый шлюз является шлюзом по умолчанию, для упрощения правил.
00500 fwd <айпи шлюза сеть1> ip from <айпи канал1> to any out
00505 fwd <айпи шлюза сеть2> ip from <айпи канал2> to any out
; Форвард нужен только если пакет идет не в свой интерфейс, т.е. более полный вариант для двух интерфейсов (больше интерфейсов - геометрически больше правил):
;00500 fwd <айпи шлюза сеть1> ip from <айпи канал1> to any out via <Интерфейс2>
;00505 fwd <айпи шлюза сеть2> ip from <айпи канал2> to any out via <Интерфейс1>
;00510 allow ip from <айпи канал1> to any out via <Интерфейс1>
;00515 allow ip from <айпи канал2> to any out via <Интерфейс2>
# Не забываем пронатить всё это дело обратно
00600 divert 8668 ip from any to any in recv <Интерфейс1>
00605 divert 8667 ip from any to any in recv <Интерфейс2>
# и разрешить обратное прохождение пакетов, например так
00610 allow from any to 192.168.0.0/24 in recv <Интерфейс1>
00615 allow from any to 192.168.0.0/24 in recv <Интерфейс2>
ну и соответственно при запуске natd должно быть так, что:
natd -a <айпи канал1> -p 8668
natd -a <айпи канал2> -p 8667