База Знаний Простые инструкции по работе с сервисом ProfitServer

Настройка защищенного туннеля на Linux


Настройка защищённого туннеля для личных целей приобретает всё большую популярность. Приватное сетевое соединение используется обычными пользователями для безопасного выхода в Интернет. При подключении к виртуальному частному шлюзу между компьютером пользователя и сервером создаётся шифрованный канал, недоступный извне, а точкой выхода в сеть становится сам сервер анонимизации. В интернете можно найти множество платных и бесплатных сервисов, предоставляющих такие услуги, но их использование не всегда на 100% безопасно и конфиденциально. По этой причине лучше настроить собственный цифровой тоннель самостоятельно.

Чтобы создать собственный защищенный туннель, необходимо арендовать подходящий виртуальный сервер. Для настройки шифрованного соединения существует различное программное обеспечение, которое отличается поддерживаемыми операционными системами и используемыми алгоритмами. В статье рассматривается два независимых друг от друга способа реализации. Первый основан на протоколе PPTP, который на сегодняшний день считается устаревшим и небезопасным, но при этом очень прост в настройке. Второй использует современное и безопасное ПО OpenVPN, но требует установки стороннего клиентского приложения и выполнения более сложных настроек.

В тестовой среде в качестве сервера используется виртуальный сервер под управлением операционной системы Ubuntu Server 18.04. Брандмауэр на сервере отключен, так как его настройка не рассматривается в данной статье. Настройка клиентской части описана на примере Windows 10.

Подготовительные операции

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

Для включения форвардинга пакетов откроем файл “/etc/sysctl.conf” и изменим значение параметра “net.ipv4.ip_forward” на 1.

включение форвардинга пакетов для настройки защищенного туннеля

Чтобы изменения применились без перезагрузки сервера, выполним команду

sudo sysctl -p /etc/sysctl.conf

Трансляция адресов настраивается средствами iptables. Предварительно уточним имя внешнего сетевого интерфейса, выполнив команду “ip link show”, оно понадобится на следующем шаге. В нашем случае имя интерфейса “ens3”.

ip link show

Включаем трансляцию адресов на внешнем интерфейсе для всех узлов локальной сети.

sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

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

По умолчанию все созданные правила iptables сбрасываются после перезагрузки сервера. Для того, чтобы этого избежать, воспользуемся утилитой “iptables-persistent”
 Устанавливаем пакет.

sudo apt install iptables-persistent

В процессе установки откроется окно конфигурации, в котором система предложит сохранить текущие правила iptables. Так как правила уже настроены, соглашаемся и дважды нажимаем “Yes”. Теперь, после перезагрузки сервера, правила будут восстанавливаться автоматически.

Включаем трансляцию адресов на внешнем интерфейсе для всех узлов локальной сети

PPTP сервер

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

Устанавливаем пакет

sudo apt install pptpd
option /etc/ppp/pptpd-options #путь к файлу с настройками
logwtmp #механизм логирования клиентских подключений
connections 100 #количество одновременных подключений
localip 172.16.0.1 #адрес, который будет шлюзом для клиентов
remoteip 172.16.0.2-200 #диапазон адресов для клиентов

Далее редактируем файл “/etc/ppp/pptpd-options”, большинство параметров уже установлены по умолчанию.

#имя сервиса, потребуется при создании учетных записей для клиентов
name pptpd
#запрещаем устаревшие методы аутентификации
refuse-pap
refuse-chap
refuse-mschap
#разрешаем более надежный метод аутентификации
require-mschap-v2
#включаем шифрование
require-mppe-128
#указываем dns сервера для клиентов, можно указать любые доступные
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
nodefaultroute
lock
nobsdcomp
novj
novjccomp
nologfd

На следующем этапе необходимо создать учетную запись для подключения клиентов. Предположим, мы хотим добавить пользователя “vpnuser”, с паролем “1” и разрешить для него динамическую адресацию. Открываем файл “/etc/ppp/chap-secrets” и добавляем в конец строку с параметрами пользователя.

vpnuser pptpd 1 *

Значение “pptpd” - это имя сервиса, которое мы указали в файле “pptpd-options”. Вместо символа “*” для каждого клиента можно указать фиксированный ip-адрес. В результате содержимое файла “chap-secrets” будет таким.

Настройка приватного сетевого соединения - создание учетной записи для подключения клиентов

Для применения настроек перезагружаем службу pptpd и добавляем её в автозагрузку.

sudo systemctl restart pptpd
sudo systemctl enable pptpd

Настройка сервера завершена.

Настройка клиента

Открываем “Пуск” - “Параметры” - “Сеть и интернет” - “VPN” и нажимаем “Добавить VPN-подключение”

Настройка клиента для шифрованного подключения

В открывшемся окне вводим параметры подключения и нажимаем “Сохранить”

  • Поставщик услуг VPN: “Windows (встроенные)”
  • Имя подключения: “vpn_connect” (можно ввести любое)
  • Имя или адрес сервера: (указываем внешний ip адрес сервера)
  • Тип VPN: “Автоматически”
  • Тип данных для входа: “Имя пользователя и пароль”
  • Имя пользователя: vpnuser (имя, которое указано в файле “chap-secrets” на сервере)
  • Пароль: 1 (так же из файла “chap-secrets”)

После сохранения параметров, в окне VPN появится новое подключение. Щелкаем по нему левой кнопкой мыши и нажимаем “Подключиться”. При успешном соединении с сервером, на значке подключения появится надпись “Подключено”.

Добавляем VPN подключение

В свойствах подключения отображаются внутренние адреса клиента и сервера. В поле “Адрес назначения” указан внешний адрес сервера.

В свойствах подключения отображаются внутренние адреса клиента и сервера. В поле “Адрес назначения” указан внешний адрес сервера.

При установленном соединении внутренний ip-адрес сервера, в нашем случае 172.16.0.1, становится шлюзом по умолчанию для всех исходящих пакетов.

Проверка внешнего адреса компьютера при настройке VPN-соединения

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

OpenVPN сервер

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

Выполним повышение прав текущего пользователя, так как для всех дальнейших действий требуется root доступ.

sudo -s

Устанавливаем необходимые пакеты. Пакет “Easy-RSA” нужен для управления ключами шифрования.

apt install openvpn easy-rsa iptables-persistent

Разрешаем входящие соединения на порт 1194 по протоколу UDP и применяем правила iptables.

sudo iptables -I INPUT -p udp --dport 1194 -j ACCEPT

sudo netfilter-persistent save

Создаем директорию со скопированными файлами из пакета “Easy-RSA” и заходим в неё.

make-cadir ~/openvpn

cd ~/openvpn

Генерируем структуру публичных ключей (PKI).

./easyrsa init-pki

Создаем корневой сертификат удостоверяющего центра (CA).

./easyrsa build-ca

В процессе создания будет предложено установить пароль и запомнить его. Также необходимо ответить на вопросы и ввести информацию о владельце ключа. Вы можете оставить значения по умолчанию, которые указаны в квадратных скобках. Для завершения ввода нажимаем “Enter”.

Генерируем приватный ключ и запрос на сертификат. В качестве аргумента указываем произвольное название, в нашем случае это “vpn-server”.

./easyrsa gen-req vpn-server nopass

Оставляем значение Common Name по умолчанию.

Подписываем сгенерированный запрос на сертификат сервера.

./easyrsa sign-req server vpn-server

На этом шаге отвечаем "yes" для подтверждения подписи, после чего вводим пароль, который был создан при создании корневого сертификата.

На этом шаге отвечаем "yes" для подтверждения подписи, после чего вводим пароль, который был создан при создании корневого сертификата.

Генерируем параметры Диффи-Хеллмана. Эти параметры используются для безопасного обмена ключами между сервером и клиентом.

./easyrsa gen-dh
Генерируем параметры Диффи-Хеллмана. Эти параметры используются для безопасного обмена ключами между сервером и клиентом.

Все необходимые файлы были сгенерированы. Создадим в рабочем каталоге OpenVPN папку “keys” для хранения ключей и скопируем туда созданные файлы.

mkdir /etc/openvpn/keys

sudo cp pki/ca.crt pki/issued/vpn-server.crt pki/private/vpn-server.key pki/dh.pem /etc/openvpn/keys

Настраиваем nat при помощи правил iptables. Создадим файл с названием nat и откроем его на редактирование в в директории "/etc/openvpn/".

#!/bin/sh

# Сбрасываем настройки брандмауэра
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

# (eth0 в нашем случае, может отличаться)
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# (eth0 в нашем случае, может отличаться)
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

# Разрешаем подключения к OpenVPN (eth0 в нашем случае, может отличаться)
iptables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT

iptables -A INPUT -i tun0 -j ACCEPT

# (eth0 в нашем случае, может отличаться):
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT

# (eth0 в нашем случае, может отличаться)
iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Включаем маскарадинг для локальной сети (eth0 в нашем случае, может отличаться)
iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE

# Запрещаем входящие извне
iptables -A INPUT -i eth0 -j DROP

# Запрещаем транзитный трафик извне (eth0 в нашем случае, может отличаться)
iptables -A FORWARD -i eth0 -o tun0 -j DROP

sudo netfilter-persistent save

Сохраняем файл и делаем его исполняемым.

sudo chmod 755 /etc/openvpn/nat

Копируем шаблон конфигурации сервера.

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

Открываем на редактирование файл “/etc/openvpn/server.conf” и убеждаемся в наличии следующих строк, при необходимости корректируем.


#Порт, протокол и интерфейс

port 1194

proto udp

dev tun
#Путь к ключам шифрования

ca /etc/openvpn/keys/ca.crt

cert /etc/openvpn/keys/vpn-server.crt

key /etc/openvpn/keys/vpn-server.key

dh /etc/openvpn/keys/dh.pem
#Алгоритм хэширования sha256

auth SHA256
#Отключаем дополнительное шифрование

#tls-auth ta.key 0
#Сетевые параметры

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist /var/log/openvpn/ipp.txt

push "redirect-gateway def1 bypass-dhcp"

push "dhcp-option DNS 8.8.8.8"

push "dhcp-option DNS 8.8.4.4"
#Делаем пинги каждые 10 секунд для проверки соединения

keepalive 10 120
#Устанавливаем AES-256 шифрование для туннеля

cipher AES-256-GCM
#Понижаем привилегии службы OpenVPN после запуска

user nobody

group nogroup
#Включаем сохранение параметров после перезапуска

persist-key

persist-tun
#Устанавливаем детализацию логирования

verb 3
#Перенаправляем логи

log-append /var/log/openvpn/openvpn.log

#Прописываем запуск установки правил

up /etc/openvpn/nat

Включаем перенаправление трафика на сервере.

sudo sysctl -w net.ipv4.ip_forward=1

echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf

Запускаем службу OpenVPN для применения конфигурации.

systemctl start openvpn@server

Настройка сервера завершена!

Настройка клиента

Заходим на официальный сайт проекта “https://openvpn.net”, переходим в раздел “COMUNITY”.

Заходим на официальный сайт проекта “https://openvpn.net”, переходим в раздел “COMUNITY”.

Пролистываем вниз и скачиваем инсталлятор для своей версии операционной системы. В нашем случае это Windows 11 ARM64.

пролистываем вниз и скачиваем инсталлятор для своей версии операционной системы. В нашем случае это Windows 11 ARM64.

Устанавливаем приложение, оставляя все параметры по умолчанию.


На следующем этапе необходимо подготовить на сервере и передать на компьютер клиента следующие файлы:

  • публичный и приватный ключи;
  • копия ключа центра сертификации;
  • шаблон конфигурационного файла.

Подключаемся к серверу, повышаем права, переходим в созданную нами директорию "~/openvpn".

sudo -s

cd ~/openvpn

Генерируем приватный ключ и запрос на сертификат для клиента. В качестве аргумента указываем произвольное имя, в нашем случае “client1”.

./easyrsa gen-req client1 nopass

Вводим пароль, который мы устанавливали при создании корневого сертификата и оставляем значение Common Name по умолчанию.

Вводим пароль, который мы устанавливали при создании корневого сертификата и оставляем значение Common Name по умолчанию.

Подписываем сгенерированный запрос на сертификат клиента.

./easyrsa sign-req client client1

На этом шаге отвечаем "yes" для подтверждения подписи, после чего вводим пароль, который был создан при создании корневого сертификата.

На этом шаге отвечаем "yes" для подтверждения подписи, после чего вводим пароль, который был создан при создании корневого сертификата.

Для удобства создадим в домашнем каталоге папку “client1” и скопируем в нее все файлы предназначенные для переноса на клиентский компьютер.

mkdir ~/client1

cp pki/issued/client1.crt pki/private/client1.key pki/ca.crt ~/client1/

Скопируем в эту же папку шаблон клиентского конфигурационного файла. При копировании меняем расширение файла на “ovpn”.

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client1/client.ovpn

Изменим владельца каталога “~/client1/” и всех файлов находящихся в нем, для того, чтобы получить возможность перенести их на клиентский компьютер. В нашем случае сделаем владельцем пользователя “mihail”


chown -R mihail:mihail ~/client1

Переходим на клиентский компьютер и копируем с сервера содержимое папки “~/client1/” любым доступным способом, например с помощью утилиты “scp”.

scp -r mihail@[IP_сервера]:/home/mihail/client1 c:\client1

Файлы ключей “ca.crt”, “client1.crt”, “client1.key” можно хранить в любом месте, в нашем случае это папка “c:\Program Files\OpenVPN\keys”, а конфигурационный файл “client.ovpn” переносим в директорию “c:\Program Files\OpenVPN\config”.

Приступаем к конфигурированию клиента. Открываем в блокноте файл “c:\Program Files\OpenVPN\config\client.ovpn” и отредактируем следующие строки

#Сообщаем, что мы являемся клиентом

client
#Интерфейс и протокол так же как на сервере

dev tun

proto udp
#IP адрес сервера и порт

remote ip_адрес_сервера 1194
#сохранение параметров при перезапусках

persist-key

persist-tun
#Путь к ключам
ca “c:\\Program Files\\OpenVPN\\keys\\ca.cert”
cert “c:\\Program Files\\OpenVPN\\keys\\client1.crt”
key “c:\\Program Files\\OpenVPN\\keys\\client1.key”
#Включаем проверку подлинности сервера
remote-cert-tls server
#Отключаем дополнительное шифрование
#tls-auth ta.key 1
cipher AES-256-GCM
auth-nocache
verb 3

Остальные параметры оставляем без изменений.

Сохраняем файл и запускаем клиентское приложение “OpenVPN GUI”.

VPN setup finished

Для подключения к серверу щелкаем правой кнопкой мыши на иконке в трее и выбираем “Подключиться”. При успешном соединении иконка станет зеленого цвета.

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

❮  Предыдущая статья Настройка Wireguard на своем сервере
Следующая статья  ❯ Настройка FTP-сервера

Задайте вопрос

Мы всегда готовы ответить на Ваши вопросы в любое время суток.