Уже не один раз обсуждалось. Читайте как работает NAT и для чего он нужен.
Роутер все заворачивает правильно, просто в данном случае работать оно не будет:
- Из мира приходит пакет (предположим 8.8.8.8 -> 80.*.*.*), роутер его днатит в локальный адрес (8.8.8.8 -> 192.168.1.33), вебсервер получает запрос от 8.8.8.8 и шлет ответ обратно на роутер (дефолт-роут), роутер проводит пакет обратно по нат и отправляет в мир;
- Если пакет приходит из локалки (предположим 192.168.1.2 -> 80.*.*.*), роутер его днатит в локальный адрес (192.168.1.2 -> 192.168.1.33), вебсервер получает запрос от 192.168.1.2 и шлет ответ обратно в ЛОКАЛЬНУЮ сеть, компьютер 192.168.1.2 не получает ожидаемого ответа от 80.*.*.* а ответ от 192.168.1.33 считает инвалидным, так как не отправлял туда запрос. Соотв. TCP соединение не устанавливается.
(
отсюда)
Если хочется именно НАТом это сделать, то пакеты приходящие от em0 на Х нужно натить в адрес em0, чтобы вебсервер отвечал роутеру, а не напрямую в локалку.
nat on em0 proto tcp from 192.168.1.0/24 to 192.168.1.2 port 80 -> (em0)
Или можно локально поднять net/bounce, его поставить слушать 127.0.0.1:8080->192.168.1.2:80 а редирект заменить на:
rdr on ng0 proto tcp from any to "X" port 80 -> 127.0.0.1 port 8080