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

Обновлено Обновлено: Опубликовано Опубликовано:

В данной инструкции мы рассмотрим настройку сервера OpenVPN на Ubuntu и конфигурирование Mikrotik для подключения по VPN.

Настройка сервера 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 сертификата:

Переходим к загрузке файлов в Mikrotik

Кликаем по OK. Нужные нам файлы окажутся на роутере.

Переходим в System - Certificates:

Переходим к сертификатам в микротике

Кликаем по Import:

Импортируем сертификаты в микротик

... и по очереди импортируем:

  1. ca.crt
  2. client1.crt
  3. client1.key

* импорт делаем именно в такой последовательности.

Теперь переходим в раздел PPP - создаем новое соединение OVPN Client:

Открываем панель добавления соединения по OpenVPN

На вкладке Dial Out настраиваем наше соединение:

Пример настройки клиента OpenVPN

* где:

  • 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.

6. Настройка OpenVPN клиента.

7. Настройка доступа к локальной сети клиентам OpenVPN в Linux.

# Ubuntu # Безопасность # Интернет # Серверы # Сети
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет