» » » OpenVPN for Android

OpenVPN for Android

Подключиться на рабочую машину с телефона бывает достаточно проблематично, т.к. ОПСС не предоставляют белых IP адресов (по крайней мере за просто так), а на рабочей машине как правило настроены фаерволы, да и политикой может быть не разрешено установка всяких teamviewer'ов. В общем встал вопрос - как с телефона подцепиться к рабочей машине, по возможности максимально безопасно. Ответ нашёлся довольно быстро - OpenVPN.
Мы часто используем в работе OpenVPN, например для того чтобы соединить два удалённых офиса (об этом я тоже как нить напишу как будет время). И теперь для подключения с телефона на робочее место. И так. Что мы имеем. 
Дома у меня стоит роутер с белым ИП, с которого пробрасываются порты на комп, а комп уже пробрасывает порты на виртуальные машины, но для простоты я буду предполагать что белый ИП у меня на домашнем компе уже стоит. 
Рабочая машина так же у меня с белым ИП.
Для начала нам понадобиться установить OpenVPN, для этого подключаем репозиторий epel 

yum -y install epel-release

и собственно установить openvpn, архиваторы и wget если это всё не установленно. для удобства напишу отдельными командами

yum -y install openvpn 
yum -y install unzip zip
yum -y install wget

создадим директорию для ключей  

mkdir /etc/openvpn/keys

скачиваем и ставим easy-rsa

cd /etc/openvpn/keys
wget https://github.com/OpenVPN/easy-rsa/archive/master.zip

распаковываем

unzip master.zip
cd /etc/openvpn/keys/easy-rsa-master/easyrsa3

создадим структуру публичных ключей

mv vars.example vars
./easyrsa init-pki

создадим удостоверяющий центр

./easyrsa build-ca

не забудьте указанный пароль. После данных манипуляций мы получим два ключа.

/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/ca.key
/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/ca.crt

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

Создадим запрос сертификата для сервера с опцией nopass, чтобы каждый раз не вводить пароль при запуске сервера

./easyrsa gen-req server nopass

подписываем запрос

./easyrsa sign-req server server
В процессе работы скрипта вводим пароль от CA, который указывали раньше и отвечаем на вопрос yes. Мы получили подписанный удостоверяющим центром сертификат для сервера — /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/server.crt
Вам еще может пригодиться в будущем ключ Диффи-Хелмана, генерируем его:

./easyrsa gen-dh

По завершению работы скрипта получаем файл dh сертификата — /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/dh.pem.
Копируем в папку /etc/openvpn все необходимые для работы openvpn сервера ключи:

cp pki/ca.crt /etc/openvpn/ca.crt
cp pki/dh.pem /etc/openvpn/dh.pem
cp pki/issued/server.crt /etc/openvpn/server.crt
cp pki/private/server.key /etc/openvpn/server.key

создадим ключ для клиента

 ./easyrsa gen-req client nopass
./easyrsa sign-req client client

При запросе пароля указываем от сервера. По итогу получим два файла

/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/client.crt
/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/client.key
На телефон нужно будет перекинуть 3 файла: client.crt, client.key, ca.crt

Сервер установили, ключи сделали. Перейдём к настройке сервера.

nano /etc/openvpn/server.conf

Я приведу свой конфиг файла, он рабочий :) вам останется только подставить свои цифры и всё.

mode server # указываем в каком режиме работать
local 192.168.80.151 # если несколько сетевых интерфейсов можно указать. Если 1 интерфейс то не указываем.
port 12345  # порт может быть любым, но смотрите чтобы не пересекался с другим (например с 80 или 25 или 443 и т.д.
proto tcp # протокол может быт и udp, если есть необходимость в этом
dev tun # можно использовать и tap, но думаю что в данном случае лучше подходит tun
push "redirect-gateway" # чтобы передавать клиентам шлюз используемый на сервере
push "dhcp-option DNS 8.8.8.8" # тоже самое что и выше только с днс
push "dhcp-option DNS 8.8.4.4"
ca /etc/openvpn/ca.crt # наши ключи и сертификаты
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem
server 192.168.81.0 255.255.255.0 # подсеть для туннеля, может быть любой
keepalive 10 120
comp-lzo # если не ошибаюсь сжатие
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log # наши логи
log /var/log/openvpn/openvpn.log
verb 3 # подробность логов

сохраняем конфих и запускаем сервер

systemctl start openvpn@server

если отвалилось с ошибкой, то нужно отключить selinux 

/etc/sysconfig/selinux
SELINUX=disabled

reboot

systemctl start openvpn@server
systemctl enable openvpn@server

Всё доложно было пройти без ошибок. Для проверка можно посмотреть что висит на порту который мы укзаали в настройках

netstat -tulnp | grep 13555

должно показать примерно следующее

udp 0 0 0.0.0.0:13555 0.0.0.0:* 2472/openvpn

теперь проверим наши сетевые адреса


Далее надо настроить форвардинг. Для начала включим его в системе

nano /etc/sysctl.conf

и добавим туда строчку

net.ipv4.ip_forward = 1

применим настройки

sysctl -p

Теперь перейдём к настройке форварда. Отредактируем файл
nano /etc/iptables.sh

я приведу только настройки для перенаправления портов. всё остальное на ваш выбор. безопасности в этот раз мы касаться не будем

#!/bin/bash
export IPT="iptables"
# Внешний интерфейс
export WAN=ens32 
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
$IPT -A FORWARD -s 192.168.81.0/24 -j ACCEPT
$IPT -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -t nat -A POSTROUTING -s 192.168.81.0/24 -o ens32 -j MASQUERADE
/sbin/iptables-save  > /etc/sysconfig/iptables

сохраняем файл и стартуем iptables

systemctl start iptables
systemctl enable ipatables

Ну вот теперь всё готово, и перейдём к настройке телефона. Нам понадобится приложение. Я рекомендую использовать OpenVPN for Android. Можно конечно использовать официальный клиент, но этот мне показался удобнее. И так.
Для начала нам нужно будет скопировать клиентские ключи и сертификаты, которые мы делали выше, на телефон. После этого устанавливаем приложение и добавляем профиль. Ниже я приведу скиншоты настроек как у меня. вам нужно будет только указать ip адресс, порт, и подгрузить сертификаты. И всё










Вот и всё. В этом приложении можно выбрать для чего использовать VPN, например для телеграма или вк или ещё чего. 

{poster_avatar}  ArcheRAWG
49 31.08.18


Кликните на изображение чтобы обновить код, если он неразборчив