Категория > Новости > Сильный лебедь. Делаем VPN на strongSwan и автоматизируем подключение в iOS - «Новости»
Сильный лебедь. Делаем VPN на strongSwan и автоматизируем подключение в iOS - «Новости»25-12-2021, 00:00. Автор: Audley |
мануала по его настройке, предполагая, что у тебя установлена Ubuntu 20.04. Если у тебя другой Linux, команды могут отличаться, но принцип и конфиги будут по большей части те же. Первый шаг стандартный для установки чего угодно:
sudo apt update
Теперь ставим нужные пакеты: libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins libtss2-tcti-tabrmd-dev Когда все скачается, перейдем к настройке. Генерируем сертификатыСоздаем каталоги для сертификатов и ключей:
mkdir -p~/pki/{cacerts,certs,private}
Убираем у этой папки лишние права — для надежности:
chmod 700 ~/pki
Генерируем корневой ключ RSA:
pki --gen --type rsa --size4096 --outform pem >~/pki/private/ca-key.pem
И корневой сертификат: --dn "CN=VPN root CA" --outform pem ~/pki/cacerts/ca-cert.pem Число 3650 — это десять лет (в днях), которые будет работать сертификат. Можешь изменить это значение на свое усмотрение. Корневые сертификаты готовы, теперь нам нужен сертификат для нашего сервера. Делаем приватный ключ:
pki --gen --type rsa --size4096 --outform pem >~/pki/private/server-key.pem
И сам сертификат. Обрати внимание, что IP в трех местах нужно изменить на IP твоего сервака. --cacert~/pki/cacerts/ca-cert.pem --cakey~/pki/private/ca-key.pem --dn "CN=NNN.NNN.NNN.NNN" --san@NNN.NNN.NNN.NNN --sanNNN.NNN.NNN.NNN --flagserverAuth --flagikeIntermediate --outform pem ~/pki/certs/server-cert.pem С этим закончили, можем перемещать ключи и сертификаты из домашнего каталога в папку настроек strongSwan:
sudo cp -r~/pki/*/etc/ipsec.d/
Настраиваем strongSwanНа всякий случай переименуем старый файл с настройками, если он есть:
sudo mv/etc/ipsec.conf{,.original}
Откроем его
sudo nano /etc/ipsec.conf
Добавляем раздел
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
Дальше добавляем настройки туннеля IKEv2 (не забудь подставить свой IP):
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
dpdaction=clear
dpddelay=300s
rekey=no
left=%any
leftid=NNN.NNN.NNN.NNN
leftcert=server-cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
right=%any
rightid=%any
rightauth=eap-mschapv2
rightsourceip=10.10.10.0/24
rightdns=8.8.8.8,8.8.4.4
rightsendcert=never
eap_identity=%identity
ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
Здесь забиты адреса гугловского DNS ( Сохраняем конфиг и выходим из nano (Ctrl-X, Y, Enter). Сервер VPN мы настроили, осталось создать креды, с которыми клиент сможет авторизоваться. За них отвечает файл
sudo nano /etc/ipsec.secrets
Добавляем в него строчку
:RSA "server-key.pem"
Двоеточие и пробел после него важны, не убирай их! Дальше задаем логин и пароль пользователя. Замени их своей комбинацией. Хороший стойкий пароль можешь создать в парольном менеджере.
логин :EAP "пароль"
Сохраняй файл, и перезапустим strongSwan, чтобы он прочитал новые конфиги:
sudo systemctl restart strongswan-starter
Настраиваем сетьНаш VPN уже работает и готов принимать соединения, но сетевой трафик до него пока не доходит. Нужно настроить файрвол и IP-форвардинг. Разрешаем пропускать трафик OpenSSH, а также UDP на портах 500 и 4500:
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw allow 500,4500/udp
Осталось сделать так, чтобы входящие пакеты IPSec обрабатывались нашей службой. Узнаем адрес нашего сетевого интерфейса:
ip route show default
Посмотри, что будет написано после слова Открываем файл с настройками правил файрвола:
sudo nano /etc/ufw/before.rules
В самом начале файла, до секции
*nat
-A POSTROUTING -s 10.10.10.0/24 -o ИНТЕРФЕЙС -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o ИНТЕРФЕЙС -j MASQUERADE
COMMIT
*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o ИНТЕРФЕЙС -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT
*filter
...
А в конце
-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT
Закрываем, сохраняем. Теперь открываем файл с настройками службы файрвола:
sudo nano /etc/ufw/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
Выключаем и включаем файрвол для применения настроек:
sudo ufw disable
sudo ufw enable
Если система запросит подтверждение, жми Y. Настраиваем подключениеНам нужно забрать с сервера свой сертификат, с которым мы будем подключаться. Он лежит в файле по такому пути:
/etc/ipsec.d/cacerts/ca-cert.pem
Можешь вывести его командой Для подключения к VPN тебе понадобятся три вещи: IP твоего сервера, файл с сертификатом и пара из логина и пароля, которые ты задал в файле Настройки в разных ОС выполняются немного по‑разному. В macOS тебе нужно:
В Windows процесс немного другой:
На iOS установка схожа с тем, что мы делали на macOS. Но поскольку я обещал продемонстрировать возможность автоматически включать и выключать VPN, мы вместо этого создадим файл с профилем, который заодно будет содержать и все настройки. На Android, увы, strongSwan не поддерживается на уровне ОС, поэтому тебе придется скачать клиентское приложение и настроить его. Впрочем, эта статья ориентирована на пользователей iOS, так что я не предполагаю, что речь о твоем основном телефоне. Куем профиль для iOSА теперь самая важная часть нашего приключения, ради которой все и затевалось. Мы создадим кастомный профиль для iOS, где пропишем, при каких условиях устройство должно подключаться к VPN. Не волнуйся — полностью полагаться на автоматизацию необязательно, и при желании ты сможешь деактивировать такое поведение в настройках, чтобы включать и выключать VPN вручную. Перейти обратно к новости |