Eu quero que as conexões que chegam em ppp0 na porta 8001 sejam roteadas para 192.168.1.200 em eth0 na porta 8080.
Eu tenho essas duas regras
-A PREROUTING -p tcp -m tcp --dport 8001 -j DNAT --to-destination 192.168.1.200:8080
-A FORWARD -m state -p tcp -d 192.168.1.200 --dport 8080 --state NEW,ESTABLISHED,RELATED -j ACCEPT
e não funciona. o que estou perdendo?
Primeiro de tudo - você deve verificar se o encaminhamento é permitido:
Se ambos retornarem
1
, tudo bem. Caso não faça o seguinte:Segunda coisa -
DNAT
pode ser aplicadonat
apenas na mesa. Portanto, sua regra deve ser estendida adicionando também a especificação da tabela (-t nat
):Ambas as regras são aplicadas apenas ao tráfego TCP (se você quiser alterar o UDP também, precisará fornecer regras semelhantes, mas com o
-p udp
conjunto de opções).Por último, mas não menos importante, está a configuração de roteamento. Modelo:
e verifique se
192.168.1.0/24
está entre as entradas de roteamento retornadas.Você esqueceu o endereço de origem do pós-roteamento SNAT 'ing:
E não se esqueça de configurar seu firewall linux como gateway padrão no computador com o endereço 192.168.1.200.
Acho que o que você quer é:
Eu criei o seguinte script bash para fazer isso no meu roteador linux. Ele infere automaticamente o IP da WAN e confirma suas seleções antes de prosseguir.
O uso do script é simples basta copiá-lo e colá-lo em um arquivo e depois.
Para remover a mesma regra
Eu pensei que isso poderia economizar tempo de alguém em seu respectivo roteador.
A solução aceita funciona quando o host de destino e o gateway estão na mesma sub-rede (como no seu caso, ambos estão em
eth0
192.168.1.0/24).Abaixo está uma solução genérica para quando o gateway, a origem e o destino estão em sub-redes diferentes .
1) Habilite o encaminhamento de IP:
2) Adicione 2 regras do iptables para encaminhar uma porta TCP específica:
Para reescrever o IP de destino do pacote (e de volta no pacote de resposta):
Para reescrever o IP de origem do pacote para o IP do gateway (e de volta no pacote de resposta):
3) Se você não tiver uma
ACCEPT
regra de firewall padrão, permita o tráfego para o destino:4) Teste a nova configuração. Se funcionar, verifique se as alterações persistem nas reinicializações:
Eu tive a tarefa de fazer MACHINE_A pensar que o serviço está sendo executado fisicamente em MACHINE_B, mas redirecionar de forma transparente todas as solicitações para MACHINE_C.
O truque era usar MASQUERADE.
Observe que você pode querer ajustar os comandos:
Para permitir o encaminhamento de pacotes apenas em uma interface específica. Por exemplo:
Para permitir que não apenas MACHINE_A, mas também todos os outros usem o encaminhamento de porta, remova:
Tentar
Esses arquivos informam ao kernel que é permitido encaminhar pacotes entre as interfaces.
Este comando não funciona para mim:
Eu tenho 2 interfaces LAN e trabalho FORWARD quando vou escrever:
PREROUTING e FORWARD também são necessários, claro :)