Ситуация: необходимо выкинуть наружу внутренний http-сервер стоящий за FreeBSD.
Решение: Делаем проброс 80 порта внешнего интерфейса на реальный http-сервер за шлюзом. Все работает.
ed0 - внешний интерфейс
$inet_ip = внешний ip адрес
$http_ip = внутренний ip адрес http-сервера
# Проброс порта
ipfw add divert 8088 tcp from any to $inet_ip 80
ipfw add divert 8088 tcp from $http_ip 80 to any
# Внутренний сервер ничего не знает об инете, за исключением $inet_ip
ipfw add divert 8668 ip from any to $http_ip out xmit ed0
ipfw add divert 8668 ip from $http_ip to any in recv ed0
natd -p 8088 -n ed0 -redirect_port tcp $http_ip:80 $inet_ip:80
natd -p 8668 -n ed0
За исключением ситуации доступа на 80 порт $inet_ip с самого шлюза. В данном контексте – это squid, с которого люди не могут попасть на сайт.
Я не суперспец по FreeBSD, надеюсь на вашу помощь.