Primeira coisa a notar - cada soquete TCP e UDP tem duas portas : source e destination. Normalmente, a porta de origem é atribuída aleatoriamente (ou de um contador) e a maioria dos softwares não se importa com isso. Suas regras de encaminhamento de porta também verificam apenas a porta de destino.
As regras de encaminhamento de porta secundária são válidas apenas para um endereço de destino específico (ou seja, o próprio endereço do roteador) e, na maioria das vezes, apenas para pacotes que chegam por meio de uma interface específica (por exemplo, a porta WAN).
Então você não precisa fazer nada específico, porque:
-
Se você se conectar a um site, os pacotes de saída não corresponderão às regras de encaminhamento para a porta 80 porque não chegaram pela interface da WAN e têm um endereço de destino diferente.
-
As respostas recebidas (do site) também permanecem inalteradas porque elas têm 80 como a porta de origem (remota), não como a de destino (local), então elas não correspondem às regras também.
Enquanto isso, quando alguém quiser se conectar ao seu servidor , os pacotes de entrada corresponderão às regras porque eles chegam pela porta WAN, têm o endereço IP do roteador como destino, e são enviados para a porta de destino 80 (que da perspectiva do roteador é a porta local).
Por exemplo, seu roteador manteria uma regra de encaminhamento de porta como esta (parafraseada):
if (dst_ip = <ROUTER_IP> and dst_port = 80) then translate dst_ip to 192.168.1.42
Uma conexão de saída criaria esses pacotes:
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)
Observe como nenhum desses realmente corresponde à regra de encaminhamento de porta.