OpenVPN & IOS

Было написано уже много статей на данную тему, но я опишу более удобный способ для меня.

И так у нас есть чистый сервер(VPS) с CentOS 7 на борту, и мы преступаем.

подключаем репозиторий epel и обновляемся.

yum install epel-release
yum update

ставим OpenVPN

yum install openvpn easy-rsa -y

переходим в папку OpenVPN и создаем конфигурационный файл нашего ВПН сервера.

cd /etc/openvpn
touch server.conf

содержимое server.conf
не забываем изменить порт и директиву local, я на впн серверах всегда использую 443 порт, но он может быть занят Web сервером.

user openvpn
group openvpn
local ваш_внешний_IP
port 443
proto udp
dev tun
cipher AES-128-CBC
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
server 10.10.200.0 255.255.255.0
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
ifconfig-pool-persist ipp.txt
push "redirect-gateway"
keepalive 10 900
persist-key
persist-tun
comp-lzo

переходим к генерации ключей.
копируем easy-rsa в удобное для нас место.

cp -R /usr/share/easy-rsa/2.0 /etc/openvpn/easy-rsa
cd easy-rsa

в начале нам нужно подправить содержимое файла vars
в самом низу ищем и меняем.

export KEY_COUNTRY="FR"
export KEY_PROVINCE="FR"
export KEY_CITY="Paris"
export KEY_ORG="NOVA.WS"
export KEY_EMAIL="[email protected]"
export KEY_OU="NOVA.WS"
export KEY_NAME="server"

сохраняем, выходим.
переходим к генерации сертификатов сервера.

./clean-all
./build-ca
./build-key-server server
./build-dh

Создаем ключ TLS-auth

openvpn --genkey --secret ta.key

и не забываем переместить его в папку /etc/openvpn/easy-rsa/keys/

Генерируем сертификат для клиента.

./build-key-pkcs12 client1

Сертификаты готовы перейдем к финальной части настройки сервера.
правим sysctl и добавляем правило для форвардинга.

net.ipv4.ip_forward = 1

применяем его без перезагрузки.

echo 1 > /proc/sys/net/ipv4/ip_forward

Добавляем наше правило для NAT и сохраняем.

iptables -t nat -A POSTROUTING -s 10.10.200.0/24 -o eth0 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables

не забываем добавить наш OpenVPN сервер в автозагрузку и запустить.

systemctl enable [email protected]
service [email protected] start

Теперь переходим к нашему клиенту, я обычно создаю на сервере клиентский конфиг затем его просто выкачиваю с помощью WinSCP, вы можете создать его сразу на виндовой машине.
содержимое client.ovpn

dev tun
client
proto udp
remote IP_вашего_сервера 443
nobind
persist-key
persist-tun
key-direction 1
cipher AES-128-CBC
resolv-retry infinite
redirect-gateway def1
block-outside-dns
comp-lzo

<tls-auth> 
-----BEGIN OpenVPN Static key V1-----

-----END OpenVPN Static key V1-----
</tls-auth>

<ca>
-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----
</ca>

<key>
-----BEGIN PRIVATE KEY-----

-----END PRIVATE KEY-----
</key>

<cert>
-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----
</cert>

Теперь опишу чуть подробней где взять содержимое для файла clients.ovpn а именно tls-auth,ca,key,cert

Содержимое для — мы берем из файла /etc/openvpn/easy-rsa/keys/ta.key
Содержимое для ca — мы берем из файла /etc/openvpn/easy-rsa/keys/ca.crt
Содержимое для key и cert мы получаем из нашего PKS12 файла который мы генерировали для клиента, client1.p12
Содержимое можно посмотреть командой

openssl pkcs12 -in client1.p12 -nodes

или можно просто скопировать из файлов
/etc/openvpn/easy-rsa/keys/client1.key и /etc/openvpn/easy-rsa/keys/client1.crt (тут то что нам нужно в самом низу файла или так cat client1.crt | sed -ne ‘/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p’ )

Теперь на выходе у нас есть единственный файл, client.ovpn который мы можем послать себе по почте и открыть на любом IOS устройстве с помощью OpenVPN ну или загрузить через Itunes.

Всем спасибо, я закончил.