Estamos executando um Ubuntu 20.04 na AWS. Estamos tentando configurar uma regra iptables para que qualquer tráfego MySQL com um endereço IP fictício seja encaminhado para o banco de dados MySql em 172.31.6.173 na mesma VPC. Deixe-me explicar:
Endereços IP nesta tarefa:
Servidor Ubuntu (fonte): 172.31.0.151
Servidor MySQL (destino): 172.31.6.173
IP fictício do MySQL: 6.6.6.6
A partir de 172.31.0.151 (fonte) nos conectaremos ao mysql no IP fictício (6.6.6.6), e será NAT'd para destino (172.31.6.173).
As regras que usamos:
sudo iptables -t nat -A PREROUTING -s 172.31.0.151 -d 6.6.6.6 -j DNAT --to-destination 172.31.6.173
sudo iptables -A FORWARD -p tcp -d 172.31.6.173 -j ACCEPT
A primeira linha especifica qualquer tráfego do 172.31.0.151, com destino para 6.6.6.6, será encaminhado para 172.31.6.173
A segunda linha aceita todos os tcp encaminhados para 172.31.6.173.
Essas são as únicas regras no iptables, se eu executar sudo iptables -t nat -L
, o resultado é:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT all -- 172.31.0.151 6.6.6.6 to:172.31.6.173
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
No entanto, com essas duas regras em vigor, do servidor source(172.31.0.151), quando tentei fazer login no MySql no IP fictício:
mysql -h 6.6.6.6 -u username -p
A saída do tcpdump: (o servidor MySql é uma instância do RDS, o que significa que não posso fazer login para executar o tcpdump, então só posso obter o tcpdump do servidor de origem):
13:41:41.768171 IP 172.31.0.151.50374 > 6.6.6.6.mysql: Flags [S], seq 3441229166, win 62727, options [mss 8961,sackOK,TS val 2723434614 ecr 0,nop,wscale 7], comprimento 0
13:41:45.992114 IP 172.31.0.151.50374 > 6.6.6.6.mysql: Flags [S], seq 3441229166, win 62727, options [mss 8961,sackOK,TS val 2723438838 ecr 0,nop,wscale 7], comprimento 0
13:41:54.184186 IP 172.31.0.151.50374 > 6.6.6.6.mysql: Flags [S], seq 3441229166, win 62727, options [mss 8961,sackOK,TS val 2723447030 ecr 0,nop,wscale 7], comprimento 0
A regra PREROUTING não tem efeito, a tentativa de login ainda está procurando um servidor em 6.6.6.6, em vez de ser NAT para o endereço IP real de 172.31.6.173.
Qualquer conselho será apreciado. Obrigada.
Estou assumindo que a regra do OP foi adicionada ao sistema Ubuntu com endereço IP 172.31.0.151, o mesmo sistema que está iniciando conexões mysql para um endereço fictício.
Como pode ser visto neste esquema do Netfilter e da rede geral :
Portanto, nat/PREROUTING não tem efeito para redirecionar uma conexão iniciada localmente. Isso deve ser feito em nat/OUTPUT. Como isso pode alterar até mesmo a interface a ser usada (provavelmente não no caso do OP), isso aciona uma verificação de redirecionamento posteriormente para lidar com esse caso.
No final, sua regra deve ser adicionada com:
Se o sistema tiver apenas um endereço IP: 172.31.0.151,
-s 172.31.0.151
torna-se supérfluo: