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 на свой домен.
И еще, вот здесь bootstrap файл, который можно добавить в user-data на digitalocean при старте дроплета, и всё настроиться автоматом. Или его можно запустить непосредственно уже на сервере. Не забудьте отредактировать домен и email-адрес в этом файле перед использованием.
Ну вот и всё.
Удачи в настройках.
© shadow_alone