> ## Documentation Index
> Fetch the complete documentation index at: https://docs.basaltic.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Tablas de rutas y rutas

> La tabla que usa una subred es lo que la hace pública o privada, y exactamente una ruta por destino.

<a id="route-tables" />

## Tablas de rutas

Cada VPC obtiene una tabla predeterminada llamada `<vpc-name>-private-rt` cuando se crea. Las subredes la usan a menos que proporcionen una referencia `route_table`. Los nombres de tabla son únicos por VPC. Los nombres largos generados se acortan con un hash.

Las tablas predeterminadas existentes anteriormente llamadas `main` se renombran en su lugar; sus ID, rutas y asociaciones de subred permanecen sin cambios. Un sufijo numérico resuelve las colisiones de nombres. El rol por defecto se identifica por `is_main`, independientemente de su nombre. El nombre histórico `main` permanece reservado.

<Tabs>
  <Tab title="Console">
    Vaya a **Networking → Route Tables** y elija **Create Route Table**. En **Route table details**, seleccione el **VPC** y déle un **Name**.
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    POST /v1/route-tables
    { "vpc": "<vpc>", "name": "private" }
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic network route-table create --vpc <vpc-id> --name private
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    rt, err := network.New(cfg).CreateRouteTable(ctx, &network.RouteTableCreateRequest{
        VPC: vpcID,
        Name:  "private",
    })
    ```
  </Tab>
</Tabs>

Las respuestas de la tabla de rutas incluyen el objeto `vpc` completo en lugar de `vpc_id`, por lo que `vpc.id` y `vpc.name` identifican el padre sin una búsqueda solo de visualización. La creación todavía toma una referencia de cadena `vpc`.

Una subred solo incrusta un resumen de tabla de rutas (`id`, `crn`, `name`), que puede ser nulo; no contiene rutas ni repite la VPC. Obtener las rutas de la tabla al comprobar la accesibilidad. Las respuestas de ruta individuales todavía llevan `route_table_id` para identificar su tabla.

La eliminación de una tabla se rechaza en dos casos: la tabla principal no se puede eliminar en absoluto, y una tabla que todavía está asociada con subredes se rechaza con "reasociarlas primero". Las rutas en una tabla desaparecen con ella.

<a id="routes" />

## Rutas

<Tabs>
  <Tab title="Console">
    Abra la tabla en **Networking → Route Tables** y elija **Add
    Route**. Rellene **Destination CIDR**, luego elija un **Target type**: **IP
    address**, **Internet Gateway**, **NAT Gateway** o **Egress-Only
    Gateway**, y el campo debajo cambiará para que coincida. Confirme con **Add
    Route**.
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    POST /v1/route-tables/{route_table_id}/routes
    { "destination_cidr": "10.1.0.0/16", "next_hop_ip": "10.0.1.9" }
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic network route create <route-table-id> \
      --destination-cidr 10.1.0.0/16 --next-hop-ip 10.0.1.9
    ```

    Intercambiar `--next-hop-ip` por `--target-internet-gateway`, `--target-nat-gateway` o `--target-egress-only-gateway`. Exactamente uno.
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    r, err := network.New(cfg).CreateRoute(ctx, routeTableID, &network.RouteCreateRequest{
        DestinationCIDR: "10.1.0.0/16",
        NextHopIP:    basaltic.String("10.0.1.9"),
    })
    ```
  </Tab>
</Tabs>

`destination` es un CIDR, y **exactamente un** campo de destino debe ser establecido:

<ResponseField name="next_hop_ip" type="string">
  Un salto siguiente de unicast **dentro del CIDR de esta VPC**, de la misma familia que el destino. Se rechazan las direcciones de bucle, local de enlace, multidifusión y no especificadas, así como cualquier cosa que esté fuera de la VPC. Esto es para dispositivos y tarjetas de red que ejecutas tú mismo. La salida de Internet no se puede expresar de esta manera, porque un destino de puerta de enlace es lo que fija la ruta al enlace ascendente de tu propia VPC.
</ResponseField>

<ResponseField name="target_internet_gateway" type="string">
  La puerta de enlace debe estar conectada y conectada a **esta** VPC. De lo contrario, la creación falla con "la puerta de enlace de Internet de destino no está conectada a una VPC" o "la puerta de enlace de Internet de destino está conectada a una VPC diferente".
</ResponseField>

<ResponseField name="target_nat_gateway" type="string">
  Soporta IPv4 e IPv6. Use `0.0.0.0/0` y `::/0` para salida compartida de Internet. Una ruta IPv6 requiere IPv6 en la subred de alojamiento de la puerta de enlace. Agregar una ruta no asigna las direcciones de la puerta de enlace.
</ResponseField>

<ResponseField name="target_egress_only_gateway" type="string">
  Destinos IPv6 solamente, y rechazó el otro camino.
</ResponseField>

<Note>
  En la consola, esto es **Target type → Egress-Only Gateway** en **Add
  Route**. El diálogo comprueba el emparejamiento a medida que escribe: se rechaza nombrar un destino IPv4 con un destino solo de salida antes de enviar.
</Note>

<a id="one-route-per-destination" />

### Una ruta por destino

Una tabla contiene como máximo una ruta a un destino dado. Una segunda se rechaza con `409`.

No hay par de igual costo y no hay desempate entre dos rutas al mismo prefijo, porque la segunda nunca se crea.

Una ruta de `destination` y el objetivo son inmutables; `PATCH` Solo toma
`description` y `tags`. Para volver a apuntar una ruta, elimínela y cree la ruta de reemplazo.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.