Table of Contents

Задача

Настроить L2TP IPSec VPN сервер для подключения Windows-клиентов.

Решение

Решение по мотивам https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-18-04-2

Ставим софт

sudo apt-get update && sudo apt-get upgrade

sudo apt-get install strongswan certbot libcharon-extra-plugins

Настраиваем firewall

sudo ufw allow OpenSSH
sudo ufw allow http
sudo ufw allow https
sudo ufw allow 500,4500/udp

sudo ufw enable

Получаем сертификат

sudo certbot certonly --rsa-key-size 4096 --standalone --agree-tos --no-eff-email --email mikhail@xc360.ru -d testprivate.xc360.ru

копируем его в конфигурацию ipsec

sudo cp /etc/letsencrypt/live/testprivate.xc360.ru/fullchain.pem /etc/ipsec.d/certs/
sudo cp /etc/letsencrypt/live/testprivate.xc360.ru/privkey.pem /etc/ipsec.d/private/
sudo cp /etc/letsencrypt/live/testprivate.xc360.ru/chain.pem /etc/ipsec.d/cacerts/

Конфигурация сервера IPSec

sudo mv /etc/ipsec.conf{,.original}

/etc/ipsec.conf

https://wiki.strongswan.org/projects/strongswan/wiki/Win7EapMultipleConfig

#global configuration IPsec
#chron logger
config setup
#    charondebug="ike 1, knl 1, cfg 0"
#    uniqueids=no
     plutostart=no

conn %default
    keyexchange=ikev2
    ike=aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes256-aes128-sha256-sha1-modp2048-modp4096-modp1024,aes256-sha1-modp1024,a$
    esp=aes128-aes256-sha1-sha256-modp2048-modp4096-modp1024,aes128-sha1,aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2$
    dpdaction=clear
    dpddelay=300s
    rekey=no

conn win7
    left=%any
    leftsubnet=0.0.0.0/0
    leftauth=pubkey
    leftcert=fullchain.pem
    leftid=@testprivate.xc360.ru
    right=%any
    rightsourceip=10.10.10.0/24
    rightauth=eap-mschapv2
    #rightsendcert=never   # see note
    eap_identity=%identity
    auto=add

Прописываем пользователей - /etc/ipsec.secrets

RSA “privkey.pem”

user : EAP “test”

Выдаем клиентам DNS и WINS серверы

/etc/strongswan.d/client-dns.conf

charon {
  dns1 = 4.2.2.4
  dns2 = 8.8.8.8
}

/etc/strongswan.d/client-wins.conf

charon {
  nbns1 = 10.10.1.1
  nbns2 = 10.10.0.1
}

Контролируем работу

sudo tail -f /var/log/syslog

Проблемы

подключение только со второй попытки

https://wiki.strongswan.org/issues/1183
Если при первой попытке подключения Windows-клиент сообщает, что неверный пароль, но успешно подключается с тем же паролем со второй попытки, а в логах сервера есть такое:

user charon: 11[ENC] parsed IKE_AUTH request 2 [ EAP/RES/MSCHAPV2 ]
user charon: 11[IKE] EAP-MS-CHAPv2 username: '%any'
user charon: 11[IKE] no EAP key found for hosts '%any' - '%any'
user charon: 11[IKE] EAP-MS-CHAPv2 verification failed, retry (1)

значит нужно установить libcharon-extra-plugins, а в конфигурации /etc/ipsec.conf должно быть прописано:

eap_identity=%identity

Не подключается

В логах сервера такое:

user charon: 07[IKE] received proposals inacceptable

Это значит, что сервер и клиент не могут договориться о применяемых алгоритмах шифрования. Нужно смотреть на строки:

ike=...
esp=...

в них прописаны разрешенные алгоритмы шифрования