Configura MongoDB Atlas con el intercambio de tráfico entre VPC

En esta página, se describe cómo configurar una base de datos de origen de MongoDB Atlas para que funcione con Datastream mediante el intercambio de tráfico entre nubes privadas virtuales. Ten en cuenta que el procedimiento descrito no es una solución de alta disponibilidad. Si el nodo de MongoDB falla en la prueba del perfil de conexión, debes ejecutar de forma manual la secuencia de comandos de inicio a la que se hace referencia más adelante en esta página en la máquina virtual (VM) de traducción de direcciones de red (NAT).

Debido a que el intercambio de tráfico entre nubes privadas virtuales no es transitivo, debes configurar una puerta de enlace de NAT con una VM de Compute Engine para enrutar el tráfico de Datastream a MongoDB Atlas.

Configura un usuario de la base de datos de MongoDB

Para usar Datastream con una instancia de MongoDB Atlas, primero debes crear un usuario de la base de datos y otorgarle privilegios de acceso:

  1. En el panel de MongoDB Atlas, en Seguridad, haz clic en Acceso a la base de datos.
  2. Haz clic en Usuario de base de datos nuevo y selecciona el método de autenticación de contraseña para tu usuario.
  3. Ingresa el nombre de usuario y la contraseña de tu usuario de Datastream.
  4. En Privilegios de usuario de la base de datos, selecciona Otorgar privilegios de usuario específicos.
  5. En Privilegios específicos, agrega la siguiente función:
    • readAnyDatabase
  6. Haz clic en Agregar usuario.

Configura tu red de nube privada virtual

Identifica la red de nube privada virtual en tu Google Cloud proyecto para intercambiar tráfico con Datastream y MongoDB Atlas. En esta página, se supone que usas la VPC predeterminada y su subred, por ejemplo, la subred predeterminada en la región us-central1.

  1. Asegúrate de que la red que identificaste no tenga rangos de direcciones IP superpuestos con tus redes de Datastream o MongoDB Atlas.
  2. Crea una configuración de conectividad privada para intercambiar tráfico de Datastream con tu red de nube privada virtual:
    1. Asegúrate de seleccionar Intercambio de tráfico entre VPC en el menú desplegable Método de conectividad privada.
    2. Selecciona tu red de VPC default.
    3. Proporciona un rango de direcciones IP sin usar, por ejemplo, 10.0.0.0/29, para que lo use Datastream.
    4. Toma nota del rango de IP asignado para tu regla de firewall de entrada.
  3. Configura una conexión de intercambio de tráfico de red en MongoDB Atlas para intercambiar tráfico de tu red de nube privada virtual con tu red de MongoDB Atlas. Para obtener más información, consulta Configura una conexión de intercambio de tráfico de red en la documentación de MongoDB:
    1. Proporciona el ID de tu Google Cloud proyecto y el nombre de tu VPC predeterminada en MongoDB Atlas.
    2. Anota el ID del proyecto y el nombre de la VPC que te proporciona MongoDB Atlas para completar el intercambio de tráfico en el lado de la Google Cloud side.
  4. Después de crear la conexión, en tu proyecto de MongoDB Atlas, ve a la pestaña Acceso a la red > Intercambio de tráfico entre VPC y toma nota del bloque de enrutamiento entre dominios sin clase (CIDR) para tu regla de firewall de salida.

Crea una VM de NAT

  1. En la Google Cloud consola de, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en Crear instancia.

  3. En el campo Nombre , ingresa un nombre para la VM, por ejemplo, mongo-nat-gateway.

  4. En el campo Región , selecciona una región dentro de tu VPC predeterminada, por ejemplo, us-central1.

  5. En el menú de navegación, haz clic en Herramientas de redes.

  6. En el campo Etiquetas de red, agrega una etiqueta, como mongo-nat-vm. Las reglas de firewall usan esta etiqueta.

  7. En Reenvío de IP, selecciona la casilla de verificación Habilitar.

  8. En Interfaces de red, selecciona tu VPC predeterminada y su subred, por ejemplo default en us-central1.

  9. En el menú de navegación, haz clic en Opciones avanzadas.

  10. En la sección Automatización, pega la siguiente secuencia de comandos en el campo Secuencia de comandos de inicio. Reemplaza PRIVATE_SRV_RECORD por el registro SRV privado de tu clúster de MongoDB Atlas, por ejemplo, my-cluster-pri.abcde.mongodb.net.

    #!/bin/bash
    
    # --- Startup script for MongoDB Atlas NAT gateway ---
    # This script has two main functions:
    # 1. Resolves the IP address of a MongoDB Atlas node from its SRV record.
    # 2. Configures iptables to forward traffic to the resolved MongoDB IP.
    # --------------------------------------------------------------------------
    
    # --- Part 1: Resolve MongoDB node IP address ---
    
    #
    # EDIT THIS LINE to match your Mongo Atlas private SRV record
    #
    export SRV_RECORD=PRIVATE_SRV_RECORD
    
    echo "Resolving SRV record for: $SRV_RECORD"
    
    # Function to install DNS utilities if needed
    install_dns_tools() {
        echo "'dig' not found. Attempting to install DNS utilities..."
        if command -v apt-get &> /dev/null; then
            # Wait for any existing apt processes to finish before trying to install packages.
            # This is common on VM startup where the system might be running automatic updates.
            echo "Checking for and waiting on existing apt-get processes..."
            while fuser /var/lib/apt/lists/lock /var/lib/dpkg/lock /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do
                echo "Another apt process is running. Waiting 10 seconds..."
                sleep 10
            done
            echo "Apt lock is free. Proceeding with installation."
    
            apt-get update && apt-get install -y dnsutils
        else
            echo "Error: Could not find apt-get to install DNS utilities."
            exit 1
        fi
    
        # Verify that dig is now available
        if ! command -v dig &> /dev/null; then
            echo "Error: Failed to install DNS utilities."
            exit 1
        fi
    }
    
    # Check if 'dig' is installed. If not, install it.
    if ! command -v dig &> /dev/null; then
        install_dns_tools
    fi
    
    echo "Using 'dig' for DNS resolution."
    # The `+short` option provides a concise output.
    # We use `awk` to grab the 4th column (the hostname) and `head` to get the first one.
    NODE_HOSTNAME=$(dig +short SRV "_mongodb._tcp.${SRV_RECORD}" | awk '{print $4}' | head -n 1)
    if [ -n "$NODE_HOSTNAME" ]; then
        NODE_IP=$(dig +short A "$NODE_HOSTNAME")
    fi
    
    # Check if the SRV lookup was successful and we got a hostname.
    if [ -z "$NODE_HOSTNAME" ]; then
        echo "Error: Could not resolve SRV record. Check the hostname and your
        network connection."
        exit 1
    fi
    
    echo "Found node hostname: $NODE_HOSTNAME"
    
    # Check if the A record lookup was successful.
    if [ -z "$NODE_IP" ]; then
        echo "Error: Could not resolve the IP address for node: $NODE_HOSTNAME"
        exit 1
    fi
    
    # 3. Print the final result of the lookup.
    echo "Successfully resolved IP address of a node: $NODE_IP"
    
    # --- Part 2: Configure iptables for NAT ---
    
    # Substitute the resolved IP address into the DB_ADDR variable.
    export DB_ADDR=$NODE_IP
    export DB_PORT=27017
    
    # Enable the VM to receive packets whose destinations do
    # not match any running process local to the VM
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
    # Ask the Metadata server for the IP address of the VM nic0
    # network interface:
    md_url_prefix="http://169.254.169.254/computeMetadata/v1/instance"
    vm_nic_ip="$(curl -H "Metadata-Flavor: Google" ${md_url_prefix}/network-interfaces/0/ip)"
    
    # Clear any existing iptables NAT table entries (all chains):
    iptables -t nat -F
    
    # Create a NAT table entry in the prerouting chain, matching
    # any packets with destination database port, changing the destination
    # IP address of the packet to the MongoDB instance IP address:
    iptables -t nat -A PREROUTING \
         -p tcp --dport $DB_PORT \
         -j DNAT \
         --to-destination $DB_ADDR
    
    # Create a NAT table entry in the postrouting chain, matching
    # any packets with destination database port, changing the source IP
    # address of the packet to the NAT VM's primary internal IPv4 address:
    iptables -t nat -A POSTROUTING \
         -p tcp --dport $DB_PORT \
         -j SNAT \
         --to-source $vm_nic_ip
    
    # Save iptables configuration:
    iptables-save
    
    echo "Startup script completed successfully. iptables rules are configured and saved."
  11. Haz clic en Crear para iniciar la VM.

  12. Después de que se ejecute la VM, anota su dirección IP interna, por ejemplo, 10.128.0.2.

Crea reglas de firewall de entrada y salida

Debes crear dos reglas de firewall en tu red de VPC.

  1. Crea una regla de firewall de entrada con estas características:

    • Nombre: INGRESS_RULE_NAME
    • Dirección: entrada
    • Acción: permitir
    • Parámetro de destino: la etiqueta de destino mongo-nat-vm
    • Parámetro de origen: el rango de direcciones IP que usa la configuración de conectividad privada de Datastream, por ejemplo, 10.0.0.0/29
    • Protocolo: TCP
    • Puerto: 27017
  2. Crea una regla de firewall de salida con estas características:

    • Nombre: EGRESS_RULE_NAME
    • Dirección: salida
    • Acción: permitir
    • Parámetro de destino: la etiqueta de destino mongo-nat-vm
    • Parámetro de destino: el bloque CIDR de MongoDB Atlas, por ejemplo, 192.168.240.0/21
    • Protocolo: TCP
    • Puerto: 27017

Configura las listas de entidades permitidas de IP en MongoDB Atlas

Permite la dirección IP interna de la VM de NAT en la configuración de seguridad de MongoDB Atlas:

  1. Accede a tu cuenta de MongoDB Atlas.
  2. En el menú de navegación, haz clic en Seguridad y, luego, en Acceso a la red.
  3. Haz clic en Agregar dirección IP.
  4. En el campo Entrada de la lista de acceso, ingresa la dirección IP interna de la instancia de VM de NAT que creaste en tu red de VPC.
  5. Haz clic en Confirmar y espera a que el estado cambie a Activo.

Crea el perfil de conexión

Crea un perfil de conexión de Datastream para tu base de datos.

  1. Ve a la página Perfiles de conexión en la Google Cloud consola de.

    Ir a la página Perfiles de conexión

  2. Haz clic en Crear perfil y selecciona MongoDB.

  3. En el campo Nombre de host, ingresa la dirección IP interna de la instancia de VM de NAT que creaste en tu red de VPC.

  4. En el campo Puerto, ingresa 27017.

  5. Ingresa el nombre de usuario y la contraseña de tu usuario de la base de datos.

  6. Agrega las etiquetas tls y tls_allow_invalid_hostnames y establece sus valores en true. Para obtener más información sobre cómo configurar etiquetas, consulta Crea un perfil de conexión para una base de datos de MongoDB database.

  7. Selecciona Conectividad privada como método de conectividad.

  8. Selecciona la configuración de conectividad privada que creaste.

  9. Haz clic en Crear para guardar el perfil de conexión.

  10. Ejecuta una prueba para verificar la conexión a tu base de datos.