Estou tentando redirecionar todo o tráfego de saída da minha máquina local na porta 843 para acessar meu serviço local na porta 1234.
Então, quando faço uma solicitação para, por exemplo, 1.2.3.4:843
, quero que ele se conecte a 127.0.0.1:1234
(transparentemente ao aplicativo solicitante).
Estou no OS X, então estou tentando conseguir isso usando pf
.
Veja o que eu tenho:
ext_if = "en0"
int_if = "lo0"
rdr on $ext_if inet proto tcp from self to any port 843 -> 127.0.0.1 port 1234
Agora, quando eu faço telnet 1.2.3.4 843
, eu esperaria uma conexão no meu serviço local (rodando na porta 1234).
No entanto, não parece redirecionar corretamente. Usando tcpdump
, posso ver que os pacotes são colocados na interface com o destino 1.2.3.4
.
Se eu fizer apenas regra de host local, por exemplo,
rdr on $int_if inet proto tcp from self to any port 843 -> 127.0.0.1 port 1234
Em seguida, telnet localhost 843
funciona como esperado e recebo a resposta do meu serviço local, que está escutando na porta 1234
.
Não tenho certeza do que estou fazendo de errado e agora estou perdendo ideias. Qualquer ajuda / ponteiros é bem-vinda.
EDITAR:
Eu testei um pouco mais e parece que com a última regra, qualquer pedido que chega na interface de loopback funciona. Então telnet 127.2.3.4 843
também redireciona corretamente.
Eu tentei adicionar $ext_if
acima
rdr on { $ext_if $int_if } proto tcp from any to any port 843 -> 10.0.1.10 port 1234
Mas sem sucesso. Eu também adicionei o encaminhamento sysctl. Não fez nada.
sudo sysctl -w net.inet.ip.forwarding=1
sudo sysctl -w net.inet6.ip6.forwarding=1
Tags port-forwarding bsd pf macos