Настройка Debian как клиент IPsec_L2TP
Для данного сценария настройки использовали статью https://www.umgum.com/debian-linux-l2tp-ipsec
1. Ставим пакет strongswan.
apt-get install strongswan
2. Приводим /etc/ipsec.conf к виду:
ipsec.conf - strongSwan IPsec configuration file
# basic configuration
config setup
# strictcrlpolicy=yes
# uniqueids = no
# Add connections here.
# Default options for encryption of connections
conn %default
ikelifetime = 60m
keylife = 20m
rekeymargin = 3m
keyingtries = 1
keyexchange = ikev1
authby = secret
ike = aes128-sha1-modp2048!
esp = aes128-sha1-modp2048!
# Encryption of traffic to the "l2tp.example.net"
conn xrays.uniito.ru
# Automatic start of encryption at system startup
auto = start
# Restarting encryption if negotiation fails
dpdaction = restart
# Restart encryption on unexpected close
closeaction = restart
# Reconnect unlimited number of times
keyingtries = %forever
keyexchange = ikev1
pfs = no
authby = secret
type = transport
left = %defaultroute
leftprotoport = 17/1701
right = 195.189.108.50
rightprotoport = 17/1701
include /var/lib/strongswan/ipsec.conf.inc
правим адрес сервера (195.189.108.50), если у вас другой...
3. Секретный ключ шифрования PSK ("Pre-Shared Key") пишем в файл /etc/ipsec.secrets
include /var/lib/strongswan/ipsec.secrets.inc
%any 195.189.108.50 : PSK "<ключ >= 20 символов>"
4. Защищаем файл с паролями от доступа посторонних:
# chown root /etc/ipsec.secrets
# chmod 600 /etc/ipsec.secrets
5. Перезапускаем strongswan:
# systemctl restart strongswan
# systemctl status strongswan
6. Просматриваем статус IPsec-соединений:
# ipsec statusall
# ipsec status
7.Должны получить примерно такое:
Security Associations (1 up, 0 connecting):
ipsec-gate.example.net[1]: ESTABLISHED 43 seconds ago, 10.20.30.45...100.200.250.21
ipsec-gate.example.net{1}: INSTALLED, TRANSPORT, reqid 1, ESP in UDP SPIs: c57b51bb_i 04fa2652_o
ipsec-gate.example.net{1}: 10.20.30.45/32[udp/l2f] === 100.200.250.21/32[udp/l2f]
8. Далее ставим lx2tpd
apt-get install xl2tpd
9. Правим файл конфигурации /etc/xl2tpd/xl2tpd.conf
[lac myvpn]
lns = 195.189.108.50
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd.client
length bit = yes
autodial = yes
redial = yes
redial timeout = 30
тут правим, если надо, адрес сервера.
10. Еще создаем файлик /etc/ppp/options.lx2tpd.client
ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-mschap-v2
noccp
noauth
mtu 1280
mru 1280
noipdefault
nodefaultroute
usepeerdns
connect-delay 5000
name "<login>"
password "<passwd>"
подставляем логин и пароль вконце файла.
11. Защищаем файл с паролем от доступа посторонних:
# chmod 600 /etc/ppp/options.lx2tpd.client
12. Перезапуск xl2tpd
# systemctl restart xl2tpd
# systemctl status xl2tpd
13. Должен появиться интерфейс ppp0 (или ppp1) в выводе команды ifconfig или ip a
ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1280
inet 192.168.1.213 netmask 255.255.255.255 destination 192.168.1.111
ppp txqueuelen 3 (Point-to-Point Protocol)
RX packets 163 bytes 23174 (22.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 126 bytes 21277 (20.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
адрес назначен сервером! Это адрес нашей машины в VPN!
14. Теперь осталось добавить маршрут в сеть 192.168.1.0
ip route add 192.168.1.0/24 via 192.168.1.213 dev ppp0
если уже есть какой-то маршрут через ppp0, удаляем его.
ip route del 192.168.1.111 via 0.0.0.0 dev ppp0
15. Смотрим таблицу маршрутизации. Должно быть, примерно, так:
netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.9.1 0.0.0.0 UG 0 0 0 enp1s0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-0e4943120a0b
192.168.1.0 192.168.1.213 255.255.255.0 UG 0 0 0 ppp0
192.168.9.0 0.0.0.0 255.255.255.0 U 0 0 0 enp1s0
16. Теперь можно зайти на нашу машину по ssh из сети 192.168.1.0
17. Автоматизируем шаги по подъему/выключению/наблюдению за VPN с помощью скриптов:
svpn.sh - подключение к VPN
systemctl restart strongswan.service
ipsec status
systemctl restart xl2tpd.service
sleep 3
echo "c myvpn" > /var/run/xl2tpd/l2tp-control
sleep 5
ip route add 192.168.1.0/24 via 192.168.1.213 dev ppp0
ifconfig ppp0
netstat -rn
dvpn.sh - отключение от VPN
systemctl stop xl2tpd.service
ipsec down xrays.uniito.ru
ifconfig ppp0
netstat -rn
vloop.sh - скрипт следящий за VPN, при обнаружении, что отключено стартует VPN-клиента.
#!/usr/bin/env bash
while true
do
if ping -c1 -W1 -q 192.168.1.1 > /dev/null 2>&1 ; then
echo VPN Up
else
echo VPN Down
# Stop services
systemctl stop xl2tpd.service
ipsec down xrays.uniito.ru > /dev/null 2>&1
echo Restart services
systemctl restart strongswan.service
systemctl restart xl2tpd.service
sleep 3
echo "c myvpn" > /var/run/xl2tpd/l2tp-control
sss=`ifconfig | grep "ppp[0-9]" | cut -d':' -f 1`
ip route del 192.168.1.111 via 0.0.0.0 dev $sss
fi
echo "Press [CTRL+C] to exit this loop..."
# Add more instructions here
sleep 600
done
18.