Первое, что нужно отметить - каждый сокет TCP и UDP имеет два порта: источник и пункт назначения. Обычно порт источника назначается случайным образом (или со счетчика), и большинство программ не заботятся об этом. Ваши правила переадресации портов также проверяют только порт назначения.
Второе - правила переадресации портов действуют только для определенного адреса назначения (т. Е. Собственного адреса маршрутизатора) и в большинстве случаев только для пакетов, поступающих через определенный интерфейс (т. Е. Порт WAN).
Таким образом, вам не нужно делать ничего конкретного, потому что:
Если вы подключаетесь к веб-сайту, исходящие пакеты не будут соответствовать правилам переадресации для порта 80, поскольку они не пришли через интерфейс WAN и имеют другой адрес назначения.
Поступающие ответы (с веб-сайта) также остаются нетронутыми, поскольку они имеют 80 как исходный (удаленный) порт, а не как целевой (локальный), поэтому они также не соответствуют правилам.
Между тем, когда кто-то хочет подключиться к вашему серверу, тогда входящие пакеты будут соответствовать правилам, потому что они поступают через порт WAN, имеют IP-адрес маршрутизатора в качестве пункта назначения и отправляются на порт 80 назначения (который с точки зрения маршрутизатора является местный порт).
Например, ваш маршрутизатор будет придерживаться правила переадресации портов следующим образом (перефразировано):
if (dst_ip = <ROUTER_IP> and dst_port = 80) then translate dst_ip to 192.168.1.42
Исходящее соединение будет создавать такие пакеты:
out: LAN → router: IP(src=192.168.1.42, dst=<WEBSITE_IP>) / TCP(sport=34567, dport=80)
out: router → WAN: IP(src=<ROUTER_IP>, dst=<WEBSITE_IP>) / TCP(sport=45678, dport=80)
in: router ← WAN: IP(src=<WEBSITE_IP>, dst=<ROUTER_IP>) / TCP(sport=80, dport=45678)
in: LAN ← router: IP(src=<WEBSITE_IP>, dst=192.168.1.42) / TCP(sport=80, dport=34567)
Обратите внимание, что ни один из них на самом деле не соответствует правилу переадресации портов.