Строим виртуальную частную сеть на примере Debian Jessie и Stretch. Подключение клиентов на Windows 10.
OpenVPN: [link]
Хорошая статья про OpenVPN с подробным описанием возможностей и функционала. Полезные топики на LOR'е: | openvpn правила для iptables | Openvpn поднят, не пускает в сеть | Маршрутизация через OpenVPN |
Установка OpenVPN:
Подготавливаем систему и устанавливаем необходимые пакеты.
Проверка интерфейса:
# ls -l /dev/net/tun
crw-rw-rw- 1 root root 10, 200 июн 29 15:56 /dev/net/tun
Обновляем список зеркал и пакеты:
# apt-get update && apt-get upgrade
Устанавливаем:
# apt-get install openvpn
- easy-rsa libpkcs11-helper1 opensc opensc-pkcs11 openvpn
Easy-Rsa:
Размещаем скрипты easy-rsa в директории /etc/openvpn и переходим в рабочий каталог.
# cd /etc/openvpn/ && make-cadir easy-rsa && cd easy-rsa
Certificate Authority: CA центр сертификации
Генерируем и подписываем серверный и клиентский ключи.
Создаем символьную ссылку:
# ln -s openssl-1.0.0.cnf openssl.cnf
Настраиваем параметры ключей и сертификатов:
# nano vars
export KEY_SIZE=2048 # Размер ключа;
export CA_EXPIRE=3650 # Срок действия корневого ключа, CA;
export KEY_EXPIRE=3650 # Срок действия сертификатов;
export KEY_COUNTRY="RU"
export KEY_PROVINCE="RU"
export KEY_CITY="Net"
export KEY_ORG="Center"
export KEY_EMAIL="user@domen"
export KEY_OU="UNNAME"
Инициализируем скрипт vars:
# source ./vars
- Чистим /etc/openvpn/easy-rsa/keys от старых ключей и сертификатов
# ./clean-all
Build-CA:
Выполняем скрипт build-ca для создания центра сертификации:
# ./build-ca
Создаем сертификаты сервера и клиента:
# ./build-key-server server
# ./build-key MTv
- или ключ защищенный паролем: build-key-pass MTv
Генерируем ключ Диффи - Хеллмана:
Параметры протокола Диффи-Хеллмана определяют метод обмена данными между сервером и клиентами OpenVPN. Так-же он позволяет создавать защищенные соединения с пользователями.
# ./build-dh
Cоздаем ключ для tls-аутентификации:
# openvpn --genkey --secret keys/ta.key
Перемещение ключей и сертификатов:
В рабочую директорию "/etc/openvpn".
# cd keys
- Для сервера;
# cp server.crt server.key ca.crt dh2048.pem ta.key /etc/openvpn
- Для клиента;
MTv.crt | MTv.key | ca.crt | ta.key
Конфигурация сервера и клиента OpenVPN:
Рабочие образцы конфигов расположены в "/usr/share/doc/openvpn/examples/sample-config-files/".
Сервер:
Для версии "OpenVPN 2.3.14" необходимо закомментировать ";explicit-exit-notify 1", т.к. эта опция не дает создасться "Tun" интерфейсу. Эта версия используется в репозиториях Debian Jessie. В Strach версия посвежее, "2.4.0" и с ней все нормально.
Открываем образец конфигурационного файла и производим настройку основных параметров.
Важно! Эти параметры заворачивают весь трафик через vpn тунель! Первое правило означает, что шлюзом по умолчанию будет не роутер, а наш OpenVPN сервер. Два других задают DNS серверы.
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 77.88.8.88"
push "dhcp-option DNS 77.88.8.2"
# gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz >/etc/openvpn/server.conf
# nano /etc/openvpn/server.conf
port 1194 # Используемый порт;
proto udp # Выбор рабочего протокола;
dev tun # Интерфейс, ч.з. который будет работать тунель;
ca ca.crt # Корневой CA-сертификат;
cert server.crt # Сертификат сервера;
key server.key # Корневой CA-ключ;
dh dh2048.pem # Параметры Diffie Hellman'а;
topology subnet # Топология сети;
server 10.8.0.0 255.255.255.0 # Пул ip-адресов;
ifconfig-pool-persist ipp.txt # ip-адреса подключившившихся клиентов;
push "redirect-gateway def1 bypass-dhcp" # Перенаправлять default gateway клиентов на vpn-сервер;
# nano /etc/resolv.conf # Берем DNS серверы провайдера, либо используем от Yandex;
push "dhcp-option DNS 77.88.8.88"
push "dhcp-option DNS 77.88.8.2"
keepalive 10 120 # Каждые 10 сек. проверяем соединение с клиентом, если в течении 120 сек. он недоступен, то откючаем от сервера;
tls-auth ta.key 0 # TLS ключ для доп. безопасности, 0-server, 1-client;
auth SHA256 # Аутентификация по ключу;
cipher AES-256-CBC # Тип шифрования;
tls-server
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-128-GCM-SHA256
- Пользователь и группа от которых будет работать демон;
user nobody
group nogroup
persist-key # Не перечитывать файлы ключей при перезапуске туннеля;
persist-tun # Оставить без изменения устройства tun/tap при перезапуске OpenVPN;
verb 3 # Подробность лога от 0 до 9, 0-только кпит. ошибки, 9-дебаг;
;explicit-exit-notify 1 # После рестарта сервера, клиент может автоматически подключиться;
Дополнительные настройки "server.conf" :
В зависимости от желаемого результата, выбираем необходимые параметры.
;client-to-client # Позволяет клиентам видеть друг-друга;
;duplicate-cn # Одновременное подключение нескольких клиентов с одного сертификата/ключа;
;client-config-dir ccd # Расширенная настройка клиентов в директории ccd;
- Сжатие для клиентов, начиная с версии 2.4+;
;compress lz4-v2
;push "compress lz4-v2"
;comp-lzo # Использовать сжатие для совместимости со старыми версиями клиентов;
;max-clients 100 # Кол-во одновременно подключенных клиентов;
;mute 20 # Выводить в лог не более 20 одинаковых последовательных сообщений;
+PSAD:
Если используется "PSAD", то не зыбываем сконфигурировать и его.
# nano /etc/psad/psad.conf
IGNORE_PORTS udp/1194;
# nano /etc/psad/auto_dl
10.8.0.0/24 0;
77.88.8.8 0;
77.88.8.1 0;
END:
С настройкой сервера готово. Сделаем рестарт демона и проверим, поднялся ли интерфейс "Tun".
# /etc/init.d/openvpn restart
Чтобы работала команда ifconfig, установим пакет net-tools:
# apt-get install net-tools
- Если без установки, то 2ой командой;
ifconfig или ip a
NAT:
Добавляем правила в "iptables" и если все ОК, то прописываем их в "rc.local". Это позволит правилам сохраниться после перезапуска системы.
# nano /etc/rc.local
iptables -I INPUT -p udp --dport 1194 -j ACCEPT # Разрешаем подключаться к нашему OpenVPN серверу;
iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT # Разрешаем только установленные и связанные с ними соединения;
- Разрешаем всем openvpn-клиентам соединяться с интернетом;
iptables -I FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -o ens0 -s 10.8.0.0/24 -j MASQUERADE
sysctl.conf:
Включаем форвардинг, т.е. обмен между сетевыми интерфейсами.
# nano /etc/sysctl.conf
net.ipv4.ip_forward=1
# sysctl -p
Клиент:
Создадим конфигурационный файл клинта. Пример конфига можно взять в образцах.
Клиентские ключи и сертификаты:
# ls /etc/openvpn/easy-rsa/keys
- У каждого пользователя свои;
MTv.crt - Пользовательский сертификат;
MTv.key - Пользовательский ключ;
- Общие для всех пользователей;
ca.crt - Сертификат удостоверяющего центра;
ta.key - Ключ шифрования OpenVPN сервера;
Конфиг клиента:
Могут быть 2-способа. "1-ый", сертификаты и ключи находятся в файле ".ovpn". "2-ой", сертификаты и ключи лежат отдельно, к ним в конфиге указан путь.
client
proto udp
remote внешний_ip_сервера
dev tun
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA256
auth-nocache
cipher AES-256-CBC
tls-client
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-128-GCM-SHA256
setenv opt block-outside-dns
verb 3
<ca>
- Вставляем содержимое ca.crt
</ca>
<cert>
- Вставляем содержимое MTv.crt
</cert>
<key>
- Вставляем содержимое MTv.key
</key>
<tls-auth>
- Вставляем содержимое tls-auth.key
</tls-auth>
На этом все!