Eu criei uma VPC e, dentro dela, uma instância do RDS. A instância do RDS é acessível ao público e suas configurações são as seguintes:
O grupo de segurança conectado à instância do RDS aceita todo o tráfego:
Todas as ACLs da minha rede aceitam todos os tráfegos. No entanto, não consigo acessar minha instância de uma máquina fora da minha VPC. Estou tendo o erro a seguir:
root@vps151014:~# mysql -h mysql1.xxxxxxxxxxxx.eu-west-1.rds.amazonaws.com -P 3306 -u skullberry -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on 'mysql1.xxxxxxxxxxxx.eu-west-1.rds.amazonaws.com' (110)
Se eu executar o mesmo comando de um EC2 dentro da minha VPC, eu posso conectar. Eu tentei conectar a partir de várias máquinas, todas elas sem um firewall (porta 3306 aberta).
Obviamente, estou perdendo alguma coisa, mas tudo parece estar configurado corretamente. Qual poderia ser o problema?
mysql
amazon-web-services
amazon-vpc
amazon-rds
dazedviper
fonte
fonte
(110)
mensagem na mensagem de erro significa "tempo limite da conexão esgotado", então esse é definitivamente um problema de conectividade IP. Sua instância do RDS mostra estar associada a duas sub-redes. No console da VPC, qual é a rota padrão dessas duas sub-redes? É um "igw-xxxxxxxx" ou é um "i-xxxxxxxx"?0.0.0.0/0
. Vou postar a resposta.Respostas:
Para que uma instância do RDS na VPC seja acessível "publicamente" (Internet), todas as sub-redes às quais está conectada devem ser sub-redes "públicas" - em oposição a "privadas" - da VPC.
Uma sub-rede pública é essencialmente definida como uma sub-rede que tem o objeto Gateway da Internet (igw-xxxxxxxx) como sua rota para "a Internet" ou pelo menos para qualquer destino da Internet que você precise acessar. Normalmente, este é um endereço de destino de
0.0.0.0/0
. As sub-redes públicas devem ser usadas para instâncias (incluindo o RDS) que terão um endereço IP público associado e não devem ser usadas para instâncias que não terão endereços IP públicos, pois os endereços privados não funcionam na Internet sem tradução.Uma sub-rede privada, por outro lado, tem sua tabela de roteamento configurada para alcançar destinos da Internet através de outra instância do EC2, normalmente uma instância do NAT. Isso é mostrado na tabela de rotas da VPC associada a essa sub-rede como i-xxxxxxxx, em vez de "igw". Essa máquina (que, por si só, estará em uma sub-rede diferente daquela para a qual atua como destino de rota) serve como tradutora, permitindo que as instâncias apenas com IP privado façam solicitações de Internet de forma transparente usando o público da máquina NAT IP para suas necessidades de Internet. Instâncias com um endereço IP público não podem interagir corretamente com a Internet se estiverem conectadas a uma sub-rede privada.
No caso específico, aqui, as sub-redes associadas à instância do RDS não eram realmente configuradas como algo que poderia ser simplesmente classificado como uma sub-rede pública ou privada, porque a sub-rede não tinha nenhuma rota padrão. Adicionar uma rota padrão através do objeto "igw" ou, como fez o OP, adicionar uma rota estática ao endereço IP da Internet onde a conectividade era necessária, na tabela de rotas da VPC para as sub-redes, corrige o problema de conectividade.
No entanto ... Se você tiver um problema semelhante, não poderá simplesmente alterar a tabela de rotas ou criar novas tabelas de rotas e associar as sub-redes a elas, a menos que você não tenha mais nada funcionando corretamente nas sub-redes, porque a alteração pode ser razoavelmente razoável. espera quebrar a conectividade existente. O curso correto, nesse caso, seria provisionar as instâncias em diferentes sub-redes com as entradas corretas da tabela de rotas.
Ao configurar uma VPC, é ideal definir claramente as funções de sub-rede e provisionar totalmente as rotas necessárias quando o VPC for comissionado pela primeira vez. Também é importante lembrar que toda a "LAN" da VPC é uma rede definida por software. Diferente de uma rede física, na qual o roteador pode se tornar um gargalo e, muitas vezes, é sensato colocar máquinas com tráfego intenso entre elas na mesma sub-rede ... as sub-redes de cruzamento de tráfego não têm desvantagem de desempenho na VPC. As máquinas devem ser colocadas em sub-redes apropriadas às necessidades de endereçamento IP da máquina - endereço público, sub-rede pública; nenhum endereço público, sub-rede privada.
Mais discussões sobre a logística de sub-redes públicas / privadas na VPC podem ser encontradas em Por que precisamos de sub-rede privada na VPC (no Stack Overflow).
fonte
Isso já tem uma ótima resposta, mas a AWS cria uma sub-rede pública para você quando você escolhe a opção "acessível ao público". Em vez disso, para mim, o problema era o grupo de segurança VPC padrão. Eu estava olhando para as regras da rede ACL - não para o grupo de segurança . (Escolher a opção "acessível ao público" no RDS adiciona o grupo de segurança, mas não adiciona automaticamente as regras de entrada.)
Clique em RDS e identifique e clique no grupo de segurança. Em "regras de entrada", adicione a porta 3306 e o endereço IPV4 de conexão xxxx / 32 (ou 0.0.0.0/32 - se você quiser que toda a Internet se conecte - mas tenha cuidado com isso).
fonte
Verifique também se a rede à qual você está conectado não está bloqueando as conexões com outro servidor na porta 3306. Esse foi o meu caso quando conectado à minha rede corporativa.
fonte