Настройка OpenVPN на Ubuntu Server для подключения клиентом Mikrotik


В данной инструкции мы рассмотрим настройку сервера OpenVPN на Ubuntu и конфигурирование Mikrotik для подключения по VPN.
Выполнение настройки сервера OpenVPN
Настройка Mikrotik для подключения к серверу VPN
Настройка доступа к сети Интернет
Настройка анонимности
Проброс портов
Другая информация по OpenVPN
Настройка сервера OpenVPN
Мы настроим наш сервер, чтобы он слушал на нестандартном порту OpenVPN — 443. Откроем порт в брандмауэре:
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
* если мы будем использовать другой порт, меняем его на соответствующий. Также необходимо обратить внимание на протокол tcp. Необходимо использовать именно его, так как Mikrotik не поддерживаем UDP для подключения к OpenVPN.
Для сохранения правил используем утилиту iptables-persistent:
apt-get install iptables-persistent
netfilter-persistent save
Устанавливаем пакеты:
apt install openvpn easy-rsa
* где openvpn — сам сервер и клиента OpenVPN; easy-rsa — утилита для создания сертификатов.
Создаем каталог, в котором разместим готовые сертификаты для OpenVPN:
mkdir -p /etc/openvpn/keys
Создаем каталог, в который будем помещать все сгенерированные сертификаты:
mkdir /etc/openvpn/easy-rsa
Переходим в созданный нами каталог:
cd /etc/openvpn/easy-rsa
Скопируем в него шаблоны скриптов для формирования сертификатов:
cp -r /usr/share/easy-rsa/* .
Чтобы ускорить процесс создания ключей, создадим следующий файл:
vi vars
export KEY_COUNTRY="RU"
export KEY_PROVINCE="Sankt-Petersburg"
export KEY_CITY="Sankt-Petersburg"
export KEY_ORG="DMOSK COMPANY"
export KEY_EMAIL="master@dmosk.ru"
export KEY_CN="DMOSK"
export KEY_OU="DMOSK"
export KEY_NAME="name-openvpn-server.dmosk.ru"
export KEY_ALTNAMES="name-openvpn-server"
* данные значения могут быть любыми, но лучше их задать осмысленно. Для удобства.
Рассмотрим процесс формирования сертификата с использованием RSA3 пошагово.
1. Инициализируем PKI:
./easyrsa init-pki
2. Создаем корневой сертификат:
./easyrsa build-ca
* после вводим дважды пароль.
На запрос «Common Name» можно просто нажать Enter:
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
3. Создаем запрос на сертификат для сервера:
./easyrsa gen-req server nopass
* nopass можно упустить, если хотим повысить безопасность с помощью пароля на сертификат.
На запрос «Common Name» можно просто нажать Enter:
Common Name (eg: your user, host, or server name) [server]:
4. Генерируем сам сертификат:
./easyrsa sign-req server server
После ввода команды подтверждаем правильность данных, введя yes:
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
... и вводим пароль, который указывали при создании корневого сертификата:
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
5. Формируем ключ Диффи-Хеллмана:
./easyrsa gen-dh
Скопируем созданные ключи в рабочий каталог:
cp pki/ca.crt /etc/openvpn/keys/
cp pki/issued/server.crt /etc/openvpn/keys/
cp pki/private/server.key /etc/openvpn/keys/
cp pki/dh.pem /etc/openvpn/keys/
Создаем конфигурационный файл для сервера:
vi /etc/openvpn/server.conf
port 443
proto tcp
dev tun
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh.pem
server 172.16.10.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
max-clients 32
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 4
mute 20
daemon
mode server
cipher BF-CBC
* где
- port — сетевой порт (443 позволит избежать проблем при использовании Интернета в общественных местах, но может быть любым из свободных. Порт 1194 является стандартным для OpenVPN).
- proto — используемый транспортный протокол.
- dev — виртуальный сетевой адаптер, который будет создан для работы OpenVPN.
- ca — путь до сертификата корневого центра сертификации.
- cert — путь до открытого сертификата сервера.
- key — путь до закрытого сертификата сервера.
- dh — путь до ключа Диффи - Хеллмана.
- server — задаем IP-адрес сервера в сети VPN.
- ifconfig-pool-persist — путь к файлу для хранения клиентских IP-адресов.
- keepalive X Y — каждые X секунд отправляется ping-запрос на удаленный узел. Если за Y секунд не получено ответа — перезапускать туннель.
- max-clients — максимум одновременных подключений.
- persist-key — не перезагружать ключи при повторной загрузки из-за разрыва соединения.
- persist-tun — не изменять устройства tun/tap при перезапуске сервера.
- status — путь до журнала статусов.
- log-append — путь до файла лога с дополнительным выводом информации.
- verb — уровень логирования событий. От 0 до 9.
- mute — ограничение количества подряд отправляемых в лог событий.
- daemon — работа в режиме демона.
- mode — в каком режиме работает openvpn (сервер или клиент).
- cipher — тип шифрования. В нашем примере это blowfish 128.
Создадим каталог для логов:
mkdir /var/log/openvpn
Разрешаем автоматический старт сервиса vpn и перезапускаем его:
systemctl enable openvpn@server
systemctl restart openvpn@server
Настройка OpenVPN-клиента (Mikrotik)
Сертификат должен быть сформирован на сервер, после чего перенесен на микротик. Рассмотрим процесс подробнее.
На сервере
Создадим каталог, куда поместим сертификаты для обмена:
mkdir /tmp/keys
* сертификаты будут скопированы в каталог /tmp для удобства их переноса на компьютер.
Переходим в каталог easy-rsa:
cd /etc/openvpn/easy-rsa
Создаем сертификат для клиента:
./easyrsa build-client-full client1 nopass
* в данном примере будет создан сертификат для узла client1 (название может быть любым).
Вводим пароль, который указывали при создании корневого сертификата:
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
Скопируем ключи во временную директорию:
cp pki/issued/client1.crt pki/private/client1.key pki/ca.crt /tmp/keys/
* название client1 зависит от имени сертификата, который мы ему дали при создании.
Разрешим доступ на чтение каталога с ключами всем пользователям:
chmod -R a+r /tmp/keys
Переносим данный каталог с ключами на компьютер, с которого мы будем настраивать Mikrotik. Это можно сделать с помощью различных утилит, например WinSCP.
Подключаемся к роутеру Mikrotik. Это можно сделать с помощью веб-браузера или специальной программы Winbox. Мы рассмотрим вариант с использованием последней.
Заходим в настройки роутера - переходим в раздел Files - кликаем по Upload и выбираем наши 3 сертификата:
Кликаем по OK. Нужные нам файлы окажутся на роутере.
Переходим в System - Certificates:
Кликаем по Import:
... и по очереди импортируем:
- ca.crt
- client1.crt
- client1.key
* импорт делаем именно в такой последовательности.
Теперь переходим в раздел PPP - создаем новое соединение OVPN Client:
На вкладке Dial Out настраиваем наше соединение:
* где:
- Connect To — адрес сервера OpenVPN, к которому должен подключиться Mikrotik.
- Port — порт, на котором слушает OpenVPN.
- User — учетная запись для авторизации. Мы не настраивали проверку пользователя, но без указания данного поля Mikrotik не даст сохранить настройку.
- Certificate — выбираем сертификат, который импортировали на Mikrotik.
- Auth — алгоритм криптографического хеширования, который должен использоваться для подключения.
- Chiper — криптографический алгоритм шифрования.
- Add Default Route — если поставить данную галочку, все запросы в другую подсети (Интернет) должны пойти через VPN соединение.
Нажимаем OK — наш роутер должен подключиться к серверу.
Настройка доступа к сети Интернет через сервер VPN
Для того, чтобы наш сервер VPN мог раздавать Интернет подключившимся к нему устройствам, выполняем несколько действий.
Создаем файл:
vi /etc/sysctl.d/gateway.conf
net.ipv4.ip_forward=1
Применяем настройку:
sysctl -p /etc/sysctl.d/gateway.conf
Добавляем фаервольные правила. Как правило, управление брандмауэром netfilter в Linux на базе Debian выполняется с помощью утилиты iptables.
Настройка выполняется из расчета, что сеть Интернет настроена через интерфейс ens3:
iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE
iptables -I FORWARD -i tun0 -o ens3 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -i tun0 -o ens3 -j ACCEPT
Предполагается, что tun0 используется для VPN сети (данное имя присваивается серверу OpenVPN по умолчанию), а ens3 — внешней. Посмотреть имена интерфейсов можно командой:
ip a
Сохраняем настройки iptables:
apt-get install iptables-persistent
netfilter-persistent save
Настройка анонимности
В сети есть различные порталы для проверки анонимности. Например, сайты whoer или 2ip. Приведем некоторые настройки для получения 100%-го результата.
1. Отключение icmp. По времени ответа на ping можно определить отдаленность клиента от прокси. Чтобы проверку нельзя было выполнить, отключаем на сервере icmp.
Для этого создаем файл:
vi /etc/sysctl.d/icmp.conf
net.ipv4.icmp_echo_ignore_all=1
И применяем настройки:
sysctl -p /etc/sysctl.d/icmp.conf
2. Настройка MTU.
Для решения проблем с VPN fingerprint, на стороне сервера добавляем 2 опции:
vi /etc/openvpn/server.conf
...
tun-mtu 1500
mssfix 1623
Перезапускаем сервис:
systemctl restart openvpn@server
Проброс портов (Port Forwarding)
Необходим для перенаправление сетевых запросов на Mikrotik, стоящий за VPN.
Настройка выполняется двумя командами:
iptables -t nat -I PREROUTING -p tcp -i ens3 --dport 80 -j DNAT --to-destination 172.16.10.6:80
iptables -I FORWARD -p tcp -d 172.16.10.6 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
* где ens3 — внешний сетевой интерфейс. 172.16.10.6 — IP-адрес роутера Mikrotik, который он получит после подключения.
Разрешаем порт:
Не забываем сохранить правила:
netfilter-persistent save
Читайте также
Другие полезные инструкции на тему VPN:
1. Установка и настройка OpenVPN на Linux CentOS 7.
2. Настройка и использование OpenVPN на Ubuntu.
3. Как настроить сервер OpenVPN на Windows.
4. Настройка сервера OpenVPN на CentOS 8.
5. Настройка OpenVPN сервера на Mikrotik.
7. Настройка доступа к локальной сети клиентам OpenVPN в Linux.