Настройка VPN сервера IKEv2 на Ubuntu 16.04 LTS + iPhone
Сегодня покажу как на VPS сервере с Ubuntu 16.04 настроить VPN сервер с протоколом IKEv2 и подключим к нему IPhone через заранее созданный конфигурационный файл. Подготовка
sudo echo "deb http://ftp.debian.org/debian wheezy-backports main" > /etc/apt/sources.list.d/wheezy-backports.list sudo gpg --keyserver pgpkeys.mit.edu --recv-key 8B48AD6246925553 sudo gpg -a --export 8B48AD6246925553 | sudo apt-key add - sudo gpg --keyserver pgpkeys.mit.edu --recv-key 7638D0442B90D010 sudo gpg -a --export 7638D0442B90D010 | sudo apt-key add -
sudo apt-get -y update && sudo apt-get upgrade -y
Шаг 1: Установка Strongswan Package
sudo apt-get -y install strongswan strongswan-plugin-openssl strongswan-plugin-eap-mschapv2
Шаг 2: Редактируем strongswan.conf
Для быстрой очистки файла делаем
echo "" > /etc/strongswan.conf
И вставляем следующий текст
charon { load_modular = yes dns1 = 8.8.8.8 dns2 = 8.8.4.4 plugins { include strongswan.d/charon/*.conf } } include strongswan.d/*.conf
Вы можете заменить Google DNS на любые другие.
Шаг 3: Редактируем ipsec.conf
Чистим файл аналогичным способом
echo "" > /etc/ipsec.conf
Копируем следующие настройки.
config setup strictcrlpolicy=no uniqueids = no conn %default mobike=yes dpdaction=clear dpddelay=35s dpdtimeout=200s fragmentation=yes conn iOS-IKEV2 auto=add keyexchange=ikev2 eap_identity=%any left=%any leftsubnet=0.0.0.0/0 rightsubnet=10.99.1.0/24 leftauth=psk leftid=%any right=%any rightsourceip=10.99.1.0/24 rightauth=eap-mschapv2 rightid=%any
Шаг 4: Редактируем ipsec.secrets (логины и пароли пользователей)
Чистим файл
sudo echo "" > /etc/ipsec.secrets
Вставляем
include /var/lib/strongswan/ipsec.secrets.inc # logins : PSK "SEXapPAm5x5OXktAzes9nxE3NvilpmIH1orpE2cIzgfWRZgQDYZ1Wm3thlfXXwn" myusername : EAP "hSyeI1H8Wsybb5qDk5abBrJ7LCu3bPbJrax9aFG77FiiJZu3eUepLwvg9pjjEL3"
PSK — вводите любую последовательность символов. Можно сгенерировать тут:
http://darkvoice.dyndns.org/wlankeygen/
myusername — логин и дальше в кавычках идет пароль.
Шаг 5: Правила iptables
Нужно узнать основной сетевой интерефейс. Обычно это eth0, но лучше проверить
ifconfig
ens3 Link encap:Ethernet HWaddr 52:54:00:c2:c2:ad inet addr:194.67.209.155 Bcast:194.67.223.255 Mask:255.255.240.0 inet6 addr: fe80::5054:ff:fec2:c2ad/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5483341 errors:0 dropped:0 overruns:0 frame:0 TX packets:5128498 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1830663175 (1.8 GB) TX bytes:2754986719 (2.7 GB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:94940 errors:0 dropped:0 overruns:0 frame:0 TX packets:94940 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:12680067 (12.6 MB) TX bytes:12680067 (12.6 MB)
Как видим интерфейс у нас ens3.
Теперь подставляя нужный интерфейс вводим следующее
sudo iptables -t nat -A POSTROUTING -s 10.99.1.0/24 -o ens3 -j MASQUERADE sudo iptables -A FORWARD -s 10.99.1.0/24 -j ACCEPT sudo iptables -A INPUT -p udp --dport 500 -j ACCEPT sudo iptables -A INPUT -p udp --dport 4500 -j ACCEPT
Теперь нужно включить IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
И чтобы не делать это после каждой перезагрузки, добавьте следующую строку в файл /etc/sysctl.conf
net.ipv4.ip_forward=1
Затем перезагрузить его введя
sudo sysctl -p
И перезагружаем ipsec
ipsec restart
Шаг 6: Создать файл конфигурации для телефона
Создаем файл с именем myusername.mobileconfig и загружаем его на сервер в публичный доступ. Затем заходим с телефона по адресу и скачиваем файл — iPhone предложит установить конфигурацию.
Где написано @@Заменить …@@ заменяем целиком с @@.
uuidgen — запускаем в консоли в linux
# uuidgen 346c8e7e-68d3-4518-a28d-96cc9084f4ad
Вывод команды пишем в файл. В каждую строку — разное значение.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PayloadContent</key> <array> <dict> <key>IKEv2</key> <dict> <key>AuthName</key> <string>@@Заменить именем пользователя из /etc/ipsec.secrets@@</string> <key>AuthPassword</key> <string>@@Заменить паролем из /etc/ipsec.secrets@@</string> <key>AuthenticationMethod</key> <string>SharedSecret</string> <key>ChildSecurityAssociationParameters</key> <dict> <key>DiffieHellmanGroup</key> <integer>2</integer> <key>EncryptionAlgorithm</key> <string>AES-128</string> <key>IntegrityAlgorithm</key> <string>SHA1-96</string> <key>LifeTimeInMinutes</key> <integer>1440</integer> </dict> <key>DeadPeerDetectionRate</key> <string>Medium</string> <key>DisableMOBIKE</key> <integer>0</integer> <key>DisableRedirect</key> <integer>0</integer> <key>EnableCertificateRevocationCheck</key> <integer>0</integer> <key>EnablePFS</key> <integer>0</integer> <key>ExtendedAuthEnabled</key> <true/> <key>IKESecurityAssociationParameters</key> <dict> <key>DiffieHellmanGroup</key> <integer>2</integer> <key>EncryptionAlgorithm</key> <string>AES-128</string> <key>IntegrityAlgorithm</key> <string>SHA1-96</string> <key>LifeTimeInMinutes</key> <integer>1440</integer> </dict> <key>LocalIdentifier</key> <string>myserver.com.client</string> <key>RemoteAddress</key> <string>@@Заменить IP адресом сервера или доменом@@</string> <key>RemoteIdentifier</key> <string>myserver.com.server</string> <key>SharedSecret</key> <string>@@Заменить своим PSK из /etc/ipsec.secrets@@</string> <key>UseConfigurationAttributeInternalIPSubnet</key> <integer>0</integer> </dict> <key>IPv4</key> <dict> <key>OverridePrimary</key> <integer>1</integer> </dict> <key>PayloadDescription</key> <string>Configures VPN settings for iphone</string> <key>PayloadDisplayName</key> <string>TutorialVPN</string> <key>PayloadIdentifier</key> <string>com.apple.vpn.managed.@@Заменить выводом uuidgen@@</string> <key>PayloadType</key> <string>com.apple.vpn.managed</string> <key>PayloadUUID</key> <string>@@Заменить выводом uuidgen@@</string> <key>PayloadVersion</key> <real>1</real> <key>Proxies</key> <dict> <key>HTTPEnable</key> <integer>0</integer> <key>HTTPSEnable</key> <integer>0</integer> <key>ProxyAutoConfigEnable</key> <integer>0</integer> <key>ProxyAutoDiscoveryEnable</key> <integer>0</integer> </dict> <key>UserDefinedName</key> <string>@@My VPN Connection Name@@</string> <key>VPNType</key> <string>IKEv2</string> <key>VendorConfig</key> <dict/> </dict> </array> <key>PayloadDisplayName</key> <string>IKEv2</string> <key>PayloadIdentifier</key> <string>@@Заменить выводом uuidgen@@</string> <key>PayloadRemovalDisallowed</key> <false/> <key>PayloadType</key> <string>Configuration</string> <key>PayloadUUID</key> <string>@@Заменить выводом uuidgen@@</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist>
Шаг 7: Настраиваем IPhone
После того как в браузере ввели адрес файла с конфигом — устанавливаем конфигурацию. Ничего сложного нет, ниже скриншоты.
После установки заходим в Настройки и включаем VPN. Если что-то пошло не так, смотрите логи и разбираетесь, либо пишите в комментариях — я помогу.
Логи подключений пишутся в /var/log/syslog
Загруженные плагины можно посмотреть командой
ipsec listplugins
Юрок
05.06.2017Я начинающий линуксойд, но уже могу с нуля многое поднять. Не так давно заинтересовался VPN и никак не могу понять. VPN можно поставить на чистую (к примеру) Ubuntu или нужно чтоб на ней был шлюз и внешний IP у меня динамический, он должен обязательно быть статичесиким…?
nlinberg
21.08.2017Для VPN важно, чтобы к нему могли подключится Ваши клиенты. Если клиенты это телефоны с подключением по 3G\LTE, то нужен белый IP (статический или динамический — тут зависит от реализации, можно dyndns задействовать к примеру). А если клиенты это устройства, подключаемые по локальной сети через wi-fi, то тут уже не важен IP белый или NAT.
Все зависит от ваших целей, а дальше смотрите какие варианты достижения ваших целей существуют.
Дмитрий
29.01.2018Не подскажете, а такое подключение подойдет для iphone 4 с iOS 7.1.2 ?
Или это только на более поздних айфонах возможно?
nlinberg
29.01.2018Скорее всего возможно. Нужно пробовать
Павел
20.04.2018Подскажите, в чем может быть причина, пожалуйста:
сервер успешно создался, подключение к нему проходит, все хорошо. Но в созданной vpn интернета нет. С утройства, подключенного к нему, ничего не открывается, а пингуется только сам vpn сервер, по внешнему ip.
Виктор
20.04.2018Подскажите, как настроить данное соединение в windows?
xakup_elliot
20.04.2018Спасибо за мануал! Всё работает.
Vladimir
29.04.2018С уcтройства, подключенного к VPN нет выхода в интернет.
Бобёр
05.06.2018Спасибо, все работает, только поправь плз в конфиге что надо указывать не сам пароль, а его хеш. Так будет понятнее.
Удачи!
Os_gs
18.06.2018Добрый день! Вы можете настроить авторизацию по сертификатам и по ipsec в чистом ввиде. Нужно чтоб работало на iPhone. Готов оплатить ваш труд.
Maks
01.10.2018Подскажите по следующему вопросу:
Собрал все строго по инструкции, все работает.
Добавил учетные данные для второго устройства, как только подключаюсь с планшета — телефон теряет связь с инетом, но VPN поднят.
В логах ошибка :
12[IKE] no virtual IP found for %any6 requested by
Как правильно настроить по данной инструкции для двух устройств?
nlinberg
02.10.2018Если быть честным, у меня тоже были проблемы с добавлением второго устройства. Я разбираться не стал, а просто открыл тот же файл и на втором телефоне.