Infelizmente, temos um cliente que codificou um dispositivo para apontar para um IP e uma porta específicos. Gostaríamos de redirecionar o tráfego de seu IP para o nosso balanceador de carga, que enviará os POSTs HTTP para um pool de servidores capaz de lidar com essa solicitação. Gostaria que o tráfego existente de todos os outros IPs não fosse afetado.
Eu acredito que o iptables é a melhor maneira de conseguir isso e acho que este comando deve funcionar:
/sbin/iptables -t nat -A PREROUTING -s $CUSTIP -j DNAT -p tcp --dport 8080 -d $CURR_SERVER_IP --to-destination $NEW_SERVER_IP:8080
Infelizmente, não está funcionando como esperado. Não tenho certeza se preciso adicionar outra regra, potencialmente na cadeia POSTROUTING?
Abaixo, substituí as variáveis acima por IPs reais e tentei replicar o layout no meu ambiente de teste em etapas incrementais.
$ CURR_SERVER_IP = 192.168.2.11
$ NEW_SERVER_IP = 192.168.2.12
$ CUST_IP = 192.168.0.50
- Encaminhar para a frente no mesmo IP
/sbin/iptables -t nat -A PREROUTING -p tcp -d 192.168.2.11 --dport 16000 -j DNAT --to-destination 192.168.2.11:8080
Funciona exatamente como esperado.
- IP e porta encaminham para uma máquina diferente
/sbin/iptables -t nat -A PREROUTING -p tcp -d 192.168.2.11 --dport 16000 -j DNAT --to-destination 192.168.2.12:8080
As conexões parecem expirar.
- Restringir o IP e o encaminhamento de porta para serem aplicados somente a solicitações de um IP específico
/sbin/iptables -t nat -A PREROUTING -p tcp -s 192.168.0.50 -d 192.168.2.11 --dport 16000 -j DNAT --to-destination 192.168.2.12:8080
Eu adicionei a regra ACCEPT, como sugerido pelo @Massimo, mas ainda não vejo nenhum sucesso.
Comecei de novo e executei os seguintes comandos:
# /sbin/iptables -t nat -A PREROUTING -p tcp -d 192.168.2.11 --dport 16000 -j DNAT --to-destination 192.168.2.12:8080
# iptables -A FORWARD -j ACCEPT
E as regras agora parecem:
# iptables -L -v --line-numbers (see FORWARD rule 7)
Chain INPUT (policy ACCEPT 1115M packets, 889G bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT udp -- virbr0 any anywhere anywhere udp dpt:domain
2 0 0 ACCEPT tcp -- virbr0 any anywhere anywhere tcp dpt:domain
3 0 0 ACCEPT udp -- virbr0 any anywhere anywhere udp dpt:bootps
4 0 0 ACCEPT tcp -- virbr0 any anywhere anywhere tcp dpt:bootps
Chain FORWARD (policy ACCEPT 112 packets, 5936 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- any virbr0 anywhere 192.168.122.0/24 state RELATED,ESTABLISHED
2 0 0 ACCEPT all -- virbr0 any 192.168.122.0/24 anywhere
3 0 0 ACCEPT all -- virbr0 virbr0 anywhere anywhere
4 0 0 REJECT all -- any virbr0 anywhere anywhere reject-with icmp-port-unreachable
5 0 0 REJECT all -- virbr0 any anywhere anywhere reject-with icmp-port-unreachable
6 0 0 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
7 6 336 ACCEPT all -- any any anywhere anywhere
Chain OUTPUT (policy ACCEPT 813M packets, 428G bytes)
num pkts bytes target prot opt in out source destination
e
# iptables -L -t nat -v --line-numbers
Chain PREROUTING (policy ACCEPT 3108K packets, 242M bytes)
num pkts bytes target prot opt in out source destination
1 0 0 DNAT tcp -- any any anywhere 192.168.2.11 tcp dpt:16000 to:192.168.2.12:8080
Chain POSTROUTING (policy ACCEPT 13M packets, 790M bytes)
num pkts bytes target prot opt in out source destination
1 8644 1979K MASQUERADE all -- any any 192.168.122.0/24 anywhere
Chain OUTPUT (policy ACCEPT 13M packets, 792M bytes)
num pkts bytes target prot opt in out source destination
Alguém vê problemas óbvios que provocariam o tempo de inatividade de um navegador quando eu acessar o link ?
obrigado,