IPSec IKEv2 VPN-сервер на Ubuntu

Быстрая настройка VPN-сервера на Ubuntu. Сейчас много облачных платформ, которые предоставляют VPS по смешным ценам, и порой проще создать свой VPN-сервер, нежели покупать аккаунт VPN у сторонних сервисов, тем более что по цене они сопоставимы. Цены начинаются от $1,5 , так что, вариант выбора своего собственного VPN-сервера, судя по цене — лучшее решение.

 

Подразумеваем что у вас есть чистый сервер ubuntu 20.04, и есть домен указываюший на этот сервер. Я рассматриваю именно чистый сервер, у кого там уже что-то крутиться, тот вероятнее всего, сам разберётся что нужно поменять, опустить или добавить.

 

 

 

Первым делом установим необходимые пакеты:

 

apt install socat strongswan-starter libcharon-extra-plugins libstrongswan-extra-plugins libcharon-standard-plugins strongswan strongswan-pki iptables-persistent 
curl https://get.acme.sh | sh -s email=ваш_адрес

Далее, выберем подсеть адресов для клиентов VPN, пусть будет 192.168.134.0/24, а имя интерфейса смотрящего наружу — eth0

 

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

iptables -t nat -A POSTROUTING -s 192.168.134.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.134.0/24 -o eth0 -j MASQUERADE
iptables -t mangle -A FORWARD --match policy --pol ipsec --dir in -s 192.168.134.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
netfilter-persistent save

 

Получаем сертификат для домена vpm.domain.com (у вас должен быть реальный домен направленный на ваш сервер)

~/.acme.sh/acme.sh --issue --standalone -d vpn.domain.com --key-file /etc/ipsec.d/private/privkey.pem --ca-file /etc/ipsec.d/cacerts/chain.pem --cert-file /etc/ipsec.d/certs/cert.pem --fullchain-file /etc/ipsec.d/certs/fullchain.pem --post-hook "find /etc/ipsec.d/ -name '*.pem' -type f -exec chmod 600 {} \;" --renew-hook "find /etc/ipsec.d/ -name '*.pem' -type f -exec chmod 600 {} \; -exec /usr/bin/systemctl restart ipsec \;"

 

Редактируем файл /etc/ipsec.conf , приводим к виду:


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

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@vpn.domain.com
    leftcert=cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=192.168.134.0/24
    rightdns=8.8.4.4,1.1.1.1
    rightsendcert=never
    eap_identity=%identity

 

Редактируем файл /etc/ipsec.secrets, приводим к виду:

: RSA "privkey.pem"
user : EAP "PassworD"

 

Далее:

systemctl enable ipsec
systemctl enable netfilter-persistent
ipsec restart
ipsec statusall

 

Правим /etc/sysctl.conf , добавляем или расскоменнтируем:

net.ipv4.ip_forward=1
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.ip_no_pmtu_disc=1

 

И выполняем:

sysctl -p

 

Теперь всё готово к подключению. Можете пользоваться. Удобно и с iOS и с Android, и с любых настольных систем.

Выбираем подключение IPSec ikev2 MSCHAP2. в качестве сервера вводим имя, remote auth — то же имя , далее, имя и пароль из файла /etc/ipsec.secrets , то есть user:PassworD , и нажимаем «подключится».

После подключения в браузере можете проверить свой ip-адрес, он должен быть адресом вашего VPS.

Не забудьте везде в коде поменять vpn.domain.com на свой домен.

 

iPhone
Android

И еще, вот здесь bootstrap файл, который можно добавить в user-data на digitalocean при старте дроплета, и всё настроиться автоматом. Или его можно запустить непосредственно уже на сервере. Не забудьте отредактировать домен и email-адрес в этом файле перед использованием.

Ну вот и всё.
Удачи в настройках.
© shadow_alone