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