Все команды мы будем выполнять от имени пользователя root, поэтому мы не будем использовать в командах sudo для повышения прав, если вы выполняете под своим пользователям добавляйте sudo в начале команды.
Пример:
sudo apt-get update
Установим необходимые пакеты:
sudo apt-get update
sudo apt-get install openvpn easy-rsa
Создадим директорию и скопируем содержимое easy-rsa:
mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/
Перейдем в созданную директорию:
cd /etc/openvpn/easy-rsa/
Отредактируем переменные в файле vars:
#Если не установлен редактор, на всякий случай все равно выполняем
sudo apt-get install nano
nano /etc/openvpn/easy-rsa/vars
Нас интересует только следующий блок:
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
Поменяем на свой:
export KEY_COUNTRY="RU"
export KEY_PROVINCE="MoscowObl"
export KEY_CITY="Moscow"
export KEY_ORG="DKA-DEVELOP"
export KEY_EMAIL="info@dka-develop.ru"
Инициируем переменные:
source /etc/openvpn/easy-rsa/vars
#NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
Очистим от старых сертификатов и ключей папку keys/server:
/etc/openvpn/easy-rsa/clean-all
Создадим сертификат:
/etc/openvpn/easy-rsa/build-ca
В квадратных скобках указываются значения по умолчанию, те которые были заданы в файле vars.
В таких строках можно просто нажимать клавишу “Ввод”.
Генерируем ключ сервера:
/etc/openvpn/easy-rsa/build-key-server server
Генерируем сертификат клиента:
/etc/openvpn/easy-rsa/build-key user
Генерируем ключ Диффи — Хеллмана:
/etc/openvpn/easy-rsa/build-dh
Наконец, последний ключ для tls-аутификации:
openvpn --genkey --secret /etc/openvpn/easy-rsa/keys/ta.key
Копируем серверные ключи в директорию /etc/openvpn:
cd keys
cp server.crt server.key ca.crt dh2048.pem ta.key /etc/openvpn/
Клиенту же понадобятся следующие ключи, они пригодятся нам для подключения к серверу из под Linux, Unix или Windows:
user.crt
user.key
ca.crt
ta.key
Правим конфигурационный файл VPN-сервера:
nano /etc/openvpn/server.conf
Содержимое должно быть такого вида:
port 1194 # порт
proto tcp # тип подключения
#dev tun # раскомментируйте если хотите туннельное подключение, tap0 необходимо закомментировать.
dev tap0 # тип интерфейса, поможет избежать ограничений туннеля
## Ключи сервера ##
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh2048.pem
server 10.1.0.0 255.255.255.0 # подсеть
ifconfig-pool-persist /etc/openvpn/ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
## Лог файлы ##
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3
За счёт указанных параметров мы выбираем порт, протокол, тип соединения, указываем сертификаты, задаём параметры VPN-сети, указываем файл в котором хранить параметры соединений (чтобы можно было их восстановить после переподключения клиента), задаём параметры поддержания соединения, просим использовать сжатие передаваемых данных, указываем серверу при перезагрузке не подключаться к ресурсам которые могут быть недоступны из-за понижения привилегий, задаём файл статуса (содержит информацию о подключенных клиентах), лог-файл и уровень подробности отладочной информации.
Если нужно больше отладочной информации, то для параметра verb можно установить значение вплоть до 9. В большинстве случаев вам должно хватить значения 5 или максимум 6.
После этого для проверки запустите сервер из командной строки:
sudo systemctl start openvpn@server
Где server имя нашего конфигурационного файла в папке /etc/openvpn/
Проверяем интрефейс в списке:
ifconfig | grep tap0
Должно быть примерно так:
tap0 Link encap:Ethernet HWaddr 5a:c6:1b:fa:14:a9
Также можно проверить следующей командой:
sudo systemctl status openvpn@server
#Должно быть что-то похожее на:
openvpn@server.service - OpenVPN connection to server
Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2017-07-18 12:03:53 EDT; 2min 47s ago
Если интерфейса нет, а в лог файле /var/log/openvpn.log содержимое следующего вида:
* чаще относиться к Ubuntu
Tue Jul 18 09:32:11 2017 OpenVPN 2.3.10 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] $
Tue Jul 18 09:32:11 2017 library versions: OpenSSL 1.0.2g 1 Mar 2016, LZO 2.08
Tue Jul 18 09:32:11 2017 daemon() failed or unsupported: Resource temporarily unavailable (errno=11)
Tue Jul 18 09:32:11 2017 Exiting due to fatal error
Необходимо закоментировать параметр LimitNPROC=10 в файле:
nano /lib/systemd/system/openvpn@.service
Пример:
...
#LimitNPROC=10
...
После перезапускаем openvpn сервер:
systemctl daemon-reload
sudo systemctl restart openvpn@server
И снова проверяем командой:
ifconfig | grep tap0
Чтобы наш openvpn сервер загружался после перезагрузки сервера необходимо в файле /etc/default/openvpn, раскомментировать следующую строчку:
AUTOSTART="all"
Это значит что все наши конфигурации в папке /etc/openvpn/, будут запущены.
Можете вместо all указать название нашего файла конфигурации:
AUTOSTART="server"
На этом настройка сервера завершена, перейдем к подключению со стороны клиента: Windows или Linux.
Выполним установку пакетов:
sudo apt-get update
sudo apt-get install openvpn
Создадим файл с конфигурацией, для подключения к нашему серверу:
# Первая команда устанавливает текстовый редактор, если вдруг его у вас нет
sudo apt-get install nano
sudo nano /etc/openvpn/vps.conf
Содержимое нашего файла должно быть таким:
* необходимо заменить ip: 90.30.12.101 на ваш, после пробел и номер порта должен быть как на сервере, если вы указывали свой порт, иначе оставляем как в конфигурации ниже.
client
dev tap0
proto tcp
# Здесь надо указать ip адрес вашего сервера
remote 90.30.12.101 1194
# Путь к нашим сертификатам, вы можете указать свой путь
ca /etc/openvpn/vps/ca.crt
cert /etc/openvpn/vps/user.crt
key /etc/openvpn/vps/user.key
resolv-retry infinite
nobind
persist-key
persist-tun
ns-cert-type server
comp-lzo
# Путь к лог файлу нашего клиента
log /var/log/openvpn_vps.log
verb 3
Копируем файлы с сервера по пути как в конфиграции выше:
* они лежат в директории /etc/openvpn/easy-rsa/keys/ на сервере
ca.crt
user.crt
user.key
Скопировать вы можете любым клиентом, поддерживающий работу SFTP, в нашем видео вы можете посмотреть как мы копировали с помощью MC (Midnight Commander).
Теперь запускаем подключение к серверу:
sudo systemctl start openvpn@vps
Где vps имя нашего конфигурационного файла в папке /etc/openvpn/
И смотрим результат командой:
ifconfig
Должно быть похоже на:
tap0 Link encap:Ethernet HWaddr f6:65:87:66:71:e3
inet addr:10.1.0.2 Bcast:10.1.0.255 Mask:255.255.255.0
inet6 addr: fe80::f465:87ff:fe66:71e3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:39 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:5049 (5.0 KB)
Также можете проверить командой ping:
ping 10.1.0.1
Ссылки на программы:
Openvpn Windows: https://openvpn.net/index.php/open-source/downloads.html
WinSCP: https://winscp.net/eng/download.php
С помощью прогаммы WinSCP скопируйте ключи с сервера, из папки /etc/openvpn/easy-rsa/keys/:
ca.crt
ta.key
user.crt
user.key
Данные ключи скопируйте по пути:
* C:\Program Files\OpenVPN\config/vps или C:\Program Files (x86)\OpenVPN\config/vps в зависимости от разрядности Windows и установленного клиента openvpn.
* папку vps необходимо создать
Создайте файл vps.ovpn и положить его по пути:
* C:\Program Files\OpenVPN\config или C:\Program Files (x86)\OpenVPN\config в зависимости от разрядности Windows и установленного клиента openvpn.
Содержимое файла vps.ovpn:
client
dev tap
proto tcp
# Здесь надо указать ip адрес вашего сервера
remote 90.30.12.101 1194
# Путь к нашим сертификатам, вы можете указать свой путь
ca vps/ca.crt
cert vps/user.crt
key vps/user.key
resolv-retry infinite
nobind
persist-key
persist-tun
ns-cert-type server
comp-lzo
# Путь к лог файлу нашего клиента
log openvpn_vps.log
verb 3
Для подключения в трее рядом с часами нажмите на значок openvpn правой клавишей и нажмите подключиться.
Иконка поменяет цвет на зеленый и будет написано подключено, также можно проверить командой ping:
ping 10.1.0.1