IPTables - Porta para outro ip e porta (por dentro)

10

Atualmente, tenho uma caixa NAS em execução na porta 80. Para acessar o NAS de fora, mapeei a porta 8080 para a porta 80 no NAS da seguinte maneira:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.32.25.2:80

Isso está funcionando como um encanto. No entanto, isso só funcionará se eu estiver acessando o site de fora da rede (no trabalho, em uma casa diferente, etc.). Então, quando digito mywebsite.com:8080, o IPTables faz o trabalho corretamente e tudo está funcionando bem.

Agora, o problema que tenho é: como redirecionar essa porta de dentro da rede? Meu nome de domínio mywebsite.comaponta para o meu roteador (meu servidor linux) por dentro (10.32.25.1), mas quero redirecionar a porta 8080 para a porta 80 em 10.32.25.2 por dentro.

Qualquer pista?

Editar # 1

Tentando ajudar a facilitar essa pergunta, montei este diagrama. Atualize se estiver incorreto ou deturpar o que você está procurando.

                                 iptables
                                     |                   .---------------.
    .-,(  ),-.                       v               port 80             |
 .-(          )-.        port 8080________               |               |
(    internet    )------------>[_...__...°]------------->|      NAS      |
 '-(          ).-'     10.32.25.2    ^   10.32.25.1      |               |
     '-.( ).-'                       |                   |               |
                                     |                   '---------------'
                                     |
                                     |
                                   __  _ 
                                  [__]|=|
                                  /::/|_|
David Bélanger
fonte
@slm Exatamente. Nada acontece em 10.32.25.2:8080 porque o servidor está na porta 80. Do lado de fora, o NAT redireciona da porta 8080 para a porta 80 no IP especificado (10.32.25.2). NET -> NAT: 8080 -> 10.32.25.2:80. Eu preciso da regra por dentro e não sei o que colocar lá.
David Bélanger
@slm Sim. Não sei como conseguir algo assim. Eu quero dizer 10.32.25.1:8080redirecionar para 10.32.25.2:80. Minha regra acima está funcionando de fora, mas não de dentro da minha rede. Portanto, se estou no escritório, posso acessar meu NAS em website.com:8080 e é totalmente transparente. Na minha casa, website.com:8080 aponta para 10.32.25.1 porque é meu roteador, também conhecido como servidor Linux. Quero redirecionar a porta 8080 para o NAS também na porta 80, mas novamente, de forma transparente.
David Bélanger
@ slm Sim, está tudo bem e funcionando. Eu só quero redirecionar a porta 10.32.25.1:8080 para 10.32.25.2:80 da rede interna.
David Bélanger
também mencionam como interface eth0 10.32.25.2, para que possamos capaz de iptables escrita usar com base na interface de entrada
Rahul Patil
Opps desculpe, eu só vi .. você já resolveu o problema ..
Rahul Patil

Respostas:

13

Eu finalmente encontrei como fazer. Primeiro, tive que adicionar -i eth1à minha regra "externa" (eth1 é minha conexão WAN). Eu também precisava adicionar duas outras regras. Aqui no final o que eu vim com:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A POSTROUTING -p tcp -d 10.32.25.2 --dport 80 -j MASQUERADE
David Bélanger
fonte
2
A segunda regra não é necessário, como a primeira regra já contém o ...
machineaddict
1
A primeira regra restringe o pré-rota apenas se estiver chegando na interface eth1. A segunda regra é mais geral, pois se aplica a todas as interfaces. Cuidado com loops!
tu-Restabelece Monica-dor duh
4

Você também esqueceu de mencionar que o encaminhamento de pacote deve estar ativado para poder executar o NAT de destino. Por padrão, geralmente está desativado, portanto, as regras do iptables não funcionam. Pode ser ativado emitindo:

echo 1 > /proc/sys/net/ipv4/ip_forward
Dmitriusan
fonte
Muito obrigado por isso, eu teria puxado meu cabelo por horas!
ColinM
3

Primeiro, permita o encaminhamento com

echo 1 > /proc/sys/net/ipv4/ip_forward

Em seguida, defina as regras do iptable com

IF=eth1
PORT_FROM=8080
PORT_TO=80
DEST=10.32.25.2
iptables -t nat -A PREROUTING -i $IF -p tcp --dport $PORT_FROM -j DNAT --to $DEST:$PORT_TO
iptables -t nat -A POSTROUTING -p tcp -d $DEST --dport $PORT_TO -j MASQUERADE

Você pode colocar essas linhas, /etc/rc.localpor exemplo. Nota: como o Debian jessie o torna executável e habilita o serviço rc.local via

systemctl enable rc-local.service
rubo77
fonte
0

Primeiro, você precisa verificar se o encaminhamento está ativado:

cat /proc/sys/net/ipv4/ip_forward

Caso contrário 1, corra echo 1 > /proc/sys/net/ipv4/ip_forward.

Se você deseja que o tráfego que atinge 10.32.25.1 nas portas 80 e 443 seja encaminhado para a porta 80 de 10.32.25.2, use a regra abaixo:

iptables -t nat -A PREROUTING -d 10.32.25.1 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.32.25.2:80
balon
fonte