Raspberry PI – L2TP VPN over IPsec + PSK (Mikrotik)

Nastala potřeba navázat persistentní VPN z prostředí Raspberry Pi (Dekstop) vůči Mikrotik L2TP VPN s IPsec a předsdíleným klíčem. Za normálních okolností by se nabízelo použití Wireguard VPN nebo OpenVPN, nicméně v tomto případě jsem limitován pouze možností použít L2TP.

Je tedy potřeba nastavit „Raspberry Pi L2TP/IPsec Always‑On VPN Client“

Obsah

Cílem návodu je

  • Plně automatický VPN klient s automatickou opravou
  • Automaticky se připojuje při spuštění
  • Znovu se připojuje v případě výpadku IP, přerušení L2TP, selhání PPP nebo restartu MikroTiku
  • Routy, které se aktivují pouze při spuštění ppp0
  • IPsec je vždy spouštěn jako první
  • Čistá, stabilní a funkční konfigurace

Ačkoliv účelem je VPN klient, který se napojuje na zařízení Mikrotik, postup by měl být funkční také pro Windows RRAS, WatchGuard, Draytek, UniFi, Zyxel případně jakýkoliv y L2TP/IPsec PSK server.

Instalace potřebných balíčků

#  Install required packages

sudo apt update 

sudo apt install strongswan strongswan-starter xl2tpd 

Konfigurace IPsec (strongSwan)

#  Configure IPsec (strongSwan)

sudo nano /etc/ipsec.conf

Do textového editoru vložte tyto údaje:

YOUR_VPN_SERVER_IP – Tento text nahraďte veřejnou IP adresou vašeho VPN serveru

config setup
    charondebug="ike 1, knl 1, cfg 0"

conn L2TP-VPN
    keyexchange=ikev1
    ike=aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=aes256-sha1,aes128-sha1,3des-sha1!
    type=transport
    authby=secret
    forceencaps=yes

    left=%defaultroute
    leftprotoport=17/1701
    right=YOUR_VPN_SERVER_IP
    rightprotoport=17/1701

    dpdaction=restart
    dpddelay=30s
    auto=add

IPsec předsdílený klíč (PSK)

#Create the IPsec PSK 

sudo nano /etc/ipsec.secrets

Do textového editoru vložte tyto údaje:

YOUR_VPN_SERVER_IP – Tento text nahraďte veřejnou IP adresou vašeho VPN serveru

YOUR_PSK – Tento text nahraďte předsdíleným klíčem

%any YOUR_VPN_SERVER_IP : PSK "YOUR_PSK"

Obsah souboru bude vypadat například takto:

%any 1.2.3.4 : PSK "8a9x6C2WBktR3PmNjmWW"

Nastavení L2TP (xl2tpd) – Client (LAC) Mode

# Configure L2TP (xl2tpd) – Client (LAC) Mode

sudo nano /etc/xl2tpd/xl2tpd.conf

Do textového editoru vložte tyto údaje:

YOUR_VPN_SERVER_IP – Tento text nahraďte veřejnou IP adresou vašeho VPN serveru

L2TP-VPN – název vašeho VPN rozhraní (identifikace). Tento údaj lze změnit, ale je potřeba následně dále v konfiguraci používat stejné označení

[global]
port = 1701

[lac L2TP-VPN]
lns = YOUR_VPN_SERVER_IP
pppoptfile = /etc/ppp/options.l2tpd.client
autodial = yes
redial = yes
redial timeout = 15
length bit = yes
ppp debug = yes

Konfigurace PPP (MS‑CHAPv2)

# Configure PPP (MS‑CHAPv2)

sudo nano /etc/xl2tpd/xl2tpd.confsudo nano /etc/ppp/options.l2tpd.client

Do textového editoru vložte tyto údaje:

YOUR_USERNAME – Tento text reprezentuje uživatelské jméno pro přihlášení k VPN. Nahraďte jej tedy uživatelským jménem. Pro správné fungování je potřeba toto jméno vyplnit  na řádku „name“ i „user“.

noauth

name YOUR_USERNAME
user YOUR_USERNAME

refuse-pap
refuse-chap
refuse-mschap
refuse-eap

mtu 1350
mru 1350

hide-password
persist
nodefaultroute
usepeerdns

lcp-echo-interval 20
lcp-echo-failure 5
debug
dump

Přidání hesla (CHAP)

Lze použít textový editor vyvolaný příkazem sudo nano, nebo jednorázově přidat údaje rovnou z příkazového řádku.

# Option 1 - edit file

sudo nano /etc/ppp/chap-secrets 

Do textového editoru vložte tyto údaje:

YOUR_USERNAME – Tento text reprezentuje uživatelské jméno pro přihlášení k VPN. Nahraďte jej tedy uživatelským jménem.

YOUR_PASSWORD – Tento text reprezentuje heslo pro přihlášení k VPN. 

"YOUR_USERNAME"    *    "YOUR_PASSWORD"    *

Případně varianta jednorázového přidání z příkazové řádky:

# Option 2 - Add credentials to CHAP secrets directly from command line

sudo bash -c 'cat > /etc/ppp/chap-secrets <<EOF
"YOUR_USERNAME"  *  "YOUR_PASSWORD"  *
EOF'
sudo chmod 600 /etc/ppp/chap-secrets

Nastavte oprávnění pro vytvořený soubor

# Set permissions for chap-secrets

sudo chmod 600 /etc/ppp/chap-secrets

První spuštění a test

# Restart services
sudo systemctl restart strongswan-starter
sudo systemctl restart xl2tpd

# Bring up IPsec:
sudo ipsec restart
sudo ipsec up L2TP-VPN

#Start the L2TP tunnel:
echo "c L2TP-VPN" | sudo tee /var/run/xl2tpd/l2tp-control

# Verify PPP interface:
ip addr show ppp0

Vytvoření routingu pro vybrané sítě

# Add split‑tunnel routes (only your selected subnets over VPN)

sudo nano /etc/ppp/ip-up.d/vpn-routes

Do textového editoru vložte tyto údaje:

Sítě 192.168.100.0/24 a 10.20.30.0/24 nahraďte subnety, dle potřeby

#!/bin/sh
ip route replace 192.168.100.0/24 dev ppp0
ip route replace 10.20.30.0/24 dev ppp0

Nastavte vytvořený soubor jako „spustitelný“

# Make executable

sudo chmod +x /etc/ppp/ip-up.d/vpn-routes

Automatické připojení VPN po startu operačního systému

# Auto‑start at boot (strongSwan + xl2tpd)

sudo systemctl enable strongswan-starter
sudo systemctl enable xl2tpd

Je potřeba zajistit, aby xl2tph startoval až po té, co je nastartována služba pro IPsec

# Ensure xl2tpd starts after IPsec

sudo mkdir -p /etc/systemd/system/xl2tpd.service.d
sudo nano /etc/systemd/system/xl2tpd.service.d/override.conf

Do textového editoru vložte tyto údaje:

[Unit]
After=strongswan-starter.service
Wants=strongswan-starter.service

Dále je potřeba systémovou službu znovu načíst

# Reload

sudo systemctl daemon-reload

Volitelně: hlídání, že je VPN připojena (Keepalive Watchdog)

# Optional but Recommended: Keepalive Watchdog, Create file:

sudo nano /usr/local/bin/vpn-keepalive.sh

Do textového editoru vložte tyto údaje:

L2TP-VPN – název vašeho VPN rozhraní (identifikace). Tento údaj lze změnit, ale je potřeba následně dále v konfiguraci používat stejné označení

#!/bin/bash

# Restart IPsec if lost
if ! ipsec status | grep -q "ESTABLISHED"; then
    ipsec restart
    sleep 4
fi

# Reconnect L2TP if ppp0 not active
if ! ip link show ppp0 >/dev/null 2>&1; then
    echo "c L2TP-VPN" > /var/run/xl2tpd/l2tp-control
fi

Nastavte vytvořený soubor jako „spustitelný“

# Make executable

sudo chmod +x /usr/local/bin/vpn-keepalive.sh
# Systemd service

sudo nano /etc/systemd/system/vpn-keepalive.service

Do textového editoru vložte tyto údaje:

[Unit]
Description=L2TP/IPsec VPN Keepalive
After=network-online.target strongswan-starter.service xl2tpd.service
Wants=network-online.target

[Service]
ExecStart=/bin/bash -c "while true; do /usr/local/bin/vpn-keepalive.sh; sleep 20; done"
Restart=always

[Install]
WantedBy=multi-user.target
# Enable service

sudo systemctl daemon-reload
sudo systemctl enable --now vpn-keepalive

Ověření stavu VPN

# Check IPsec
sudo ipsec statusall

# Check L2TP/PPP
ip addr show ppp0

# Check routes
ip r

Další užitečné příkazy

# Restart VPN 
sudo systemctl restart strongswan-starter xl2tpd 
sudo ipsec restart && sudo ipsec up L2TP-VPN-MASTERDC 

echo "c L2TP-VPN" | sudo tee /var/run/xl2tpd/l2tp-control 

# Stav xl2tpd
sudo journalctl -fu xl2tpd

# IP adresa VPN rozhraní 
ip addr show ppp0 

# zobrazení routovací tabulky 
ip route show 
route -n 
ip route show table all 

Nastavení na straně Mikrotik

Napsat komentář