El plan se aplica sin problemas, el túnel se levanta y la consola lo llama basado en políticas. El tráfico sigue sin pasar, y la búsqueda de un interruptor basado en rutas en el recurso de Terraform no lleva a ninguna parte porque ese campo no existe. En Classic VPN, el comportamiento basado en rutas no es un modo que se elija. Es lo que se obtiene cuando el selector de tráfico local es 0.0.0.0/0, los selectores remotos enumeran las redes que realmente se quieren y una ruta apunta al túnel. Tres cosas, y la etiqueta sigue.

El mito: un campo de modo del túnel

La etiqueta de la consola refleja lo que la API ve en los selectores. Nada en el recurso dice basado en rutas, así que no hay nada que poner en verdadero.

Buscar ese campo consume la primera hora del problema, mientras que leer los valores de los selectores ocupa los últimos cinco minutos.

Qué significa aquí basado en rutas

Google documenta los túneles basados en rutas de Classic VPN como túneles basados en políticas cuyo selector local es 0.0.0.0/0. Solo se nombran los rangos remotos, y el lado local se trata como cualquier dirección. Por eso el marcador de su configuración es un valor y no un modo. Escriba ambos selectores de forma explícita y léalos en la salida del plan:

local_traffic_selector  = ["0.0.0.0/0"]
remote_traffic_selector = ["10.20.0.0/16"]

El prefijo del par en ese fragmento es ilustrativo; la forma es lo que importa.

La ruta es un objeto aparte

Un objeto de túnel no instala una ruta. Los paquetes pueden coincidir con la política del túnel y aun así no tener adónde ir, porque la tabla de enrutamiento de la VPC decide el siguiente salto. La ruta necesita el rango de destino, la red, el túnel como siguiente salto y una prioridad que gane a cualquier cosa más amplia. Si se olvida, se obtiene un túnel que informa de establecido y un ping que nunca sale de la VPC.

resource "google_compute_route" "office" {
  name                = "office-via-vpn"
  dest_range          = "10.20.0.0/16"
  network             = google_compute_network.vpc.name
  next_hop_vpn_tunnel = google_compute_vpn_tunnel.to_office.id
  priority            = 1000
}

Cree la ruta en el mismo módulo que el túnel, para que los dos no se separen durante la revisión.

Refleje los selectores en el par

El dispositivo remoto debe configurarse con la imagen espejo: su rango local es su selector remoto, y su rango remoto debe cubrir las subredes de GCP que espera usar. Si cualquiera de los dos lados se estrecha, la fase 2 falla aunque la fase 1 tenga éxito. Es la forma más común de una configuración que parece correcta en la consola y no transporta tráfico.

Imprima los selectores de ambos lados uno junto al otro durante la revisión del cambio.

Divida la dirección estática en dos aplicaciones

Crear la dirección reservada y el túnel que la referencia en una sola aplicación es una fuente conocida de inestabilidad, porque la dirección debe existir antes de que la regla de reenvío pueda usarla. Aplique primero solo el recurso de la dirección, después añada la puerta de enlace, las reglas de reenvío y el túnel y vuelva a aplicar. Terraform lee la dirección existente del estado en la segunda ejecución y la reutiliza. Si se salta eso, el túnel puede recibir una dirección pública nueva en cada aplicación, lo que rompe la configuración del par cada vez.

Dos aplicaciones ahora son más baratas que un cambio de par en cada versión.

Verifique la negociación, no la etiqueta

Tras aplicar, compruebe tres hechos separados: el túnel informa de establecido, la ruta existe con el siguiente salto previsto y el par informa de que la fase 1 y la fase 2 están activas.

Un túnel activo con la fase 2 caída significa que los dos lados no coinciden en los selectores:

  • Un lado enumera una subred que el otro no enumera.
  • Un lado usa un agregado que el otro ha estrechado.
  • La ruta existe pero apunta a un túnel distinto.

Classic VPN es un solo túnel con un SLA más bajo que HA VPN, y HA VPN usa dos interfaces, dos túneles y BGP con tipos de recursos distintos. Copiar un ejemplo clásico en una configuración HA y esperar que los campos de selector se comporten igual es un error aparte que conviene evitar. Los propios campos del túnel están documentados en la referencia de google_compute_vpn_tunnel.

Artículos relacionados