Поиск по сайту:

Как настроить и подключиться к частному серверу OpenVPN во FreeBSD 10.1


Введение

OpenVPN — это серверное/клиентское приложение виртуальной частной сети (VPN) с открытым исходным кодом, которое позволяет безопасно подключаться к виртуальной сети (похожей на локальную сеть).

В этом руководстве объясняется, как установить и настроить сервер OpenVPN на компьютере с FreeBSD 10.1 с IPv4 NAT и маршрутизацией. Он включает краткие объяснения различных параметров конфигурации.

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

Примечание. С 1 июля 2022 г. DigitalOcean больше не поддерживает создание новых капель FreeBSD через панель управления или API. Однако вы по-прежнему можете запускать капли FreeBSD, используя собственный образ. Узнайте, как импортировать собственное изображение в DigitalOcean, следуя нашей документации по продукту.

Предпосылки

  • Сервер FreeBSD 10.1. Размер сервера зависит от того, сколько клиентов вы собираетесь подключить к VPN; 519 МБ достаточно для некоторых клиентов.
  • Корневой доступ

Для этого руководства требуется root-доступ. В этом руководстве сервер, который мы используем, относится к пользователю freebsd по умолчанию, а затем доступ к корневой оболочке:

sudo tcsh

Шаг 1 — Установка OpenVPN

Установить OpenVPN с системой pkg довольно просто. Просто запустите эти команды, чтобы обновить списки пакетов и установить программное обеспечение VPN:

pkg update
pkg install openvpn

Это также должно установить пакет easy-rsa, который будет использоваться для создания пар ключей SSL.

Шаг 2 — Настройка сервера OpenVPN

В этом руководстве мы будем основывать наш файл конфигурации на образце, предоставленном OpenVPN. Мы создадим папку конфигурации для OpenVPN:

mkdir /usr/local/etc/openvpn

Скопируйте пример файла server.conf в новый каталог.

cp /usr/local/share/examples/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/server.conf

Установите nano или ваш любимый текстовый редактор:

pkg install nano

Откройте файл конфигурации для редактирования:

nano /usr/local/etc/openvpn/server.conf

Примечание. Формат файла конфигурации OpenVPN предшествует комментариям точкой с запятой (;) или решеткой (#). В примере точки с запятой используются для комментирования (отключения) параметров конфигурации, а решётки — для комментариев.

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

  • Необязательный порт. Порт по умолчанию — 1194, но вы можете изменить его на любой другой.
  • Необязательно proto: выберите либо tcp, либо udp; по умолчанию все в порядке
  • user и group: установите для них значение nobody, раскомментировав строки. Это заставит OpenVPN работать с меньшими привилегиями из соображений безопасности.

user nobody
group nobody

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

Наконец, не забудьте сохранить изменения.

Шаг 3 — Генерация сертификатов и ключей сервера

easy-rsa упрощает создание сертификатов и ключей.

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

cp -r /usr/local/share/easy-rsa /usr/local/etc/openvpn/easy-rsa

Откройте файл vars для редактирования:

nano /usr/local/etc/openvpn/easy-rsa/vars

Измените размер ключа, изменив эту строку:

export KEY_SIZE=2048

В наши дни стандартом являются 2048-битные ключи, хотя вы также можете использовать 4096-битные ключи, которые более безопасны, но замедляют согласование.

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

Поскольку мы используем оболочку tcsh, строки export необходимо заменить на setenv. Это делается с помощью sed перед source. Перейдите в наш каталог easy-rsa (обязательно).

cd /usr/local/etc/openvpn/easy-rsa/

Замените строки:

cat ./vars | sed -e 's/export /setenv /g' -e 's/=/ /g' | source /dev/stdin

Еще из нашего каталога /usr/local/etc/openvpn/easy-rsa/ сначала очистите каталог, а затем создайте центр сертификации (CA).

./clean-all
./build-ca

Вам будет предложено установить параметры ЦС. Заполните их своими данными:

Country Name (2 letter code) [US]:GB
State or Province Name (full name) [CA]:Somerset
Locality Name (eg, city) [SanFrancisco]:Bath
Organization Name (eg, company) [Fort-Funston]:Callum
Organizational Unit Name (eg, section) [changeme]:VPN
Common Name (eg, your name or your server's hostname) [changeme]:vpn.example.com
Name [changeme]:Callum's VPN CA
Email Address [mail@host.domain]:callum@example.com

Теперь создайте ключ сервера:

./build-key-server server

Опять же, установите параметры. Вам не нужен пароль или необязательное название компании.

Введите y, чтобы подписать и зафиксировать ключ:

Country Name (2 letter code) [US]:GB
State or Province Name (full name) [CA]:Somerset
Locality Name (eg, city) [SanFrancisco]:Bath
Organization Name (eg, company) [Fort-Funston]:Callum
Organizational Unit Name (eg, section) [changeme]:VPN
Common Name (eg, your name or your server's hostname) [server]:vpn.example.com
Name [changeme]:Callum's VPN Server
Email Address [mail@host.domain]:callum@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ENTER
An optional company name []: ENTER

Certificate is to be certified until Feb  5 14:40:15 2025 GMT (3650 days)
Sign the certificate? [y/n]: y

1 out of 1 certificate requests certified, commit? [y/n] y
Write out database with 1 new entries
Data Base Updated

Наконец, необходимо сгенерировать ключ Диффи-Хеллмана. Это может занять некоторое время в зависимости от размера ключа:

./build-dh

Теперь, когда все ключи и сертификаты сервера сгенерированы, их нужно скопировать в наш каталог конфигурации OpenVPN.

cd /usr/local/etc/openvpn/easy-rsa/keys/
cp dh*.pem ca.crt server.crt server.key /usr/local/etc/openvpn/

Вы закончили с сертификатами сервера! Теперь о клиентском сертификате.

Шаг 4 — Генерация клиентских сертификатов

Каждому клиенту также потребуется сертификат и ключ для аутентификации и подключения к VPN. Убедитесь, что вы находитесь в каталоге /usr/local/etc/openvpn/easy-rsa/.

cd /usr/local/etc/openvpn/easy-rsa/

Выполните следующую команду, где clientName — это имя, которое вы хотите использовать для этого конкретного сертификата клиента.

./build-key clientName

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

Вам не нужна кодовая фраза или название компании. Введите y, чтобы подписать и зафиксировать сертификат.

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

Если вы использовали размер ключа, отличный от 2048, вам потребуется изменить конфигурацию OpenVPN, чтобы она соответствовала имени файла размера ключа, который вы использовали. Если вы не помните, вы можете просмотреть правильное имя файла dh с помощью этой команды:

ls /usr/local/etc/openvpn/easy-rsa/keys/dh*.pem

Отредактируйте server.conf:

nano /usr/local/etc/openvpn/server.conf

Замените строку dh dh2048.pem на:

dh dhSIZE.pem

Если вы ранее следовали нашей рекомендации по 2048-битному ключу, вам не нужно вносить никаких изменений.

Повторите этот раздел для каждого отдельного клиентского сертификата, который вы хотите создать.

Шаг 5 — Настройка маршрутизации IPv4 NAT

FreeBSD включает natd как часть брандмауэра ipfw, который обеспечивает маршрутизацию NAT и может использоваться для OpenVPN. Чтобы использовать это, отредактируйте /etc/rc.conf:

nano /etc/rc.conf

Добавьте это содержимое внизу:

firewall_enable="YES"
firewall_type="open"

gateway_enable="YES"
natd_enable="YES"
natd_interface="vtnet0"
natd_flags="-dynamic -m"

  • firewall_enable включает брандмауэр ipfw, необходимый для natd
  • firewall_type=open разрешает брандмауэру трафик по умолчанию
  • gateway_enable задает для net.inet.ip.forwarding значение 1, что разрешает маршрутизацию IPv4 в системе
  • natd_enable включает реальный маршрутизатор NAT
  • natd_interface — внешний интерфейс к Интернету;
  • natd_flags делает NAT динамическим, а -m сохраняет номера портов

Теперь перезагрузите сервер, чтобы загрузить ipfw и natd:

reboot

Войдите снова. После перезагрузки не забудьте снова запустить sudo tcsh, чтобы стать пользователем root, если вы еще этого не сделали.

Шаг 6. Настройка конфигурации маршрутизации OpenVPN и DNS

По умолчанию OpenVPN не настроен на указание клиенту маршрутизировать интернет-трафик через VPN. Мы убедимся, что он направляет трафик через OpenVPN, раскомментировав некоторые строки в /usr/local/etc/openvpn/server.conf:

nano /usr/local/etc/openvpn/server.conf

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

push "redirect-gateway def1 bypass-dhcp"

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Предустановленные DNS-серверы предназначены для OpenDNS, но вы можете установить для них любой DNS, который вам нравится (например, Google DNS с 8.8.8.8 и 8.8.4.4).

Дополнительные настройки:

Вы также можете разрешить клиентам напрямую общаться с IP-адресами друг друга, раскомментировав:

client-to-client

Если, как упоминалось ранее, вы хотите использовать одни и те же ключи и сертификаты для нескольких клиентов (что немного менее безопасно), раскомментируйте эту строку:

duplicate-cn

Сжатие может быть включено и отключено с помощью этой строки:

comp-lzo

Ваш шифр можно установить вручную, раскомментировав одну из этих строк:

cipher BF-CBC        # Blowfish (default)
cipher AES-128-CBC   # AES
cipher DES-EDE3-CBC  # Triple-DES

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

Также доступны дополнительные шифры, такие как aes-256-cbc.

Шаг 7 — Запуск OpenVPN

Включите OpenVPN для загрузки при загрузке и загрузки с помощью команды service, добавив следующую строку в /etc/rc.conf:

nano /etc/rc.conf

Добавьте эти строки в конец файла:

openvpn_enable="YES"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"

Теперь сервер OpenVPN полностью настроен и будет загружаться при загрузке.

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

service openvpn start

Ожидаемый результат:

add net 10.8.0.0: gateway 10.8.0.2

Ваш сервер OpenVPN теперь работает.

Шаг 8 — Настройка файла клиента

На сервере мы создадим файл конфигурации для каждого клиента.

Сначала создайте папку для работы:

mkdir -p /usr/local/etc/openvpn/clients/clientName

Сделайте clientName именем клиента, которое мы установили ранее при создании сертификатов. (Неважно, как именно вы установите это, поскольку это всего лишь рабочий каталог.)

Перейдите в новый каталог:

cd /usr/local/etc/openvpn/clients/clientName/

Скопируйте клиентский ключ и сертификат, сгенерированные с помощью easy-rsa, и образец файла client.conf. Убедитесь, что вы заменили clientName именем, которое вы использовали ранее для файлов .key и .crt:

cp /usr/local/etc/openvpn/easy-rsa/keys/clientName.crt /usr/local/etc/openvpn/easy-rsa/keys/clientName.key ./
cp /usr/local/share/examples/openvpn/sample-config-files/client.conf ./client.conf
cp /usr/local/etc/openvpn/ca.crt ./

Опять же, clientName — это то, что мы использовали ранее.

Отредактируйте файл client.conf:

nano ./client.conf

Обновите строку remote, указав IP-адрес вашего сервера (который можно получить с помощью ifconfig) и номер порта; 1194 используется по умолчанию:

remote your_server_ip 1194

Примечание. Если вы изменили настройки сервера cipher или comp-lzo, это должно быть отражено в файле client.conf. Используйте те же настройки, что и ранее; например:

cipher aes-256-cbc
;comp-lzo

Этот параметр использует шифр aes-256-cbc и отключает сжатие.

Если вы изменили строку proto в конфигурации сервера, то это также нужно отразить в клиенте.

Убедитесь, что эти строки соответствуют тому, что вы установили ранее; если вы ничего не меняли на стороне сервера, не меняйте их здесь.

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

В том же файле client.conf закомментируйте имена файлов сертификатов и ключей:

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

Сохраните изменения.

Наконец, нам нужно внедрить ca.crt, clientName.crt и clientName.key файлы в файле конфигурации. Вы можете скопировать и вставить содержимое, используя cat или nano или как вам удобнее, и соответствующие переменные для OpenVPN, или вы можете использовать однострочный сценарий показан ниже.

Запустите этот скрипт и введите свой clientName при появлении запроса. Сценарий добавляет ваш сертификат и файлы ключей в файл client.conf с соответствующими именами переменных и символами новой строки, которые ожидает OpenVPN:

echo "Enter clientName:" && set CLIENTNAME = $< && printf "\n<ca>\n" >> ./client.conf && cat ./ca.crt >> ./client.conf && printf "</ca>\n" >> ./client.conf && printf "\n<cert>" >> ./client.conf && grep -v '^ ' ./$CLIENTNAME.crt | grep -v 'Certificate' >> ./client.conf && printf "</cert>\n" >> ./client.conf && printf "\n<key>\n" >> ./client.conf && cat ./$CLIENTNAME.key >> ./client.conf && printf "</key>\n" >> ./client.conf

Убедитесь, что вы полностью прокрутили вправо, так как это длинная команда.

Взгляните на готовый файл client.conf с помощью nano или cat. Вы должны увидеть ключ и сертификаты, добавленные в файл внизу.

Готово! Все, что нужно сделать сейчас, это передать файл client.conf вашему клиенту. Большинство клиентов предпочитают расширение .ovpn вместо .conf, поэтому вам нужно локально переименовать файл в my_vpn.ovpn или что-то подобное.

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

Заключение и настройка клиента

Теперь у вас должен быть работающий сервер OpenVPN!

Загрузите файл конфигурации клиента, созданный на последнем шаге (/usr/local/etc/openvpn/clients/clientName/client.conf), на локальный компьютер. Используйте безопасный метод для загрузки файла, например SCP или SFTP.

Также на локальном компьютере установите клиент OpenVPN. OpenVPN имеет клиент для Windows.

Убедитесь, что имя файла конфигурации клиента соответствует ожидаемому; обычно это имя типа my_vpn.ovpn.

Дважды щелкните файл или переместите его в ожидаемый каталог вашего клиента.

Запустите клиент и подключитесь к соответствующему серверу OpenVPN.

Чтобы убедиться, что ваш VPN работает, используйте средство проверки IP-адресов, например http://www.whatismyip.com/. Показанный вами IP-адрес должен совпадать с IP-адресом вашего сервера OpenVPN.

Поздравляем! Вы подключились к своему новому серверу OpenVPN.