MySQL localhost por VPN: ainda significa o processo local
O banco de dados que a aplicação chama de localhost está no servidor, não no seu notebook. Use o listener privado ou um encaminhamento SSH e depois force o cliente para TCP.
A aplicação no servidor do escritório se conecta ao MySQL em localhost, você copia esse nome de host para um cliente de desktop, e a conexão falha ou abre outro banco de dados. A VPN não mudou o significado da palavra: localhost ainda se refere à máquina que executa o cliente. A VPN moveu pacotes, não interfaces. Decida a qual endpoint o notebook deve chegar antes de tocar em uma rota.
Passo 1: decida a qual endpoint o notebook deve chegar
Os dois desenhos são legítimos e respondem a perguntas diferentes. O acesso direto significa que o banco escuta em um endereço privado que o túnel alcança, e o notebook se conecta a esse endereço. O acesso encaminhado significa que o banco fica em loopback e uma sessão SSH leva a porta até a sua máquina. Escolha um deliberadamente, porque misturá-los produz uma conexão que funciona pelo motivo errado.
Para o acesso direto, obtenha o nome ou endereço privado do próprio host do banco e a porta dele com quem o administra. O endereço do gateway da VPN não é o endereço do banco, a menos que seja a mesma máquina. Depois confirme que o listener está realmente vinculado a essa interface, porque uma rota para uma interface não cria um listener nela.
Passo 2: encaminhe a porta apenas se o listener permanecer local
Se o banco deve permanecer apenas em loopback, encaminhe-o por SSH e vincule também a ponta local a loopback. O endereço de vínculo à esquerda pertence ao seu notebook; o destino à direita é interpretado do lado do servidor SSH, como descreve a referência do OpenSSH. Inverter esses dois papéis é o motivo comum de um encaminhamento parecer funcionar mas não se conectar a nada.
ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:13306:127.0.0.1:3306 [email protected]
ss -ltn 'sport = :13306'
Se o SSH cair em um host de salto em vez do host do banco, o loopback à direita se refere ao host de salto, e o destino tem de mudar para um endereço que esse host alcance. O ExitOnForwardFailure captura uma falha ao estabelecer o encaminhamento, mas não prova que conexões posteriores ao destino tenham sucesso. Mantenha a verificação da chave do host ativada e não ofereça a porta de encaminhamento à sua LAN inteira vinculando-a a todas as interfaces.
Pare se o banco deve permanecer apenas em loopback e você não pode usar SSH. Então o acesso direto é o desenho errado, não uma configuração a forçar.
Passo 3: force o cliente para TCP
No Unix, um cliente MySQL que recebe localhost escolhe um socket Unix por padrão, então mudar apenas a porta pode deixá-lo procurando um socket que não tem nada a ver com o seu encaminhamento. Use o protocolo TCP explícito e o endereço loopback para o cliente abrir uma conexão à sua porta de encaminhamento.
mysql --protocol=TCP --host=127.0.0.1 --port=13306 --user=DB_USER --password
A opção de senha sem valor pergunta em vez de colocar o segredo na linha de comando, e esse é o hábito que vale a pena manter. Outras ferramentas têm o próprio interruptor para a mesma distinção, e alguns drivers também tratam localhost de forma especial. Verifique o que o seu cliente faz em vez de supor que a flag passou. A conta do banco também precisa de uma permissão que corresponda à origem que o servidor vê, que é o host de encaminhamento e não o seu notebook.
Pare se a ferramenta não puder ser forçada para TCP. Então use outro cliente, ou use o acesso direto ao listener privado.
Passo 4: prove a qual endpoint você realmente chegou
Pergunte ao servidor o que ele acha que é a conexão. As variáveis de nome de host, porta e socket dizem se você chegou por TCP e qual listener respondeu, e a lista de conexões mostra o endereço de origem que o servidor registrou. Essa evidência é mais útil que outra mudança de rota.
mysql --protocol=TCP -h 127.0.0.1 -P 13306 -u DB_USER -p -e "SELECT @@hostname, @@port, @@socket"
Anote a qual endpoint você tentou: um socket Unix local, a sua porta de encaminhamento ou o listener privado. Essas três falhas têm correções diferentes, e mudar a rota da VPN enquanto o cliente ainda fala com o localhost errado é esforço perdido. Mantenha também separadas nas notas a autenticação SSH e a autenticação do banco, porque uma falha em uma parece uma falha na outra a partir de um cliente de desktop. Depois remova o encaminhamento quando terminar.
A lista termina quando você consegue nomear o endpoint, o protocolo do cliente, o endereço de origem que o servidor viu e a permissão que o permitiu. Quatro fatos, e o próximo problema de conexão leva minutos em vez de uma tarde.