Volver a actualizaciones
Nuevo releaseSep 8, 2026

strongswan v6.1.0

strongSwan - VPN basada en IPsec

Compartir

Configuración de strongSwan

Resumen

strongSwan es una solución VPN de código abierto basada en IPsec.

Este documento es solo una breve introducción al comando swanctl de strongSwan, que utiliza la moderna vici Versatile IKE Configuration Interface. El comando obsoleto ipsec, que utiliza la interfaz de configuración stroke heredada, se describe aquí. Para obtener información más detallada, consulte las páginas man, nuestro nuevo sitio de documentación y la wiki heredada.

Inicio rápido

Los certificados para usuarios, hosts y pasarelas son emitidos por una CA strongSwan ficticia. En nuestros escenarios de ejemplo, el certificado de CA strongswanCert.pem debe estar presente en todos los extremos VPN para poder autenticar a los peers. Para su aplicación VPN particular, puede utilizar certificados de cualquier CA de terceros o generar las claves privadas y los certificados necesarios usted mismo con la herramienta pki de strongSwan, cuyo uso se explicará en una de las secciones siguientes.

Caso sitio a sitio

En este escenario, dos pasarelas de seguridad moon y sun conectarán las dos subredes moon-net y sun-net entre sí a través de un túnel VPN establecido entre las dos pasarelas:

10.1.0.0/16 -- | 192.168.0.1 | === | 192.168.0.2 | -- 10.2.0.0/16
  moon-net          moon                 sun           sun-net

Configuración en la pasarela moon:

/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem

/etc/swanctl/swanctl.conf:

    connections {
        net-net {
            remote_addrs = 192.168.0.2

            local {
                auth = pubkey
                certs = moonCert.pem
            }
            remote {
                auth = pubkey
                id = "C=CH, O=strongSwan, CN=sun.strongswan.org"
            }
            children {
                net-net {
                    local_ts  = 10.1.0.0/16
                    remote_ts = 10.2.0.0/16
                    start_action = trap
                }
            }
        }
    }

Configuración en la pasarela sun:

/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/sunCert.pem
/etc/swanctl/private/sunKey.pem

/etc/swanctl/swanctl.conf:

    connections {
        net-net {
            remote_addrs = 192.168.0.1

            local {
                auth = pubkey
                certs = sunCert.pem
            }
            remote {
                auth = pubkey
                id = "C=CH, O=strongSwan, CN=moon.strongswan.org"
            }
            children {
                net-net {
                    local_ts  = 10.2.0.0/16
                    remote_ts = 10.1.0.0/16
                    start_action = trap
                }
            }
        }
    }

Las identidades locales y remotas utilizadas en este escenario son los subjectDistinguishedNames contenidos en los certificados de entidad final. Los certificados y las claves privadas se cargan en el demonio charon con el comando

swanctl --load-creds

mientras que

swanctl --load-conns

carga las conexiones definidas en swanctl.conf. Con start_action = trap, la conexión IPsec se establece automáticamente con el primer paquete IP de carga útil en texto plano que desee atravesar el túnel.

Caso de host a host

Esta es una configuración entre dos hosts individuales que no tienen una subred detrás. Aunque el modo transporte IPsec sería suficiente para conexiones host a host, utilizaremos el modo túnel IPsec predeterminado.

| 192.168.0.1 | === | 192.168.0.2 |
     moon                sun

Configuración en el host moon:

/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem

/etc/swanctl/swanctl.conf:

    connections {
        host-host {
            remote_addrs = 192.168.0.2

            local {
                auth=pubkey
                certs = moonCert.pem
            }
            remote {
                auth = pubkey
                id = "C=CH, O=strongSwan, CN=sun.strongswan.org"
            }
            children {
                net-net {
                    start_action = trap
                }
            }
        }
    }

Configuración en el host sun:

/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/sunCert.pem
/etc/swanctl/private/sunKey.pem

/etc/swanctl/swanctl.conf:

    connections {
        host-host {
            remote_addrs = 192.168.0.1

            local {
                auth = pubkey
                certs = sunCert.pem
            }
            remote {
                auth = pubkey
                id = "C=CH, O=strongSwan, CN=moon.strongswan.org"
            }
            children {
                host-host {
                    start_action = trap
                }
            }
        }
    }

Caso roadwarrior

Este es un caso muy común en el que una pasarela strongSwan atiende a un número arbitrario de clientes VPN remotos que normalmente tienen direcciones IP dinámicas.

10.1.0.0/16 -- | 192.168.0.1 | === | x.x.x.x |
  moon-net          moon              carol

Configuración en la pasarela moon:

/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem

/etc/swanctl/swanctl.conf:

    connections {
        rw {
            local {
                auth = pubkey
                certs = moonCert.pem
                id = moon.strongswan.org
            }
            remote {
                auth = pubkey
            }
            children {
                net-net {
                    local_ts  = 10.1.0.0/16
                }
            }
        }
    }

Configuración en el roadwarrior carol:

/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/carolCert.pem
/etc/swanctl/private/carolKey.pem

/etc/swanctl/swanctl.conf:

    connections {
        home {
            remote_addrs = moon.strongswan.org

            local {
                auth = pubkey
                certs = carolCert.pem
                id = [email protected]
            }
            remote {
                auth = pubkey
                id = moon.strongswan.org
            }
            children {
                home {
                    local_ts  = 10.1.0.0/16
                    start_action = start
                }
            }
        }
    }

Para remote_addrs se eligió el nombre de host moon.strongswan.org, que será resuelto por DNS en tiempo de ejecución a la dirección IP de destino correspondiente. En este escenario, la identidad del roadwarrior carol es la dirección de correo electrónico [email protected], que debe incluirse como subjectAlternativeName en el certificado del roadwarrior carolCert.pem.

Caso roadwarrior con IP virtual

Los roadwarriors normalmente tienen direcciones IP dinámicas asignadas por el ISP al que están conectados actualmente. Para simplificar el enrutamiento desde moon-net de vuelta al cliente de acceso remoto carol, sería deseable que el roadwarrior tuviera una dirección IP interna elegida de un pool predefinido.

Categorías