Я с FreeBSD не работал и поэтому по синтаксису буду ошибаться.
На роутере вам надо поднять дополнительную таблицу маршрутизации с помощью setfib (?)
Что-то типа: setfib 1 route add default A.A.A.A via em2
В дефолтной таблице маршрутизации 0 у вас уже должен быть маршрут по умолчанию через A.A.A.A via em0
В правилах файрвола указать что-то типа: ipfw add 1100 setfib 1 divert 8668 ip from B.B.B.B+2 to any
ipfw add 4100 setfib 1 divert 8668 ip from any to A.A.A.A+2
чтобы пакеты с адреса B.B.B.B+2 и портами 8668 попадали во вторую таблицу маршрутизации.
Думаю идея понятна?Но это ещё не всё.
Пускай у вас приходит пакет на A.A.A.A+2 порт 8668, он отправляется на адрес B.B.B.B+2 и попадает на интерфейс em0_alias, но проблема в том что на хосте H1 только один шлюз по умолчанию через интерфейс em0, соответственно ответ с хоста H1 пойдет через интерфейс em0 с адресом B.B.B.B+1 и роутере R1 он не попадет в правила файрволла, так как правилом ipfw add 1100 divert 8668 ip from B.B.B.B+2 to any
он ждет пакета с адреса B.B.B.B+2, а не B.B.B.B+1 для порта 8668