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      |               |
     '-.( ).-'                       |                   |               |
                                     |                   '---------------'
                                     |
                                     |
                                   __  _ 
                                  [__]|=|
                                  /::/|_|

@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

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

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.