Por: @jonasc Publicado em: 2021-06-29

Libreswan IPsec - Exemplos de Topologias

Topologia

Dois Firewalls FWFLEX com IPsec instalado.

Versão do IPsec: Libreswan 4.3

Configuração

IKEv1 Peer estático - Ativo x Ativo

conn teste01
    authby=secret
    auto=start
    keyingtries=%forever
    type=tunnel
    compress=no
    aggrmode=no
    cisco_unity=no
    ikev2=no

    # Phase 1
    keyexchange=ike
    ikelifetime=28800s
    ike=aes128-sha256;modp1024

    # Phase 2
    phase2alg=aes128-sha256;modp1024
    pfs=yes
    keylife=3600s

    # Network - local
    left=172.28.60.13
    leftsubnet=10.157.0.0/24
    leftsourceip=172.28.60.13
    leftid=172.28.60.13
    leftupdown="ipsec _updown ; itflex-reload-routes"

    # Network - Remote
    right=172.28.60.10
    rightsubnet=10.152.0.0/24
    rightsourceip=172.28.60.10
    rightid=172.28.60.10

Secrects:

172.28.60.13 172.28.60.10: PSK "semprelinux"

IKEv2 Peer estático - Ativo x Ativo

conn teste01
    authby=secret
    auto=start
    keyingtries=%forever
    type=tunnel
    compress=no
    aggrmode=no
    cisco_unity=no
    ikev2=insist

    # Phase 1
    keyexchange=ike
    ikelifetime=28800s
    ike=aes128-sha256;modp1024

    # Phase 2
    phase2alg=aes128-sha256;modp1024
    pfs=yes
    keylife=3600s

    # Network - local
    left=172.28.60.13
    leftsubnet=10.157.0.0/24
    leftsourceip=172.28.60.13
    leftid=172.28.60.13
    leftupdown="ipsec _updown ; itflex-reload-routes"

    # Network - Remote
    right=172.28.60.10
    rightsubnet=10.152.0.0/24
    rightsourceip=172.28.60.10
    rightid=172.28.60.10

Secrects:

172.28.60.13 172.28.60.10: PSK "semprelinux"

Autenticação por ID

Servidor VPN em modo escuta:

conn teste01
    authby=secret
    auto=add
    keyingtries=%forever
    type=tunnel
    compress=no
    aggrmode=no
    cisco_unity=no
    ikev2=insist

    # Phase 1
    keyexchange=ike
    ikelifetime=28800s
    ike=aes128-sha256;modp1024

    # Phase 2
    phase2alg=aes128-sha256;modp1024
    pfs=yes
    keylife=3600s

    # Network - local
    left=jonasc-ipsec01.itflex.local
    leftsubnet=10.157.0.0/24
    leftsourceip=10.157.0.254
    leftid=10.157.0.254
    leftupdown="ipsec _updown ; itflex-reload-routes"

    # Network - Remote
    right=%any
    rightsubnet=10.152.0.0/24
    rightsourceip=10.152.0.254
    rightid=10.152.0.254

OBS: Right passado como %any pois o IP do cliente pode ser dinâmico.

Secrects:

10.157.0.254 10.152.0.254: PSK "semprelinux"

Cliente VPN em modo ativo:

conn teste01
    authby=secret
    auto=start
    keyingtries=%forever
    type=tunnel
    compress=no
    aggrmode=no
    cisco_unity=no

    # Phase 1
    keyexchange=ike
    ikelifetime=28800s
    ike=aes128-sha256;modp1024

    # Phase 2
    phase2alg=aes128-sha256;modp1024
    pfs=yes
    keylife=3600s

    # Network - local
    left=%defaultroute
    leftsubnet=10.152.0.0/24
    leftsourceip=10.152.0.254
    leftid=10.152.0.254
    leftupdown="ipsec _updown ; itflex-reload-routes"

    # Network - Remote
    right=jonasc-ipsec01.itflex.local
    rightsubnet=10.157.0.0/24
    rightsourceip=10.157.0.254
    rightid=10.157.0.254

OBS: Right com nome DNS que deve resolver para o servidor. Left com variável do gateway, caso seja uma conexão em DHCP, que pode mudar de IP (ex. PPPoE).

Secrects:

10.152.0.254 10.157.0.254: PSK "semprelinux"

IPsec Route-based

Topologia em que é usado uma interface VTI dedicada (vti-shared=no) e sem criar rotas (vti-routing=no).

OBS: Também foi necessário modificar o leftupdown padrão, pois este cria as rotas para as redes negociadas, mesmo quando vti-routing=no.

ATENÇÃO: Se negociar 0.0.0.0/0 com vti-routing=yes ou manter o leftupdown padrão (–route yes), O Firewall irá criar uma rota default por dentro do IPsec e o ACESSO SERÁ PERDIDO e só retomado com stop do túnel.

Com os parâmetro corretos acima, o IPsec negocia 0.0.0.0/0 sem rotas.

conn teste01
    authby=secret
    auto=start
    keyingtries=%forever
    type=tunnel
    compress=no
    aggrmode=no
    cisco_unity=no
    ikev2=insist
    mark=12/0xffffff
    vti-interface=teste01
    vti-routing=no
    vti-shared=no

    # Phase 1
    keyexchange=ike
    ikelifetime=28800s
    ike=aes128-sha256;modp1024

    # Phase 2
    phase2alg=aes128-sha256;modp1024
    pfs=yes
    keylife=3600s

    # Network - local
    left=172.28.60.13
    leftsubnet=0.0.0.0/0
    leftsourceip=172.28.60.13
    leftid=172.28.60.13
    leftupdown="%disabled"

    # Network - Remote
    right=172.28.60.10
    rightsubnet=0.0.0.0/0
    rightsourceip=172.28.60.10
    rightid=172.28.60.10

E o roteamento é feito através da VTI:

[root@jonasc-ipsec01 ~]# ip route add 10.152.0.0/24 dev teste01
[root@jonasc-ipsec02 ~]# ip route add 10.157.0.0/24 dev teste01

OBS: A rota é criada sem nexthop, pois a interface é criada com peer:

[root@jonasc-ipsec01 ~]# ip addr show teste01
5: teste01@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ipip 172.28.60.13 peer 172.28.60.10

Testes das funcionalidades

Teste comum de ping entre as redes negociadas:

ping -I 10.152.0.254 10.157.0.254

E tcpdump quando usado interface VTI:

tcpdump -nni teste01