Как настроить и подключиться к частному серверу 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
включает реальный маршрутизатор NATnatd_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.