Установка и настройка OpenVPN на Debian

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

OpenVPN — это технология, позволяющая обезопасить использование интернета, создавая зашифрованный канал типа «сервер-клиент», и обеспечивающая защищённую передачу информации от сервера OpenVPN до клиента. Отлично подходит в случае использования публичных wifi точек доступа, где информация может быть перехвачена третьими лицами. Или в случае, когда ваш ip заблокирован на определённом сайте и нужно безопасно обойти это ограничение.

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

Установка необходимых компонентов

Используя стандартный менеджер пакетов, установим openvpn.

aptitude install openvpn

Создание сертификатов

ОпенВПН в обязательном порядке требует генерации сертификатов для сервера и клиентов. Это и логично, ведь соединение от клиента до сервера должно быть зашифровано.

Перейдите в папку openvpn:

cd /etc/openvpn

Генерировать ключи мы будем с помощью прилагаемых к пакету OpenVPN инструментов. Их временно нужно будет скопировать в папку настроек для удобства. Скопируем их в папку easy-rsa, предварительно создав её.

mkdir easy-rsa

И копируем инструменты.

cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/

Переходим в папку easy-rsa и открываем для редактирования файл vars.

Первым делом находим строку export KEY_SIZE=1024 и меняем её на export KEY_SIZE=2048. Таким образом, будут сгенерированы сертификаты длиной 2048 бит, что надёжнее, чем 1024 бита.

Далее необходимо изменить следующие параметры:

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_EMAIL=mail@host.domain
export KEY_CN=changeme

KEY_COUNTRY — укажите код страны (RU, UA и т.д.);
KEY_PROVINCE — данный пункт не актуален, если вы не проживаете в США. 🙂 Можно заменить на XX;
KEY_CITY — ваш город, где вы проживаете;
KEY_EMAIL — адрес вашей электропочты в обоих пунктах;
KEY_CN — здесь нужно указать ваше доменное имя. Например, server.example.com

Все переменные заполняются латиницей.

Сохраните файл и запустите его выполнение:

source ./vars

Затем запустите удаление старых сертификатов:

./clean-all

Создайте сертификат:

./build-ca

Затем сертификат и ключ сервера. При его генерации можно будет задать пароль.

./build-key-server server

После чего создайте сертификат и ключ для клиента:

./build-key client

Обратите внимание: для каждого клиента следует генерировать собственные сертификат и ключ.

Далее нужно создать ключ Диффи-Хеллмана для возможности использования Forward Secrecy:

./build-dh

И ключ для tls-аутентификации:

openvpn --genkey --secret /etc/openvpn/ta.key

Теперь необходимо скопировать серверные ключи в папку настроек OpenVPN:

cp keys/ca.crt keys/server.crt keys/server.key keys/dh2048.pem /etc/openvpn/

Обязательно скопируйте себе на компьютер, например, на рабочий стол, из папки keys ключи, необходимые для подключения клиента: client.crt, client.key, ca.crt, ta.key.

На этом процесс подготовки сертификатов закончен.

Настройка сервера

В каталоге /usr/share/doc/openvpn/ располагается файл-пример для настройки сервера Openvpn. Скопируйте его в каталог /etc/openvpn/ и разархивируйте:

cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/;gunzip server.conf.gz

Теперь рассмотрим необходимые для работы openvpn параметры.

port 20100

Порт, на котором Openvpn будет принимать соединения. По-умолчанию, 1194. Рекомендую изменить его в целях сокрытия. Можно даже замаскировать опенвпн под Web-сервер, указав порт 80.

ca ca.crt
cert server.crt
key server.key

Здесь указываем пути к сгенерированным сертификатам-ключам для openvpn.

dh dh2048.pem

Путь к ключу Диффи-Хеллмана.

Все эти ключи ранее мы сгенерировали и скопировали в папку /etc/openvpn/, поэтому менять эти параметры нет смысла. Если, конечно, вы не переместили эти файлы куда-то ещё. 🙂

Находим и раскомментируем строку:

push "redirect-gateway def1 bypass-dhcp"

Она нужна для возможности выхода в интернет через сервер ОпенВПН. Если её не раскомментировать, то будут доступны лишь компьютеры внутри сети.

Также нужно указать dns-серверы для подключающихся клиентов.

push "dhcp-option DNS 213.183.57.55"
push "dhcp-option DNS 87.98.175.85"

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

Далее находим и раскомментируем параметр tls-auth.

tls-auth ta.key 0

Этот файл должен храниться в строгом секрете. Права доступа следует использовать 0600.

Внимание! В настройках клиента последняя цифра этого параметра должна быть заменена на 1 — tls-auth ta.key 1.

Чуть ниже в конфигурационном файле следует перечисление доступных шифров. Раскомментируйте шифр AES-128-CBC.

cipher AES-128-CBC   # AES

При необходимости, его можно заменить на AES-256-CBC. В конфигурационном файле клиента шифр должен быть идентичен серверному шифру.

Не лишним будет включение логов для OpenVPN. Особенно, на первых порах использования после настройки для поиска ошибок и т.д.

log /var/log/openvpn.log

Все остальные параметры конфигурационного файла /etc/openvpn/server.conf оставьте со значениями по-умолчанию. На этом настройка сервера OpenVPN закончена. Можно перезапустить сервис командой service openvpn restart и проверить лог-файл на наличие ошибок.

OpenVPN клиент на Windows

Приступаем к настройке Openvpn клиента на Windows. Здесь всё просто: скачиваем клиент с официального сайта, устанавливаем, создаём конфигурационный файл и запускаем.

Стоит отметить, что запускать опенвпн на Windows следует с правами администратора, если активен контроль учётных записей.

Если вы не меняли путь установки, то примеры конфигурационных файлов на вашем ПК располагаются в каталоге C:Program FilesOpenVPNsample-config. Скопируйте отсюда файл client.ovpn и поместите его в каталог C:Program FilesOpenVPNconfig.

Помните о созданных для клиента сертификатах? Их тоже следует скачать с сервера и скопировать в этот каталог.

Откройте конфигурационный файл client.ovpn и найдите параметр remote my-server-1 1194. Вместо my-server укажите ip или доменное имя вашего сервера. Затем порт, который мы изменили ранее. В итоге строка может выглядеть так:

remote 192.168.0.1 20100

Далее нужно указать пути к сертификатам, которые вы сгенерировали на сервере. Раз вы поместили их в каталог с конфигурационным файлом, то пути можно оставить, как есть.

ca ca.crt
cert client.crt
key client.key

Также следует раскомментировать параметр, который указывает путь к tls-ключу.

tls-auth ta.key 1

Ранее уже говорилось о том, что последняя цифра на сервере должна быть 0, на клиенте — 1.

И последний параметр — это шифр, который вы установили на сервере.

cipher AES-128-CBC

Это всё, что требуется для настройки клиента. Попробуйте запустить клиент OpenVPN и подключиться к вашему серверу. Необходимая информация о подключении будет отображена в окошке openvpn gui.

Перенаправление трафика через OpenVPN

Чтобы иметь возможность выхода в интернет через сервер опенвпн, необходимо кое-что сделать для этого.

1. Настроить sysctl

В консоли запустите команду:

sysctl net.ipv4.ip_forward

Если вывод команды будет равным net.ipv4.ip_forward = 1, то изменять что-либо не требуется. Если же значение переменной будет равно 0, то в файл /etc/sysctl.conf нужно добавить строку:

net.ipv4.ip_forward = 1

И перезагрузить правила командой:

sysctl -p

2. Настроить iptables

Поочерёдно выполните в консоли следующие команды:

iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Таким образом, мы разрешим пропускать трафик через сервер OpenVPN для подсети 10.8.0.0 в рамках уже установленных соединений.

Если клиенту openvpn нужно присвоить определённый внешний ip адрес сервера, то вместо последней команды из списка предыдущих для iptables, необходимо выполнить эту:

-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 127.0.0.1

Где после параметра —to-source следует указать внешний ip сервера.

Понравилась статья, расскажи о ней друзьям, нажми кнопку!