последние новости

Создайте виртуальную частную сеть (VPN) в Linux с помощью OpenVPN.

Виртуальные частные сети (VPN) позволяют скрыть передачу данных через Интернет и повысить безопасность при просмотре Интернета из общественных мест. Многие поставщики онлайн-услуг предоставляют вам как бесплатные, так и платные варианты VPN. Однако даже самые лучшие платные планы могут быть ненадежными или медленными.

Если бы ты только мог создать VPN между вашим ноутбуком и домашним компьютером.

На самом деле этот процесс проще, чем вы думаете. Сегодня мы собираемся обсудить, как вы можете использовать OpenVPN для создания безопасного соединения между клиентом и сервером на машине Linux.

Создайте виртуальную частную сеть (VPN) в Linux с помощью OpenVPN - Linux

Имейте в виду, что мы будем создавать конфигурацию маршрутизации, а не соединительный инструмент , который должен подходить для большинства случаев использования. Пользователи Windows могут продолжить, прочитав Документация OpenVPN , начиная с раздела о настройке центра сертификации. Команды, используемые в Windows, будут похожи на те, что показаны ниже.

что тебе нужно

Вам понадобятся два компьютера: один - сервер, а другой - клиент. Серверная машина может быть домашним рабочим столом или экземпляром Linux DigitalOcean или же Linode. Клиентская машина - это компьютер, которым вы регулярно пользуетесь. Поскольку это руководство сделано в Linux, обе машины также должны работать под управлением Linux.

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

Установить OpenVPN

Для начала вам необходимо установить OpenVPN и Easy-RSA на свой сервер. Затем установите OpenVPN на свой клиентский компьютер.

В Ubuntu вы должны установить Easy-RSA из Эта страница Github. Ubuntu включает Easy-RSA 2 в свои репозитории. Ссылка на Github представляет Easy-RSA версии 3, которая следует за командами, которые я буду использовать в этой статье.

sudo apt-get install openvpn
git clone https://github.com/OpenVPN/easy-rsa.git

В каталоге, в который вы скопировали репозиторий Github, скопируйте каталог easyrsa3, который он содержит, в / etc / easy-rsa /.

sudo mkdir /etc/easy-rsa
sudo cp -r ./easyrsa3/* /etc/easy-rsa/

Инфраструктура открытых ключей (PKI)

OpenVPN использует инфраструктуру открытых ключей (PKI) для идентификации серверов и клиентов, чтобы эти отдельные объекты могли общаться друг с другом. PKI использует главный центр сертификации (CA) вместе с индивидуальными сертификатами и закрытыми ключами для каждого сервера и клиента.

ЦС должен зарегистрировать как сертификаты сервера, так и сертификаты клиента. Затем OpenVPN проверяет, что сервер аутентифицирует личность каждого клиента, и в то же время каждый клиент проверяет идентичность сервера.

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

Создать сертификат CA

В целях повышения безопасности рекомендуется, чтобы ваш компьютер CA отличался от вашего сервера. Для краткости в этой статье для обеих задач будет использоваться одно и то же устройство. Процедуры копирования файлов должны быть изменены в соответствии с вашей ситуацией - будь то использование scp для передачи по сети или использование USB-ключа для передачи файлов вручную.

Примечание. Если вы используете отдельный компьютер в качестве устройства CA, вам необходимо установить Easy-RSA на это устройство.

1. Вы должны изменить каталог на «/ etc / easy-rsa /:».

компакт-диск /etc/easy-rsa/

2. При необходимости скопируйте «/etc/easy-rsa/vars.example» в «/ etc / easy-rsa / vars», затем откройте vars, чтобы отредактировать его содержимое:

sudo cp ./vars.пример ./vars

судо нано ./vars

3. Введите данные, такие как ваша страна, провинция, город, организация и адрес электронной почты. Удалите строки здесь, удалив «#» в начале каждой из них.

Создайте виртуальную частную сеть (VPN) в Linux с помощью OpenVPN - Linux
Закончив редактирование, сохраните (Ctrl + O) и выйдите (Ctrl + X).
4. Настройте новый PKI и сгенерируйте главный ключ центра сертификации, который вы будете использовать для регистрации индивидуальных сертификатов клиента и сервера:
export EASYRSA=$(pwd)

sudo ./easyrsa init-pki

sudo ./easyrsa build-ca
Скопируйте только что созданный файл ca.crt в каталог сервера OpenVPN. Вы также должны изменить его владельца и группу с помощью Chown:
sudo cp /etc/easy-rsa/pki/ca.crt /etc/openvpn/server/

sudo chown root:root /etc/openvpn/server/ca.cr

Сгенерировать сертификат сервера и закрытый ключ

Вернитесь в каталог Easy-RSA и создайте сертификат сервера и закрытый ключ:
cd /etc/easy-rsa

sudo ./easyrsa init-pki

sudo ./easyrsa gen-req ServerName nopass

Вы можете изменить «ServerName» в приведенной выше команде на любое желаемое имя. Обязательно отмените это изменение при копировании нового ключа в каталог сервера OpenVPN:

sudo cp /etc/easy-rsa/pki/private/ServerName.key / etc / openvpn / server /

метод обмена ключами

OpenVPN использует метод обмена ключами Диффи-Хеллмана (DH) для безопасного обмена криптографическими ключами по сети. Вы создадите файл параметров DH с помощью следующей команды:

sudo openssl dhparam -out /etc/openvpn/server/dh.pem 2048

Последнее число, 2048, в этой команде отображает количество битов, использованных для создания файла. Например, вы можете использовать 4096, но создание файла займет больше времени и не сильно повысит безопасность. По умолчанию установлено 2048, и этого значения достаточно для большинства случаев использования.

Аутентификация сообщений на основе хэша

OpenVPN также использует ведение журнала аутентификации сообщений (HMAC) на основе хэшей для защиты от уязвимостей аутентификации сообщений SSL / TLS. Создайте файл с помощью этой команды:

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

Клиентские файлы

На этом этапе вы создали несколько файлов для своего сервера. Пришло время создать профили для ваших клиентов. Вы можете повторять этот процесс столько раз, сколько вам нужно. Вы можете безопасно создавать клиентские файлы на любом компьютере, на котором установлен Easy-RSA.

Войдите в каталог Easy-RSA и снова настройте PKI, если вы еще этого не сделали:

cd /etc/easy-rsa

sudo ./easyrsa init-pki

Сгенерируйте клиентский ключ и сертификат. Измените каталоги, если вы пропустили предыдущий шаг.

cd /etc/easy-rsa

sudo ./easyrsa gen-req ClientName nopass

Если вы повторите процесс, вам не нужно настраивать PKI для каждого нового клиента. Просто не забудьте каждый раз менять «ClientName», чтобы оно было уникальным.

Регистрация сервера и клиентские сертификаты

Теперь центр сертификации должен зарегистрировать сертификаты клиента и сервера.

Если вы посмотрите в файл «/ etc / easy-rsa / pki / reqs /», вы увидите все файлы запросов (.req), которые Easy-RSA были созданы в предыдущих командах genrc-rech от easyrsa.

Создайте виртуальную частную сеть (VPN) в Linux с помощью OpenVPN - Linux

На этом скриншоте всего два файла .req. Ваш номер будет другим, если на предыдущем шаге вы сделали более одного клиента.

Если вы используете отдельный ЦС, вам необходимо передать эти файлы .req в ЦС для регистрации. Как только это будет завершено, перейдите в каталог Easy-RSA и зарегистрируйте свои файлы с помощью следующих команд, убедившись, что отражено правильное расположение каждого адреса .req и имя каждого сервера и клиента.

cd /etc/easy-rsa
sudo ./easyrsa import-req /etc/easy-rsa/pki/reqs/ServerName.req Server1
sudo ./easyrsa import-req /etc/easy-rsa/pki/reqs/ClientName.req Client1
sudo ./easyrsa sign-req server Server1
sudo ./easyrsa sign-req client Client1

Обратите внимание, что вам нужно будет предоставить Easy-RSA другое имя для сертификатов сервера и клиента. Здесь ServerName.req будет использоваться, например, для создания Server1.crt.

Теперь вы должны найти два новых файла - «/etc/easy-rsa/pki/issued/Server1.crt» и «/etc/easy-rsa/pki/issued/Client1.crt», которые будут перенесены на оба устройства ( см. следующий раздел этой статьи). Вы можете удалить любые оставшиеся файлы .req.

Передача файлов .CRT.

Теперь подписанные сертификаты (все .crt) готовы к работе для своих владельцев. Переместите файл сервера на его сайт OpenVPN и создайте новый каталог для клиентских сертификатов:

sudo mv /etc/easy-rsa/pki/issued/Server1.crt /etc/openvpn/server/

sudo chown root:root /etc/openvpn/server/Server1.crt

sudo mkdir /etc/easy-rsa/pki/signed

sudo mv /etc/easy-rsa/pki/issued/Client1.crt /etc/easy-rsa/pki/signed/

Создание здесь папки «… pki / signed /» даст вам сайт с категорией для размещения нескольких отзывов клиентов.

Общие файлы сервера и клиента

Теперь у вас должно быть пять файлов в каталоге «/ etc / openvpn / server /»: ca.crt, dh.pem, Server1.crt, ServerName.key и ta.key.

Вам понадобятся два таких же файла в клиентской папке OpenVPN на клиентском компьютере. Вы должны скопировать его, используя scp или флэш-диск, если это возможно. Скопируйте «/etc/openvpn/server/ca.crt» и «/etc/openvpn/server/ta.key» в «/ etc / openvpn / client /.»

Убедитесь, что вы скопировали сертификат клиента и ключ для этого же сайта. Скопируйте «/etc/easy-rsa/pki/signed/Client1.crt» и «/etc/easy-rsa/pki/private/ClientName.key» своему клиенту «/ etc / openvpn / client /». Повторите этот процесс для любых дополнительных клиентов, которых вы, возможно, создали.

Для любого клиента у вас теперь должно быть четыре файла в «/ etc / openvpn / client»: Client1.crt, ClientName.key, ca.crt и ta.key.

Файлы конфигурации сервера и клиента

Последний шаг перед запуском VPN - отредактировать файлы конфигурации сервера и клиента. Сначала найдите файлы по умолчанию «server.conf» и «client.conf». Скорее всего, они находятся в одном из следующих мест:

“/usr/share/openvpn/examples”

"/ usr / share / doc / openvpn / examples / sample-config-files /" (توجد إعدادات Ubuntu هنا)

Примечание. В Ubuntu вам нужно будет распаковать файл «server.conf.gz». Используйте gunzip -d ./server.conf.gz, чтобы получить файл server.conf из zip-пакета.

Скопируйте каждый файл конфигурации в соответствующий каталог «/ etc / openvpn / server /» и / etc / openvpn / client /.

В server.conf внесите следующие изменения. Убедитесь, что имена и расположение ca.crt, Server1.crt, ServerName.key и dh.pem указаны в вашем файле конфигурации. Возможно, вам потребуется использовать полные пути - например, строку с надписью «cert /etc/openvpn/server/Server1.crt».

Создайте виртуальную частную сеть (VPN) в Linux с помощью OpenVPN - Linux

Измените строку tls-auth ... на tls-crypt ta.key. Опять же, может потребоваться полный путь.

Создайте виртуальную частную сеть (VPN) в Linux с помощью OpenVPN - Linux

(Удалите «;») из строк «никто не пользователь» и «никто не сгруппировать».

Создайте виртуальную частную сеть (VPN) в Linux с помощью OpenVPN - Linux

Для вашего клиента вы внесете аналогичные изменения. После создания файла конфигурации поменяйте местами имена и расположения ca.crt, Client1.crt, ClientName.key и ta.key (с тем же шагом от tls-auth… до tls-crypt…), введите имя или IP-адрес и порт вашего сервера.

Создайте виртуальную частную сеть (VPN) в Linux с помощью OpenVPN - Linux

время контакта

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

Запустите сервер с помощью:

openvpn /etc/openvpn/server/server.conf

и клиент с:

openvpn /etc/openvpn/client/client.conf

Успешное создание VPN появится, когда клиент прочитает «Последовательность инициализации завершена» в конце своего вывода. Вы также найдете новый тип подключения в доступных сетевых интерфейсах.

Создайте виртуальную частную сеть (VPN) в Linux с помощью OpenVPN - Linux

На этом снимке экрана показан интерфейс tun0. Это то, что может предложить сервер OpenVPN. Вы можете увидеть его адрес как 10.8.0.1 и пропинговать этот адрес от клиента, чтобы проверить успешное соединение.

Создайте виртуальную частную сеть (VPN) в Linux с помощью OpenVPN - Linux

Маршрутизация интернет-трафика через сервер

На этом этапе вам, скорее всего, потребуется доступ в Интернет через сервер с удаленного клиента. Для этого вам сначала нужно изменить файл конфигурации сервера. Добавьте строку «push-gateway def1» в файл конфигурации вашего сервера.

echo "push \" redirect-gateway def1 \ "" | sudo tee -a /etc/openvpn/server/server.conf

Вам также нужно будет указать вашему серверу, чтобы он правильно маршрутизировал запросы интернет-трафика от клиента. Эта команда изменит ваши правила фильтрации пакетов Iptables:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Если вы не изменили строку «server 10.8.0.0 255.255.255.0» в файле server.conf, IP-адрес должен работать в этой команде. Вам нужно будет изменить «eth0» в соответствии с интерфейсом Ethernet вашего сервера. Из предыдущих снимков экрана видно, что мое устройство enp19s0 использует.

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

echo "push \"dhcp-option DNS 10.8.0.1\"" | sudo tee -a /etc/openvpn/server/server.conf

Наконец, вы можете включить пересылку пакетов на сервере следующим образом:

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Теперь у вас должна быть возможность использовать клиент для доступа в Интернет через VPN.

Заключение

Я знаю, что это был долгий путь. Мы надеемся, что вам удалось создать VPN и безопасно подключиться к Интернету.

По крайней мере, это будет хорошим опытом создания безопасного цифрового туннеля. Спасибо, что присоединились ко мне до конца.

Перейти к верхней кнопке