Digamos que eu queira ter um servidor no meu computador na porta 1234, para que outros hosts na Internet possam se conectar a ele. Estou atrás de um roteador NAT, então configuro o roteador para encaminhar conexões para 1234 para o meu endereço IP da LAN. Eu uso algum serviço como este ou este para verificar se está realmente aberto, acionando o IP da Internet e o número da porta. Ele diz que minha porta está aberta e, na verdade, ao mesmo tempo, o servidor recebe uma conexão:
# nc -vv -l -p 1234
listening on [any] 1234 ...
connect to [192.168.0.7] from ec2-52-202-215-126.compute-1.amazonaws.com [52.202.215.126] 37873
sent 0, rcvd 0
Mas quando tento me conectar com meu IP da Internet, o tempo limite é atingido. Se eu não escutar na porta, a conexão é simplesmente recusada, como deveria ser. Se eu escutar, será ignorado:
# nc -vv -l -p 1234 &
[1] 6869
# nc 95.252.xxx.xxx 1234
E isso simplesmente fica pendurado. (Claro que, se eu usar o IP da LAN, ele funciona bem).
Além disso, noto que alguns hosts também não podem se conectar ao meu servidor: o propósito original desse arranjo era enviar rapidamente comandos para um amigo meu que frequentemente me telefona e me pede para consertar algo em seu computador, e quem não quer usar software como telnet ou ssh. Aparentemente também seu computador não pode alcançar o meu.
Meu computador não tem um firewall. O roteador (até onde eu sei) não filtra as conexões de saída. (Netgear DG834G)
Alguma pista?
Tags networking ip routing router linux