Eu tenho dois servidores Ubuntu, cada um com seus próprios endereços IP.
Vamos chamá-los server1 e server2, tendo respectivamente ip 1.1.1.1 e 2.2.2.2
Eu tenho um nginx em execução no server2. O único propósito que eu quero que o server1 tenha é redirecionar todas as requisições http (para a porta 80) recebidas para o server2 sem que os clientes percebam que sua requisição está sendo redirecionada.
Eu tentei o seguinte comando no server1:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 2.2.2.2
Mas quando eu entro em 1.1.1.1 no meu navegador eu não recebo resposta: a página continua tentando carregar sem dar nenhuma mensagem ou mensagem de erro (eu recebo um tempo limite após 2-3 minutos).
Mas quando eu removo a regra acima do iptables eu imediatamente recebo um erro "page not found" quando eu entro 1.1.1.1 no meu navegador; então algo está funcionando, mas não como deveria: quando eu entro 1.1.1.1 eu quero carregar a página html que está hospedada no 2.2.2.2
Porque quando eu digito 2.2.2.2 no meu navegador, vejo a página da Web carregada.
Alguém poderia me ajudar com isso? Estou pesquisando há algum tempo (no severfault & Google) sobre isso agora e é por isso que eu pergunto.
Muito obrigado por ler minha pergunta!
Atualização:
Obrigado a todos pela sua informação.
Infelizmente ainda não obtenho resposta
Eu tenho a seguinte configuração do iptables:
root@ip-10-48-238-216:/home/ubuntu# sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
root@ip-10-48-238-216:/home/ubuntu# sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere anywhere tcp dpt:www to:2.2.2.2
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Quando eu executo o tcpdump e peço via chrome para 1.1.1.1
i recebo o seguinte
root@ip-10-48-238-216:/home/ubuntu# sudo tcpdump -i eth0 port 80 -vv
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
13:56:18.346625 IP (tos 0x0, ttl 52, id 12055, offset 0, flags [DF], proto TCP (6), length 60)
212-123-161-112.ip.telfort.nl.16386 > ip-10-48-238-216.eu-west-1.compute.internal.www: Flags [S], cksum 0xb398 (correct), seq 2639758575, win 5840, options [mss 1460,sackOK,TS val 1223672 ecr 0,nop,wscale 6], length 0
13:56:18.346662 IP (tos 0x0, ttl 51, id 12055, offset 0, flags [DF], proto TCP (6), length 60)
212-123-161-112.ip.telfort.nl.16386 > ww1dc1.shopreme.com.www: Flags [S], cksum 0x9ee0 (correct), seq 2639758575, win 5840, options [mss 1460,sackOK,TS val 1223672 ecr 0,nop,wscale 6], length 0
13:56:18.598747 IP (tos 0x0, ttl 52, id 10138, offset 0, flags [DF], proto TCP (6), length 60)
212-123-161-112.ip.telfort.nl.16387 > ip-10-48-238-216.eu-west-1.compute.internal.www: Flags [S], cksum 0xac40 (correct), seq 2645658541, win 5840, options [mss 1460,sackOK,TS val 1223735 ecr 0,nop,wscale 6], length 0
13:56:18.598777 IP (tos 0x0, ttl 51, id 10138, offset 0, flags [DF], proto TCP (6), length 60)
212-123-161-112.ip.telfort.nl.16387 > ww1dc1.shopreme.com.www: Flags [S], cksum 0x9788 (correct), seq 2645658541, win 5840, options [mss 1460,sackOK,TS val 1223735 ecr 0,nop,wscale 6], length 0
^C
4 packets captured
4 packets received by filter
0 packets dropped by kernel
o endereço mencionado refere-se ao seguinte: 212-123-161-112.ip.telfort.nl.16386
: meu computador pessoal
ww1dc1.shopreme.com.www
: dns do servidor2 ( 2.2.2.2
)
ip-10-48-238-216.eu-west-1.compute.internal.www
: serviços da Web amazon ec2 endereço interno do server1 ( 1.1.1.1
)
No entanto, o log do tcpdump no servidor2 ( 2.2.2.2
) permanece vazio e não obtenho resposta no meu navegador.
Eu sou capaz de ping de server1 para server2.
E net.ipv4.ip_forward
está definido como 1 e por isso é /proc/sys/net/ipv4/ip_forward
Poderia haver mais alguma coisa que está faltando?
Update2:
O servidor1 é uma microinstância aws ec2, está conectado a um ip elástico que eu chamei de 1.1.1.1. o tempo todo. O micro servidor costumava ser um servidor ec2 maior, mas devido aos seus altos custos, estamos mudando para hospedagem dedicada. Mas no nosso cliente de iPhone usamos um endereço IP fixo, ou seja, o ip elástico mencionado acima. O cliente do iPhone usa serviços REST no servidor. Portanto, agora usamos um micro servidor nesse IP elástico que deve redirecionar todas as solicitações para um vps de outra empresa (www.xlshosting.nl) que tenha uma sub-rede diferente. Eu não sei a funcionalidade que pode redirecionar um ip elástico aws para um endereço IP externo, é por isso que eu tento com uma micro instância + iptables. Esse vps é o que eu chamo de server2 o tempo todo com ip 2.2.2.2. Então server1 e server2 estão em uma sub-rede diferente. Isso ajuda você?