Voltar às atualizações
New releaseSep 8, 2026

strongswan v6.1.0

strongSwan - VPN baseada em IPsec

Compartilhar

Configuração do strongSwan

Visão Geral

O strongSwan é uma solução de VPN OpenSource baseada em IPsec.

Este documento é apenas uma breve introdução ao comando swanctl do strongSwan, que utiliza a moderna vici Versatile IKE Configuration Interface. O comando ipsec, obsoleto, que usa a interface de configuração stroke legada, é descrito aqui. Para informações mais detalhadas, consulte as páginas de manual, o novo site de documentação e o wiki legado.

Quickstart

Certificados para usuários, hosts e gateways são emitidos por uma CA strongSwan fictícia. Em nossos cenários de exemplo, o certificado da CA strongswanCert.pem precisa estar presente em todos os endpoints VPN para que os pares possam ser autenticados. Para sua aplicação VPN específica, você pode usar certificados de qualquer CA de terceiros ou gerar você mesmo as chaves privadas e certificados necessários com a ferramenta pki do strongSwan, cujo uso será explicado em uma das seções a seguir.

Caso Site a Site

Neste cenário, dois gateways de segurança, moon e sun, conectarão as duas sub-redes moon-net e sun-net entre si por meio de um túnel VPN estabelecido entre os dois gateways:

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

Configuração no gateway 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
                }
            }
        }
    }

Configuração no gateway 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
                }
            }
        }
    }

As identidades locais e remotas usadas neste cenário são os subjectDistinguishedNames contidos nos certificados de entidade final. Os certificados e as chaves privadas são carregados no daemon charon com o comando

swanctl --load-creds

enquanto

swanctl --load-conns

carrega as conexões definidas em swanctl.conf. Com start_action = trap, a conexão IPsec é estabelecida automaticamente com o primeiro pacote IP de payload em texto claro que quiser passar pelo túnel.

Caso Host a Host

Esta é uma configuração entre dois hosts únicos que não possuem uma sub-rede atrás deles. Embora o modo de transporte IPsec fosse suficiente para conexões host a host, usaremos o modo túnel IPsec padrão.

| 192.168.0.1 | === | 192.168.0.2 |
     moon                sun

Configuração no 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
                }
            }
        }
    }

Configuração no 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 é um caso muito comum em que um gateway strongSwan atende a um número arbitrário de clientes VPN remotos, geralmente com endereços IP dinâmicos.

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

Configuração no gateway 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
                }
            }
        }
    }

Configuração no 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, foi escolhido o nome de host moon.strongswan.org, que será resolvido por DNS em tempo de execução para o endereço IP de destino correspondente. Neste cenário, a identidade do roadwarrior carol é o endereço de e-mail [email protected], que deve ser incluído como subjectAlternativeName no certificado do roadwarrior carolCert.pem.

Caso Roadwarrior com IP Virtual

Os roadwarriors geralmente têm endereços IP dinâmicos atribuídos pelo ISP ao qual estão conectados no momento. Para simplificar o roteamento de moon-net de volta ao cliente de acesso remoto carol, seria desejável que o roadwarrior tivesse um endereço IP interno escolhido de um pool predefinido.

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

Categorias