Strongswan zu strongswan ikev1 site to site vti

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

IPsec-VTI mit StrongSwan und swanctl unter Debian

Strongswan zu Strongswan – IKEv2 Site-to-Site mit VTI

Szenario

Zwei Standorte mit jeweils einer festen IP-Adresse sollen über eine IPsec-VPN-Verbindung miteinander verbunden werden. Beide Seiten verwenden Debian Linux mit StrongSwan und kommunizieren über IKEv2. Zur besseren Routensteuerung wird ein Virtual Tunnel Interface (VTI) eingesetzt.

Die Authentifizierung erfolgt über Pre-Shared Keys (PSK). Durch die VTI-Schnittstelle lassen sich Routing, Firewall-Regeln und Monitoring wie bei einem physischen Interface behandeln. Dies ermöglicht eine saubere Integration in bestehende Netzwerkkonzepte, insbesondere bei komplexeren Routing-Szenarien oder Firewalls.

Netzwerkübersicht

  [ LAN A: 172.16.113.0/24 ]            [ LAN B: 172.16.114.0/24 ]
              |                                  |
         [ deb113 ] ——— IPsec VTI ——— [ deb114 ]
       192.168.6.113                    192.168.6.114
       VTI: 169.254.100.1               VTI: 169.254.100.2

Routingverhalten

Nach erfolgreicher Verbindung werden die internen Netzwerke über die VTI-Schnittstelle geroutet:

  • deb113: Route zu 172.16.114.0/24 via 169.254.100.2 über vti10
  • deb114: Route zu 172.16.113.0/24 via 169.254.100.1 über vti10

Diese Konfiguration erlaubt vollständige Kontrolle über die Weiterleitung und ermöglicht z. B. auch Policy-Routing oder Gateways im Failover-Betrieb.



Einstellung deb113 deb114
WAN-IP 192.168.6.113 192.168.6.114
Tunnel-IP 169.254.100.1 169.254.100.2
Internes Netz 172.16.113.0/24 172.16.114.0/24
PSK 123Start$

Pakete installieren

  • apt install strongswan-swanctl strongswan-charon

IP-Forwarding aktivieren

  • echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
  • sysctl -p

VTI-Setup-Skript erstellen

Datei: /usr/local/sbin/setup-vti.sh (auf beiden Seiten unterschiedlich)

deb113

#!/bin/bash
ip link add vti10 type vti local 192.168.6.113 remote 192.168.6.114 key 10
ip addr add 169.254.100.1/30 dev vti10
ip link set vti10 up
ip route add 172.16.114.0/24 dev vti10

deb114

#!/bin/bash
ip link add vti10 type vti local 192.168.6.114 remote 192.168.6.113 key 10
ip addr add 169.254.100.2/30 dev vti10
ip link set vti10 up
ip route add 172.16.113.0/24 dev vti10
  • chmod +x /usr/local/sbin/setup-vti.sh

Systemd-Unit für VTI

Datei: /etc/systemd/system/ipsec-vti10.service (identisch auf beiden Hosts)

[Unit]
Description=VTI interface for IPsec (vti10)
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/setup-vti.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
  • systemctl daemon-reexec
  • systemctl enable ipsec-vti10.service
  • systemctl start ipsec-vti10.service

strongswan.conf

Datei: /etc/strongswan.d/strongswan.conf

charon {
  install_routes = no
  install_virtual_ip = no
}

swanctl.conf

Datei: /etc/swanctl/swanctl.conf

deb113

connections {
  it113-it114 {
    local_addrs = 192.168.6.113
    remote_addrs = 192.168.6.114

    local {
      id = 192.168.6.113
    }
    remote {
      id = 192.168.6.114
    }

    children {
      vti-child {
        local_ts = 0.0.0.0/0
        remote_ts = 0.0.0.0/0
        esp_proposals = aes256-sha256-modp4096
        policies = no
        updown = /usr/lib/ipsec/_updown_vti
      }
    }
  }
}

secrets {
  ike-1 {
    id-1 = 192.168.6.113
    id-2 = 192.168.6.114
    secret = "123Start$"
  }
}

/etc/strongswan.d/charon.conf

charon {
  install_routes = no
  install_virtual_ip = no
}

deb114

connections {
  it114-it113 {
    local_addrs = 192.168.6.114
    remote_addrs = 192.168.6.113

    local {
      id = 192.168.6.114
    }
    remote {
      id = 192.168.6.113
    }

    children {
      vti-child {
        local_ts = 0.0.0.0/0
        remote_ts = 0.0.0.0/0
        esp_proposals = aes256-sha256-modp4096
        policies = no
        updown = /usr/lib/ipsec/_updown_vti
      }
    }
  }
}

secrets {
  ike-1 {
    id-1 = 192.168.6.114
    id-2 = 192.168.6.113
    secret = "123Start$"
  }
}

Start und Prüfung

  • systemctl enable strongswan-swanctl
  • systemctl start strongswan-swanctl
  • swanctl --load-all
  • swanctl --initiate --child vti-child

Verbindung prüfen

  • ip a → vti10 muss IP haben
  • ping 172.16.114.1 → von deb113 aus
  • swanctl --list-sas → zeigt aktive Security Associations

Firewall-Hinweis

UDP-Port 500 und 4500 müssen auf beiden Seiten offen sein.

Hinweis

Die VTI-Interfaces werden über systemd automatisch eingerichtet. Der StrongSwan-Dienst übernimmt anschließend den Tunnelbetrieb. Routing erfolgt manuell über das VTI.

Links