IPTables - Porta para outro ip & port (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 forma:

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 está funcionando somente se eu estiver acessando o site do lado de fora da rede (no trabalho, em casa diferente, etc). Então, quando eu digito mywebsite.com:8080 , o IPTables faz o trabalho corretamente e tudo está funcionando bem.

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

Alguma pista?

Editar # 1

Tentando ajudar a facilitar essa questão, juntei esse diagrama. Por favor, sinta-se livre para atualizar se é incorreto ou deturpar o que você está procurando.

                                 iptables
                                     |                   .---------------.
    .-,(  ),-.                       v               port 80             |
 .-(          )-.        port 8080________               |               |
(    internet    )------------>[_...__...°]------------->|      NAS      |
 '-(          ).-'     10.32.25.2    ^   10.32.25.1      |               |
     '-.( ).-'                       |                   |               |
                                     |                   '---------------'
                                     |
                                     |
                                   __  _ 
                                  [__]|=|
                                  /::/|_|
    
por David Bélanger 18.05.2013 / 17:42

3 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
    
por 19.05.2013 / 04:13
3

Você também esqueceu de mencionar que o encaminhamento de pacotes deve estar habilitado para poder realizar NAT de destino. Por padrão, geralmente é desativado, portanto, as regras do iptables não funcionarão. Pode ser ativado pela emissão:

echo 1 > /proc/sys/net/ipv4/ip_forward
    
por 20.05.2015 / 18:03
3

Primeiro, permita o encaminhamento com

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

Em seguida, defina as regras de 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 em /etc/rc.local , por exemplo. Nota: uma vez que o Debian jessie o torna executável e habilitou o serviço rc.local via

systemctl enable rc-local.service
    
por 01.03.2016 / 15:17