Não é possível conectar-se à instância do RDS de fora do VPC (ERROR 2003 (HY000) Não é possível conectar ao servidor MySQL)

10

Eu criei um VPC e, dentro dele, uma instância do RDS. A instância do RDS é acessível publicamente e suas configurações são as seguintes:

Configurações do RDS

O grupo de segurança anexado à instância do RDS aceita todo o tráfego:

Todas as ACLs da minha rede aceitam todo o tráfego. No entanto, não consigo acessar minha instância de uma máquina fora do meu VPC. Eu recebo o seguinte erro:

    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 do meu VPC, posso me conectar. Eu tentei conectar de várias máquinas, todas sem um firewall (por exemplo, a porta 3306 aberta).

Obviamente, estou sentindo falta de algo, mas tudo parece estar configurado corretamente. Qual poderia ser o problema?

    
por hallaplay835 18.07.2015 / 23:52

3 respostas

17

Para que uma instância do RDS na VPC seja acessada "publicamente" (na Internet), todas as sub-redes às quais ela está anexada devem ser sub-redes "públicas" - em oposição às "privadas" - da VPC.

Uma sub-rede pública é essencialmente definida como uma sub-rede que possui 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, esse é 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, já que os endereços privados não funcionam pela Internet sem tradução.

Por outro lado, uma sub-rede privada tem sua tabela de roteamento configurada para alcançar destinos da Internet por meio de outra instância do EC2, normalmente uma instância do NAT. Isso mostra na tabela de rota VPC associada a essa sub-rede como i-xxxxxxxx, em vez de "igw". Essa máquina (que, por sua vez, estará em uma sub-rede diferente daquelas para as quais ela atua como um destino de rota) serve como um tradutor, permitindo que as instâncias somente de IP privado façam solicitações de Internet de saída usando o sistema 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 adequadamente 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 estavam realmente configuradas como algo que poderia ser simplesmente classificado como uma sub-rede privada ou pública, porque a sub-rede não tinha nenhuma rota padrão. Adicionar uma rota padrão através do objeto "igw" ou, como o OP, adicionar uma rota estática ao endereço IP da Internet em que a conectividade era necessária, na tabela de rotas VPC das 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 rota 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 poderia razoavelmente ser esperado para quebrar a conectividade existente. O curso correto, nesse caso, seria provisionar as instâncias em diferentes sub-redes com as entradas da tabela de rotas corretas em vigor.

Ao configurar um 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. Ao contrário de uma rede física, em que o roteador pode se tornar um gargalo e geralmente é sensato colocar máquinas com tráfego intenso entre elas na mesma sub-rede ... as subnets de cruzamento de tráfego não têm nenhuma desvantagem de desempenho no VPC. As máquinas devem ser colocadas em sub-redes adequadas às necessidades de endereçamento IP da máquina - endereço público, sub-rede pública; sem endereço público, sub-rede privada.

Mais discussões sobre a logística de sub-redes privadas / públicas em VPC podem ser encontradas em Por que precisamos de sub-rede privada em VPC (em estouro de pilha).

    
por 19.07.2015 / 20:52
1

Isso já tem uma ótima resposta, mas a AWS cria uma sub-rede pública quando você escolhe a opção "publicamente acessível". Em vez disso, para mim, o problema era o grupo de segurança VPC padrão. Estava a analisar as regras da Network ACL e não o Grupo de segurança . (Escolher a opção "publicamente acessível" 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 seguida, em "regras de entrada", adicione a porta 3306 e adicione seu endereço IPV4 de conexão, x.x.x.x / 32 (ou 0.0.0.0/32 - se você quiser que toda a Internet se conecte - mas tenha cuidado com isso).

    
por 20.12.2017 / 21:42
0

Verifique também se a rede à qual você está conectado não está bloqueando conexões com outro servidor na porta 3306. Esse foi o caso para mim quando conectado à minha rede corporativa.

    
por 26.01.2018 / 21:13