Настройка VPN на Ubuntu Server (способ первый)

Сегодня научимся настраивать свой VPN сервер на Ubuntu Server. В качестве сервера VPN будем использовать программу OpenVPN.
Установка OpenVPN на Ubuntu Server
Приступим к установке пакетов на нашем сервере. В терминале набираем:
sudo apt update
sudo apt install openvpn easy-rsa -y
Оба пакеты должны быть установлены как на сервере, так и на клиенте. Они понадобятся для настройки программы.
Настройка сертификатов OpenVPN
Для настройки сертификатов нам потребуется пакет easy-rsa. Копируем директорию /easy-rsa в директорию нашего openvpn сервера. Но для начала станем root пользователем
sudo -su
sudo cp -R /usr/share/easy-rsa /etc/openvpn/
Перейдем в директорию /easy-rsa
cd /etc/openvpn/easy-rsa/
Откроем на редактирование файл vars
sudo nano vars
В конце файла заменим информацию о сертификатах по умолчанию (ваши значения).
export KEY_COUNTRY="RU"
export KEY_PROVINCE="Moscow Region"
export KEY_CITY="Moscow"
export KEY_ORG="MyOrg"
export KEY_EMAIL="vash@email.ru"
export KEY_OU="MyOrganizationalUnit"
# PKCS11 я не использовал, поэтому оставил без изменений.
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234
export KEY_ALTNAMES="VPNtoRUS"
Загружаем переменные
source ./vars
Если выдает вот такое предупреждение:
**********************************************************
No /etc/openvpn/easy-rsa/openssl.cnf file could be found
Further invocations will fail
*********************************************************
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
Значит надо переименовать один из файлов openssl-X.X.X.cnf в файл с именем openssl.cnf
sudo mv openssl-1.0.0.cnf openssl.cnf
Далее очищаем от старых сертификатов и ключей директорию /keys
./clean-all
Создаем сертификат ЦС. По умолчанию поля будут заполняться данными, введенными ранее в файле /vars, поэтому можно ничего не менять.
./build-ca
Создаем ключ сервера
./build-key-server server
В конце соглашаемся с запросом на подпись и добавление сертификат в базу.
Создаем ключ Диффи-Хеллмана
./build-dh
Создаём ключ для tls-аутентификации
openvpn --genkey --secret keys/ta.key
Создадим симлинк на директорию ./keys
sudo ln -s /etc/openvpn/easy-rsa/keys /etc/openvpn/keys
Если же по какой либо причине у Вас при создании сертификатов сервер выдает ошибку. Значит придется скачать и собрать пакет easy-rsa
самостоятельно. Как это сделать смотрим эту статью.
Настройка конфигурационного файла OpenVPN сервера
Далее создаем конфигурационный файл openvpn.
sudo touch /etc/openvpn/server.conf
Со следующим содержимым:
# Порт на котором будет крутиться наш VPN (по умолчанию 1194)
port 1194
# Протокол может быть UDP или TCP.
proto udp
#Сообщение серверу о конце сессии (если укажите TCP,то ставим 0)
explicit-exit-notify 2
# Название интерфейса.
dev tun
# Указываем директории с нашими ключами
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh2048.pem
# Задаем IP и маску виртуальной сети. Произвольно, но если не уверены лучше делайте как показано здесь
server 10.8.0.0 255.255.255.0
# Указываем, где хранятся файлы с настройками IP-адресов клиентов (создадим ниже)
client-config-dir ccd
# Запоминать динамически выданные адреса для VPN-клиентов и при последующих подключениях назначать те же значения.
ifconfig-pool-persist ipp.txt
### Включаем TLS
tls-server
# Для сервера 0 для клиента 1
tls-auth /etc/openvpn/keys/ta.key 0
tls-timeout 120
# Проверка подлинности пакетов
auth SHA256
# Шифровать методом
cipher AES-256-CBC
# Чтобы клиенты видели друг друга
client-to-client
# Один IP на клиента
topology subnet
# Разрешить дублирующие сертификаты
;duplicate-cn
# Пинг клиента каждые 10 сек. и разрыв соединения если нет пинга в течении 120 сек.
keepalive 10 120
# Сжатие трафика старые клиенты
comp-lzo
#Новые v2.4+
;compress lz4-v2
;push "compress lz4-v2"
# Максимум клиентов
max-clients 10
# Права для клиентов-только для Linux
user nobody
group nogroup
# Не перечитывать ключи, не закрывать и переоткрывать TUN\TAP устройства, после получения SIGUSR1 или ping-restart
persist-key
persist-tun
# Логи
status openvpn-status.log
log /var/log/openvpn/openvpn.log
# Детальность логирования
verb 3
# Защита от повторов (максимум 20 одинаковых сообщений подряд)
mute 20
# Файл отозванных сертификатов. Раскомментировать, когда такие сертификаты появятся.
;crl-verify /etc/openvpn/crl.pem
Создадим директорию для клиентских конфигов
mkdir /etc/openvpn/ccd
Можно запускать наш сервер OpenVPN
service openvpn restart
Смотрим список интерфейсов
ifconfig
Если среди прочих видим
tun0: flags=4305 mtu 1500
inet 10.8.0.1 netmask 255.255.255.255 destination 10.8.0.1
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
значит VPN-сервер завелся. Если нет, то смотрим лог
tail -f /var/log/openvpn/openvpn.log
Либо можно попробовать перезагрузить ваш сервер
sudo reboot
После перезагрузки должно все заработать. Если нет, то курим логи
Настройка конфигурационного файла клиента.
Создаем сертификат клиента:
cd /etc/openvpn/easy-rsa
./build-key client1
Далее необходимо скопировать файлы client1.crt
, client1.key
, ta.key
и ca.crt
с сервера на клиентскую машину. Для этого в консоли набираем:
scp /etc/openvpn/keys/{client1.crt,client1.key,ca.crt,ta.key} user@user-host:/etc/openvpn/
где,
user – это пользователь на клиентской машине с правами sudo
user-host – это IP адрес ПК на которую передаем ключи
Если вам нужно перенести файлы например на Windows машину или Android, то набираем следующие команды:
zip client1.zip client1.crt client1.key ca.crt ta.key
Далее копируем наш архив в директорию включенную в шару.
Как настроить шару на Ubuntu Server.
Ну а дальше все как обычно. Заходим на расшаренную папку и копируем наш zip архив.
Если все прошло гладко,то переходим на ПК клиента. Установим необходимые пакеты (Для клиента на Ubuntu)
sudo apt install openvpn easy-rsa -y
Создадим файл client.conf
:
sudo touch /etc/openvpn/client.conf
с содержимым:
client
proto udp
dev tun
# !!! замените на настоящий ip адрес сервера
remote 111.111.111.111 1194
# следующие две строчки актуальны только для Linux систем
# на практике они не очень удобны, так как OpenVPN не сможет
# нормально все за собой почистить по завершению работы
user nobody
group nogroup
# Не перечитывать ключи, не закрывать и переоткрывать TUN\TAP устройства
persist-key
persist-tun
# Пути где располагаются сертификаты
ca ca.crt
cert client1.crt
key client1.key
# Используемое шифрование
cipher AES-256-CBC
auth SHA256
# Сжатие трафика
comp-lzo
# Детальность логирования
verb 3
Запускаем VPN туннель:
sudo openvpn --config client.conf
В соседнем терминале набираем:
ping 10.8.0.1
Если все было сделано правильно, вы обнаружите, что пинги успешно доходят до 10.8.0.1
Авто запуск openvpn при старте
Разрешаем автозапуск службы:
systemctl enable openvpn
Если есть вопросы, то пишем в комментариях.
Также можете вступить в Телеграм канал, ВКонтакте или подписаться на Twitter. Ссылки в шапке страницы.
Заранее всем спасибо!!!
RSS
- Как запустить команду в фоне в Linux
- Ошибка несоответствие размеров GPT PMBR
- nginx: [warn] protocol options redefined
- Как включить поддержку linux в windows 11
- Запускаем скрипт после запуска сети Ubuntu 22.04