Iptables redirecionam para localhost?

13

Suponha que eu tenha uma rede com um servidor roteando todas as conexões de dentro da rede para a Internet. Como posso configurar o iptables para que, em vez de rotear as conexões de entrada com a Internet, ele as direcione para a porta 8080 do host local. Toda a ajuda é apreciada.

DankMemes
fonte
O problema é que, com o redirecionamento simples (endereço IP de destino NAT), você perde o endereço IP de destino original. Deseja configurar um proxy HTTP transparente ou deve processar outros protocolos além do HTTP?
pabouk
Não importa se é transparente ou não #
DankMemes
Redirecionando todo o tráfego a um proxy é uma base para proxy transparente :)
pabouk
Aqui está outra resposta que realmente me ajudou: unix.stackexchange.com/questions/111433/…
Wren T.

Respostas:

6
sysctl net.ipv4.ip_forward=1 
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080
Alex Antonov
fonte
1
não use negrito ....
Obrigado! Ainda não tentei isso, mas suspeito que estou perdendo o comando de encaminhamento de IP. E da próxima vez, use blocos de código, não em negrito.
DankMemes
@AlexAntonov, use blocos de código. Selecione seu texto no modo de edição e clique no ícone de colchetes.
DankMemes
@ZoveGames, desculpe, corrigi-lo.
precisa
2
Eu experimentei isso. O sysctl ip_forward não é necessário. No entanto, a opção route_localnet aqui é. Vejo agora que é exatamente isso que a resposta de Juan Cespedes afirma.
Matt Joiner
31

isso pode ser feito com iptables, mas apenas com o kernel> = 3.6.

Você terá que fazer:

sysctl -w net.ipv4.conf.all.route_localnet=1
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 127.0.0.1:8080

ip_forwardnão é necessário, porque o pacote não é encaminhado, mas se você não incluir o sysctl for route_localnet(que funciona apenas em kernels> = 3.6), o pacote será descartado pelo kernel porque o considera "marciano" do lado de fora e com um endereço de destino 127.0.0.1

Juan Cespedes
fonte
Yup, que funciona
Nick De grega
Não sabia sobre route_localnet. Tão antiquado e não conseguia descobrir por que o ip_forward não estava funcionando (suspeitava que não era necessário, mas tentou de qualquer maneira).
dmourati
1
Certifique-se de salvar net.ipv4.conf.all.route_localnet=1, /etc/sysctl.confcaso contrário não será persistente e, após a reinicialização, a variável retornará a 0, causando a queda do pacote. Seria muito difícil entender por que agora tudo não está funcionando ... aconteceu comigo. ;)
viz
Desculpe por necro uma pergunta antiga, mas existe um equivalente de ipv6 net.ipv4.conf.all.route_localnetpara uso ip6tables?
Kebian