Задача
Настроить 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=...
в них прописаны разрешенные алгоритмы шифрования
Discussion