Debug della connettività

Esegui il debug della connettività

Hai configurato la connettività tra i database di origine e di destinazione, ma come fai a sapere che sono connessi? Quando le comunicazioni tra loro non vanno a buon fine, come puoi scoprire cosa è andato storto e dove?

Gli strumenti più basilari sono ping e traceroute.

Dindin

Ping esegue un test di base per determinare se la destinazione ("host remoto") è disponibile dall'origine. Ping invia un pacchetto ICMP Echo Request a un host remoto e si aspetta un ICMP Echo Reply in cambio. Se ping non riesce, significa che non esiste un percorso dall'origine alla destinazione. Tuttavia, l'esito positivo non significa che i pacchetti possono passare, ma solo che, in generale, l'host remoto può essere raggiunto.

Sebbene ping possa indicare se un host è attivo e risponde, non è garantito che sia affidabile. Alcuni provider di rete bloccano ICMP come misura di sicurezza, il che può rendere più difficile il debug della connettività.

Traceroute

Traceroute testa il percorso completo dei pacchetti di rete da un host all'altro. Mostra tutti i passaggi ("hop") eseguiti dal pacchetto lungo il percorso e il tempo impiegato per ogni passaggio. Se il pacchetto non arriva fino alla destinazione, traceroute non viene completato, ma termina con una serie di asterischi. In questo caso, cerca l'ultimo indirizzo IP raggiunto correttamente lungo il percorso. È qui che la connettività si è interrotta.

Traceroute può scadere. Inoltre, potrebbe non essere completato se un gateway lungo il percorso non è configurato correttamente per passare il pacchetto all'hop successivo.

Quando traceroute non viene completato, potresti essere in grado di capire dove si è interrotto. Trova l'ultimo indirizzo IP elencato nell'output traceroute ed esegui una ricerca nel browser per who owns [IP_ADDRESS]. I risultati potrebbero mostrare o meno il proprietario dell'indirizzo, ma vale la pena provare.

mtr

Lo strumento mtr è una forma di traceroute che rimane attiva e viene aggiornata continuamente, in modo simile al funzionamento del comando top per i processi locali.

Individua il tuo indirizzo IP locale

Se non conosci l'indirizzo locale del tuo host, esegui il comando ip -br address show. Su Linux, vengono visualizzati l'interfaccia di rete, lo stato dell'interfaccia, l'IP locale e gli indirizzi MAC. Ad esempio: eth0 UP 10.128.0.7/32 fe80::4001:aff:fe80:7/64.

In alternativa, puoi eseguire ipconfig o ifconfig per visualizzare lo stato delle tue interfacce di rete.

Individua l'indirizzo IP in uscita

Se non conosci l'indirizzo IP utilizzato dai database di origine e di destinazione per comunicare tra loro (l'indirizzo IP in uscita), completa i seguenti passaggi:

  1. Vai alla pagina Istanze SQL nella console Google Cloud .

    Vai alla pagina Istanze Cloud SQL

  2. Fai clic sul nome dell'istanza associata al job di migrazione di cui stai eseguendo il debug.
  3. Scorri verso il basso fino a visualizzare il riquadro Connetti a questa istanza. In questo riquadro viene visualizzato l'indirizzo IP in uscita.

Apri le porte locali

Per verificare che l'host sia in ascolto sulle porte che pensi, esegui il comando ss -tunlp4. In questo modo, puoi sapere quali porte sono aperte e in ascolto.

Ad esempio, se hai un database PostgreSQL in esecuzione, la porta 5432 deve essere attiva e in ascolto. Per SSH, dovresti vedere la porta 22.

Tutte le attività della porta locale

Utilizza il comando netstat per visualizzare tutta l'attività della porta locale. Ad esempio, netstat -lt mostra tutte le porte attualmente attive.

Connettiti all'host remoto utilizzando telnet

Per verificare che puoi connetterti all'host remoto utilizzando TCP, esegui il comando telnet. Telnet tenta di connettersi all'indirizzo IP e alla porta che hai indicato.

Ad esempio, se l'host remoto esegue un database PostgreSQL, dovresti essere in grado di connetterti tramite telnet sulla porta 5432: telnet 35.193.198.159 5432.

In caso di esito positivo, viene visualizzato quanto segue:

Trying 35.193.198.159...
Connected to 35.193.198.159.

In caso di errore, telnet smette di rispondere finché non forzi la chiusura del tentativo:

Trying 35.193.198.159...
^C

Autenticazione client

L'autenticazione client è controllata da un file di configurazione denominato pg_hba.conf (HBA sta per autenticazione basata su host).

Assicurati che la sezione delle connessioni di replica del file pg_hba.conf nel database di origine sia aggiornata in modo da accettare connessioni dall'intervallo di indirizzi IP del VPC di Cloud SQL.

Cloud Logging

Database Migration Service e Cloud SQL utilizzano Cloud Logging. Per informazioni complete, consulta la documentazione di Cloud Logging e rivedi le query di esempio di Cloud SQL.

Visualizza i log

Puoi visualizzare i log per le istanze Cloud SQL e altri progetti Google Cloud, come le istanze Cloud VPN o Compute Engine. Per visualizzare i log per le voci di log dell'istanza Cloud SQL:

Console

  1. Vai a Esplora log
  2. Seleziona un progetto Cloud SQL esistente nella parte superiore della pagina.
  3. In Query Builder, aggiungi quanto segue:
    • Risorsa: seleziona Database Cloud SQL. Nella finestra di dialogo, seleziona un'istanza Cloud SQL.
    • Nomi dei log: scorri fino alla sezione Cloud SQL e seleziona i file di log appropriati per la tua istanza. Ad esempio:
      • cloudsql.googleapis.com/postgres.log
    • Gravità: seleziona un livello di log.
    • Intervallo di tempo: seleziona un intervallo preimpostato o creane uno personalizzato.

gcloud

Utilizza il comando gcloud logging per visualizzare le voci di log. Nell'esempio seguente, sostituisci PROJECT_ID. Il flag limit è un parametro facoltativo che indica il numero massimo di voci da restituire.

gcloud logging read "projects/[PROJECT_ID]/logs/cloudsql.googleapis.com/postgres.log" --limit=10

Indirizzi IP privati

Le connessioni a un'istanza Cloud SQL che utilizza un indirizzo IP privato vengono autorizzate automaticamente per gli intervalli di indirizzi RFC 1918. Gli intervalli di indirizzi non RFC 1918 devono essere configurati in Cloud SQL come reti autorizzate. Devi anche aggiornare il peering di rete con Cloud SQL per esportare le route non RFC 1918. Ad esempio: gcloud compute networks peerings update cloudsql-postgres-googleapis-com --network=NETWORK --export-subnet-routes-with-public-ip --project=PROJECT.

L'intervallo IP 172.17.0.0/16 è riservato alla rete bridge Docker. Le istanze Cloud SQL create con un indirizzo IP in questo intervallo non saranno raggiungibili. Le connessioni da qualsiasi indirizzo IP all'interno di questo intervallo alle istanze Cloud SQL che utilizzano un indirizzo IP privato non riusciranno.

Risoluzione dei problemi relativi alla VPN

Consulta la pagina Risoluzione dei problemi di Cloud VPNGoogle Cloud .

Risoluzione dei problemi relativi al tunnel SSH inverso

Il tunneling SSH è un metodo per inoltrare alcune comunicazioni su una connessione SSH. Il tunneling SSH inverso consente di configurare un tunnel SSH, ma mantiene la rete di destinazione come quella che avvia la connessione del tunnel. Questo è utile quando non vuoi aprire una porta nella tua rete per motivi di sicurezza.

Quello che stai cercando di ottenere è la seguente configurazione:

Cloud SQL DB ---> Compute Engine VM bastion ---> tunnel ---> source network bastion ---> source DB

Si presume che:

  • Compute Engine VM bastion può accedere a Cloud SQL DB.

  • source network bastion può accedere a source DB (questo si ottiene eseguendo il peering della rete Cloud SQL con la rete della VM di Compute Engine).

Poi, configuri un tunnel SSH da source network bastion a Compute Engine VM bastion, che instrada tutte le connessioni in entrata a una porta su Compute Engine VM bastion attraverso il tunnel a source DB.

Ogni link nello scenario precedente può essere configurato in modo errato e impedire il funzionamento dell'intero flusso. Risolvi i problemi relativi a ogni link, uno alla volta:

source network bastion ---> source DB

  1. Connettiti a source network bastion utilizzando SSH o dal terminale se si tratta della macchina locale.
  2. Testa la connettività al database di origine utilizzando uno dei seguenti metodi:
    • telnet [source_db_host_or_ip] [source_db_port]: dovresti vedere le stringhe di connessione telnet, che terminano con Connected to x.x.x.x.
    • psql -h [source_db_host_or_ip] -p [source_db_port] -U [username] -d [database_name]: dovresti visualizzare una richiesta di password o un messaggio di accesso negato.

Se l'operazione non riesce, devi verificare di aver abilitato l'accesso da questo bastion al database di origine.

Compute Engine VM bastion ---> source DB

  1. Accedi tramite SSH a Compute Engine VM bastion (utilizzando gcloud compute ssh VM_INSTANCE_NAME).
  2. Testa la connettività al database di origine utilizzando uno dei seguenti metodi:
    • telnet 127.0.0.1 [tunnel_port]: dovresti vedere le stringhe di connessione telnet, che terminano con Connected to x.x.x.x.
    • psql -h 127.0.0.1 -p [tunnel_port] -U [username] -d [database_name]: dovresti visualizzare una richiesta di password o un messaggio di accesso negato.

Se l'operazione non riesce, devi verificare che il tunnel sia attivo e funzioni correttamente. L'esecuzione di sudo netstat -tupln mostra tutti i processi di ascolto su questa VM e dovresti vedere sshd listening on the tunnel_port.

Cloud SQL DB ---> source DB

Il modo migliore per testare questa operazione è testing the migration job da Database Migration Service. Se l'operazione non riesce, significa che si è verificato un problema con il peering o il routing VPC tra la rete Cloud SQL e la rete Compute Engine VM bastion.

Il firewall del server di database di origine deve essere configurato in modo da consentire l'intero intervallo IP interno allocato per la connessione di servizio privata della rete VPC che l'istanza Cloud SQL di destinazione utilizzerà come campo privateNetwork delle impostazioni ipConfiguration.

Per trovare l'intervallo IP interno nella console:

  1. Vai alla pagina Reti VPC nella console Google Cloud .
  2. Seleziona la rete VPC che vuoi utilizzare.
  3. Seleziona Accesso privato ai servizi > Intervalli IP allocati per i servizi.
  4. Trova l'intervallo IP interno associato alla connessione creata da servicenetworking-googleapis-com.

Puoi anche visualizzare il traffico tra l'istanza Cloud SQL e l'istanza VM di Compute Engine nella console Cloud Logging nel progetto Cloud VPN gateway. Nei log della VM di Compute Engine, cerca il traffico proveniente dall'istanza Cloud SQL. Nei log dell'istanza Cloud SQL, cerca il traffico proveniente dalla VM di Compute Engine.