VPN - набор технологий, которые позволяют организовать логическую сеть поверх других. Чаще всего в роли других сетей выступает Интернет. Если простыми словами, то с помощью VPN можно организовать единую локальную сеть разделенных интернетом сегментов сети. Так как Интернет - общедоступная сеть, то трафик внутри созданной логической сети шифруется различными средствами для организации защиты передаваемых данных.
OpenVPN - одна из реализаций технологии VPN с открытым исходным кодом, а значит бесплатная. С ее помощью можно объединять в единую сеть компьютеры в том числе и находящиеся за NAT, что очень удобно. Openvpn поддерживает все популярные на сегодняшний день операционные системы, в том числе и Windows.
Среди малого и среднего бизнеса сервер openvpn очень популярен благодаря своей бесплатности, кроссплатформенности, быстроте и гибкости настроек. Лично я предпочитаю именно его для объединения удаленных локальных сетей. Его же предпочитают использовать vpn-провайдеры для оказания своих услуг по организации анонимного серфинга в интернете.
Объединение офисов с помощью openvpn
У нас имеется офис с шлюзом CentOS 8, на который мы будем устанавливать openvpn сервер. И есть филиал с таким же шлюзом, где будет установлен openvpn client для подключения сети филиала к офису:
Имя | Centos-server | PC1 | Centos-client | PC2 |
Внешний ip | 10.20.1.38 | 192.168.13.188 | ||
Локальный ip | 192.168.220.1 | 192.168.220.10 | 192.168.150.1 | 192.168.150.10 |
Комментарий | Сервер openvp и шлюз в офисе | Компьютер с Windows 10 в офисе | Клиент openvp и шлюз в филиале | Компьютер с Windows 10 в филиале |
В данном случае сервер в филиале может быть без внешнего белого IP адреса, это не принципиально, все будет работать и так. Нам необходим только один внешний IP адрес на сервере. Все остальные клиенты могут быть за NAT, это не помешает успешному объединению локальных сетей.
Наша задача в данном случае будет сводиться к тому, чтобы компьютеры PC1 и PC2 увидели друг друга и могли совместно использовать свои сетевые ресурсы в обе стороны. То есть как за сервером, так и за клиентом openvpn мы должны видеть сеть.
Хочу отметить, что конфигурация openvpn кроссплатформенная и отлично переносится с одной системы на другую, необходимо только пути проверить, так как в каждой системе они свои. Моя инструкция подойдет для настройки openvpn сервера на любой операционной системе, отличаться будут только специфичные для каждой системы команды установки и проверки, но сама суть настройки vpn будет такой же.
У меня на стенде 10.20.1.38 и 192.168.13.188 по сути внешние IP адреса, которые смотрят в интернет.
Где скачать openvpn
Прежде чем приступить к установке и настройке, давайте посмотрим, где можно скачать все, что нам понадобится в нашей работе. Свежие и актуальные версии всегда можно найти на страничке downloads официального сайта.
Исходники | openvpn-2.5.0.tar.gz |
Openvpn client Windows 32 bit | OpenVPN-2.5.0-I601-x86.msi |
Openvpn client Windows 64 bit | OpenVPN-2.5.0-I601-amd64.msi |
Openvpn Portable | openvpn-portable-win64-setup.exe |
Сразу же прокомментирую по поводу portable версии openvpn. На текущий момент официальной портированной версии openvpn не существует. Та версия, на которую я дал ссылку, найдена мной в гугле и сделана отдельной командой Portapps. Это наиболее актуальная и свежая версия. До нее я использовал OpenVPN Portable с sourceforge, но она сильно устарела, хотя кое-где может и работать. Я специально по этому поводу почитал форум Community Openvpn и нашел там неутешительные ответы. Разработчики говорят, что portable версия openvpn не поддерживается и выпускать ее они даже не собираются. А жаль, было бы удобно получить портированную версию от них.
Для Linux систем дистрибутив проще всего получить в системных репозиториях и устанавливать с помощью стандартных установщиков пакетов.
Установка openvpn на CentOS 8
Теперь вернемся к нашей задаче. Я подразумеваю, что у вас уже есть установленный и настроенный сервер CentOS. Если еще нет, то можете воспользоваться моими материалами. В них раскрыты следующие темы:
Устанавливаем openvpn на оба наших сервера, которые являются шлюзами в своих сегментах сети. Первым делом подключаем репозиторий epel к centos:
1 |
# yum install epel-release |
Выполняем непосредственно установку:
1 |
<span class="crayon-v"># yum </span><span class="crayon-e">install </span><span class="crayon-v">openvpn</span> |
Создание сертификатов
Для работы сервера openvpn необходимо создать соответствующие сертификаты. Для этого воспользуемся программой Easy-RSA, которая генерирует сертификаты с помощью утилиты openssl. Все работы в этом разделе выполняем только на centos-server.
Создаем директорию для ключей:
1 |
# mkdir /etc/openvpn/keys |
Скачиваем и устанавливаем утилиту Easy-RSA. Ссылку на последнюю версию можно посмотреть на github.
1 2 |
# cd /etc/openvpn/keys # wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz |
Если получаете сообщение:
1 |
-bash: wget: command not found |
То устанавливаете wget:
1 |
# yum install wget |
Продолжаем:
1 2 |
# tar xzvf EasyRSA-3.0.8.tgz && mv EasyRSA-3.0.8 easyrsa && rm -f EasyRSA-3.0.8.tgz # cd /etc/openvpn/keys/easyrsa |
Создаем структуру публичных PKI ключей:
1 2 3 4 5 6 7 |
# mv vars.example vars # ./easyrsa init-pki Note: using Easy-RSA configuration from: /etc/openvpn/keys/easyrsa/vars init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /etc/openvpn/keys/easyrsa/pki |
Создайте удостоверяющий центр CA:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# ./easyrsa build-ca Note: using Easy-RSA configuration from: /etc/openvpn/keys/easyrsa/vars Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 Enter New CA Key Passphrase: Re-Enter New CA Key Passphrase: Generating RSA private key, 2048 bit long modulus (2 primes) ........................+++++ ................................................+++++ e is 65537 (0x010001) You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]:serveradmin.ru CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /etc/openvpn/keys/easyrsa/pki/ca.crt |
Не забудьте указанный пароль. Его нужно будет вводить каждый раз при создании нового сертификата openvpn.
Мы получили 2 файла:
- /etc/openvpn/keys/easyrsa/pki/private/ca.key
- /etc/openvpn/keys/easyrsa/pki/ca.crt
Первый ключ секретный, его нужно оставить на сервере и никому не отдавать. Второй - открытый, его мы будем вместе с пользовательскими сертификатами передавать клиентам.
Создаем запрос сертификата для сервера без пароля с помощью опции nopass, иначе придется вводить пароль с консоли при каждом запуске сервера:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# ./easyrsa gen-req server nopass Note: using Easy-RSA configuration from: /etc/openvpn/keys/easyrsa/vars Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 Generating a RSA private key .........+++++ .....................+++++ writing new private key to '/etc/openvpn/keys/easyrsa/pki/easy-rsa-1861.5z2vXi/tmp.hy40wb' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [server]: Keypair and certificate request completed. Your files are: req: /etc/openvpn/keys/easyrsa/pki/reqs/server.req key: /etc/openvpn/keys/easyrsa/pki/private/server.key |
Подписываем запрос на получение сертификата у нашего CA:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# ./easyrsa sign-req server server Note: using Easy-RSA configuration from: /etc/openvpn/keys/easyrsa/vars Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 825 days: subject= commonName = server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes Using configuration from /etc/openvpn/keys/easyrsa/pki/easy-rsa-1888.qaUUvJ/tmp.Y4X2zV Enter pass phrase for /etc/openvpn/keys/easyrsa/pki/private/ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'server' Certificate is to be certified until Apr 18 15:34:20 2023 GMT (825 days) Write out database with 1 new entries Data Base Updated Certificate created at: /etc/openvpn/keys/easyrsa/pki/issued/server.crt |
В процессе работы скрипта вводим пароль от CA, который указывали раньше и отвечаем на вопрос yes. Мы получили подписанный удостоверяющим центром сертификат для сервера - /etc/openvpn/keys/easyrsa/pki/issued/server.crt
Нам еще пригодится ключ Диффи-Хелмана, генерируем его:
1 |
# ./easyrsa gen-dh |
По завершению работы скрипта получаем файл dh сертификата - /etc/openvpn/keys/easy-rsa/pki/dh.pem.
Копируем в папку /etc/openvpn/server/ все необходимые для работы openvpn сервера файлы:
1 2 3 4 |
# cp pki/ca.crt /etc/openvpn/server/ca.crt # cp pki/dh.pem /etc/openvpn/server/dh.pem # cp pki/issued/server.crt /etc/openvpn/server/server.crt # cp pki/private/server.key /etc/openvpn/server/server.key |
Так же сгенерируем еще один ключ, который на пригодится для шифрования TLS control channel, что повышает безопасность.
1 |
# openvpn --genkey --secret /etc/openvpn/server/tc.key |
Создадим ключ для клиента openvpn:
1 2 |
# ./easyrsa gen-req client01 nopass # ./easyrsa sign-req client client01 |
Процедура аналогична созданию сертификата для сервера. Так же вводим пароль, отвечаем yes. В результате получаем подписанный сертификат клиента:
- /etc/openvpn/keys/easy-rsa/pki/issued/client01.crt
- /etc/openvpn/keys/easy-rsa/pki/private/client01.key
Команды gen-req и sign-req можно объединить в одну с помощью build-client-full примерно так:
1 |
# ./easyrsa build-client-full client01 nopass |
Клиенту, которым у нас является шлюз филиала, нужно будет передать следующий набор файлов - client01.crt, client01.key, ca.crt, tc.key. Либо использовать единый файл конфигурации клиента, который включает в себя в том числе и сертификаты. Я отдельно покажу как это сделать.
Настройка openvpn на CentOS 8
Теперь приступаем к настройке. Создаем файл конфигурации openvpn:
1 |
# mcedit /etc/openvpn/server/server.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
port 13555 # я предпочитаю использовать нестандартные порты для работы proto udp # протокол может быт и tcp, если есть необходимость в этом dev tun ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/server.crt key /etc/openvpn/server/server.key dh /etc/openvpn/server/dh.pem auth SHA256 # выбор алгоритма шифрования для аутентификации cipher AES-256-CBC # выбор алгоритма шифрования всех передаваемых через vpn данных tls-version-min 1.2 # ограничиваем минимальную версию протокола tls tls-crypt tc.key # ключ для шифрования TLS control channel server 10.0.0.0 255.255.255.0 # подсеть для туннеля, может быть любой route 192.168.150.0 255.255.255.0 # указываем подсеть, к которой будем обращаться через vpn ifconfig-pool-persist ipp.txt # файл с записями соответствий clinet - ip client-to-client # позволяет клиентам openvpn подключаться друг к другу client-config-dir /etc/openvpn/ccd # директория с индивидуальными настройками клиентов keepalive 10 120 comp-lzo # если используется протокол tcp, сжатие надо отключить explicit-exit-notify 1 # если используется протокол tcp, поменять на 0 persist-key persist-tun status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log user nobody group nobody verb 3 |
Подробное описание всех параметров можно посмотреть в официальной wiki.
Создаем необходимые директории:
1 |
# mkdir /etc/openvpn/ccd && mkdir /var/log/openvpn |
Создаем файл конфигурации клиента в папке, указанной в параметре client-config-dir :
1 |
mcedit /etc/openvpn/ccd/client01 |
1 |
iroute 192.168.150.0 255.255.255.0 |
Здесь client01 - имя сертификата пользователя. Параметр iroute означает, что за подсеть 192.168.150.0/24 отвечает именно этот клиент. Если в openvpn не передать эту настройку, то сеть, находящуюся за клиентом, будет не видно, при этом сам клиент будет видеть всю сеть, которую обслуживает сервер. Такой вариант подходит для подключения удаленных сотрудников.
Выбор устройства openvpn - TAP или TUN
Чуть подробнее остановлюсь на этом моменте. В моей конфигурации я использую tun интерфейс. В чем отличие tun от tap можно прочитать на википедии. Прокомментирую своими словами. Если вам нужно объединить две разные локальные сети в одну условно общую, но с разной адресацией, то вам нужен tun. То есть в нашем случае мы объединяем две сети 192.168.220.0/24 и 192.168.150.0/24 для взаимного совместного доступа.
Если же у вас стоит задача объединить 2 удаленные сети в единое адресное пространство, например сделать и в офисе, и в филиале единую сеть 192.168.220.0/24, то тогда бы мы использовали tap интерфейс и указывали бы на компьютерах в обоих сетях не пересекающиеся адреса из одной подсети. То есть оба офиса окажутся в одном широковещательном домене и смогут передавать данные с помощью широковещания на канальном уровне сетевой модели OSI. В таком состоянии openvpn работает в режиме моста. По мне так удобнее первый вариант. Я еще не сталкивался с задачей, где бы мне нужен был tap. Вернемся к настройке.
Запускаем сервер:
1 |
# systemctl start openvpn-server@server.service |
Если сервер не запустился, а в логе ошибка:
1 |
TCP/UDP: Socket bind failed on local address [undef]: Permission denied |
Значит вам нужно либо правильно настроить, либо отключить SELinux. В данном материале я не хочу касаться настройки SELinux, поэтому просто отключаем его:
1 |
# mcedit /etc/sysconfig/selinux |
меняем значение
1 |
SELINUX=disabled |
Чтобы изменения вступили в силу, выполняет:
1 |
# setenforce 0 |
Пробуем снова запустить openvpn сервер:
1 |
# systemctl start openvpn-server@server.service |
Если опять видите какие-то ошибки, то проверяйте лог файлы /var/log/openvpn/openvpn.log и /var/log/messages. Там почти наверняка будет указано, в чем проблема. Проверяем, запустился сервер или нет:
1 2 3 |
# netstat -tulnp | grep 13555 udp 0 0 0.0.0.0:13555 0.0.0.0:* 1900/openvpn |
Отлично, запустился на указанном порту.
Добавляем сервер openvpn в автозагрузку:
1 2 3 |
# systemctl enable openvpn-server@server.service Created symlink /etc/systemd/system/multi-user.target.wants/openvpn-server@server.service → /usr/lib/systemd/system/openvpn-server@.service. |
Теперь внимательно проверим корректность всех настроек на сервере. Сначала посмотрим информацию о сетевых интерфейсах:
Обращаем внимание на адреса туннеля vpn. Теперь проверяем статические маршруты:
Тут тоже все в порядке. Траффик для подсети филиала 192.168.150.0/24 будет маршрутизироваться в тоннель. С настройкой сервера закончили, идем теперь на клиент.
Настройка firewall (iptables) для openvpn
Рассмотрю отдельно вопрос настройки iptables для работы openvpn. В целом, там нет никаких нюансов в самих правилах. Нам необходимо открыть входящий порт для подключения к серверу, разрешить транзитный трафик и включить nat для openvpn интерфейсов. Проблемы обычно бывают в реализации настроек самого firewall.
Если вы используете нативные iptables, то нужны будут следующие правила, разрешающие весь трафик в и из vpn туннелей.
1 2 3 4 5 |
iptables -A INPUT -i ens18 -p udp --dport 13555 -j ACCEPT iptables -A INPUT -i tun+ -j ACCEPT iptables -A OUTPUT -o tun+ -j ACCEPT iptables -A FORWARD -i tun+ -j ACCEPT $IPT -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE |
Не забудьте разместить их выше правил блокировки, если таковые у вас имеются. Если вы используете firewalld для настройки фаервола, то набор правил для openvpn будет следующий:
1 2 3 4 5 6 |
firewall-cmd --add-port="13555"/"udp" firewall-cmd --zone=trusted --add-source=10.0.0.0/24 firewall-cmd --permanent --add-port="13555"/"udp" firewall-cmd --permanent --zone=trusted --add-source=10.0.0.0/24 firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -s 10.0.0.0/24 -j MASQUERADE firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -s 10.0.0.0/24 -j MASQUERADE |
Если нужно как-то сегментировать доступ в vpn сети, то настраивайте более точечно с использованием конкретных адресов и подсетей. Тонкая настройка правил iptables не тема данной статьи, поэтому я не буду на этом подробно останавливаться.
Сам я обычно использую нативные iptables и управляю ими с помощью скрипта. я использую следующий итоговый набор правил всего сервера для iptables.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
#!/bin/bash export IPT="iptables" # Внешний интерфейс export WAN=ens18 export WAN_IP=10.20.1.38 # Локальная сеть export LAN1=ens19 export LAN1_IP_RANGE=192.168.220.1/24 # Очищаем правила $IPT -F $IPT -F -t nat $IPT -F -t mangle $IPT -X $IPT -t nat -X $IPT -t mangle -X # Запрещаем все, что не разрешено $IPT -P INPUT DROP $IPT -P OUTPUT DROP $IPT -P FORWARD DROP # Разрешаем localhost и локалку $IPT -A INPUT -i lo -j ACCEPT $IPT -A INPUT -i $LAN1 -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT $IPT -A OUTPUT -o $LAN1 -j ACCEPT # Рзрешаем пинги $IPT -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT $IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT $IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT $IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT # Разрешаем исходящие подключения сервера $IPT -A OUTPUT -o $WAN -j ACCEPT # разрешаем установленные подключения $IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT # Отбрасываем неопознанные пакеты $IPT -A INPUT -m state --state INVALID -j DROP $IPT -A FORWARD -m state --state INVALID -j DROP # Отбрасываем нулевые пакеты $IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP # Закрываемся от syn-flood атак $IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP $IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP # Разрешаем доступ из локалки наружу $IPT -A FORWARD -i $LAN1 -o $WAN -j ACCEPT # Закрываем доступ снаружи в локалку $IPT -A FORWARD -i $WAN -o $LAN1 -j REJECT # Разрешаем OpenVPN $IPT -A INPUT -i tun+ -j ACCEPT $IPT -A OUTPUT -o tun+ -j ACCEPT $IPT -A FORWARD -i tun+ -j ACCEPT # Разрешаем доступ из внутренней сети в vpn $IPT -A FORWARD -i $LAN1 -o tun+ -j ACCEPT # Включаем NAT $IPT -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE $IPT -t nat -A POSTROUTING -o $WAN -s $LAN1_IP_RANGE -j MASQUERADE # открываем доступ к SSH $IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT # Открываем порт для openvpn $IPT -A INPUT -i $WAN -p udp --dport 13555 -j ACCEPT # Сохраняем правила /sbin/iptables-save > /etc/sysconfig/iptables |
Это минимальный набор правил для шлюза локальной сети с openvpn на борту. . Для сервера клиента openvpn набор правил будет точно такой же, только ip адреса, подсети и интерфейсы будут другие.
Настройка в CentOS клиента openvpn
На centos-client не забываем настроить или отключить SELinux. Устанавливаем openvpn:
1 |
# yum install openvpn |
Создаем в директории /etc/openvpn/client/ файл конфигурации client.conf:
1 |
# mcedit /etc/openvpn/client/client.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
dev tun proto udp remote 10.20.1.38 13555 client resolv-retry infinite ca /etc/openvpn/client/ca.crt cert /etc/openvpn/client/client01.crt key /etc/openvpn/client/client01.key tls-crypt /etc/openvpn/client/tc.key route 192.168.220.0 255.255.255.0 remote-cert-tls server auth SHA256 cipher AES-256-CBC persist-key persist-tun resolv-retry infinite nobind comp-lzo verb 3 status /var/log/openvpn/openvpn-status.log 1 status-version 3 log-append /var/log/openvpn/openvpn-client.log |
Не забываем скопировать в /etc/openvpn/client/ сохраненные ранее ключи ca.crt, client01.crt, client01.key и tc.key.
Обращаю внимание на параметр route в данном конфиге. Его можно здесь не указывать, сделав конфиг более унифицированным для множества клиентов. Вместо этого данную настройку можно передавать с сервера openvpn, указав в файле настроек клиента параметр push route следующим образом:
1 |
push "route 192.168.220.0 255.255.255.0" |
Создаем каталог для логов:
1 |
# mkdir /var/log/openvpn |
Запускаем openvpn client:
1 |
# systemctl start openvpn-client@client.service |
Добавляем в автозагрузку:
1 |
# systemctl enable openvpn-client@client.service |
Теперь смотрим картину сетевых настроек на клиенте:
Ну и маршруты глянем заодно:
Все в порядке, подключение к vpn серверу есть, маршруты прописаны верно. Как вы видите, трафик к удаленной сети 192.168.220.0.24 пойдет через vpn туннель. Маршрут для него openvpn поднял автоматически в соответсвии со своими настройками на клиенте или сервере.
В принципе, этого уже достаточно, чтобы трафик забегал в обе стороны из одной подсети в другую. Но для этого у вас должны быть соответствующим образом настроены сами шлюзы, фаерволы на них, маскарадинг, в том числе на интерфейсе tun. Как это можно сделать, я приводил выше в примерах своих настроек iptables.
Перед этим напомню важный момент, если вдруг вы с нуля настраиваете шлюз и не проверили его в реальной работе. Для роутинга трафика между сетевыми интерфейсами, необходимо добавить строку:
1 |
net.ipv4.ip_forward = 1 |
в файл /etc/sysctl.conf и применить настройку:
1 |
# sysctl -p |
Если у вас этого не сделано, то трафик между интерфейсами ходить не будет.
Если ваш openvpn клиент не подключается, то в первую очередь проверяйте настройки firewall - входящие подключения к серверу и исходящие клиента. Обратите внимание на номер порта и тип (TCP или UDP) если вы их меняли. У меня были затупы, когда никак не мог разобраться, почему нет соединения. Оказывалось, что я менял порт c UDP на TCP, но по привычке на фаерволе оставлял UDP.
Теперь давайте проверим, как бегают пакеты в нашей vpn сети. Заходим на centos-client (192.168.150.1) и пингуем centos-server (192.168.220.1) и pc1 (192.168.220.10):
Заходим на pc2 (192.168.150.10) и пингуем centos-server и pc1:
Теперь в обратную сторону. Заходим на pc1 (192.168.220.10) и пингуем centos-client (192.168.150.1) и pc2 (192.168.150.10):
Как видите, связь настроена в обе стороны. Если у вас что-то где-то не пингуется, то смотрите в первую очередь на наличие маршрутов на самих серверах с openvpn, а так же на настройки firewall. Проблемы могут быть только здесь. Ну и не забудьте настроить windows firewall на самих виндовых машинах. И помните про антивирусы на них. А то бывает кучу времени потратишь на поиск проблемы, а ее на самом деле не было. Пинги не работали, потому что тупо запрещены на виндовых машинах.
В завершение темы объединения удаленных офисов, проверим доступ к общим сетевым ресурсам. Расшарим папку на PC1 и зайдем на нее с PC2:
Все получилось. Мы реально объединили удаленные офисы в единую связную сеть с помощью openvpn сервера. Дальше поверх vpn можно настраивать работу остальных сервисов. Например, объединить 2 сервера asterisk или контроллеры домена.
Настройка openvpn client в windows
Теперь рассмотрим вариант подключения к нашей логической сети удаленного сотрудника с рабочей станцией windows. Допустим, мы объединили наши офисы в единую сеть, доступ работает в обе стороны. Нам необходимо, чтобы удаленный пользователь смог подключиться либо к обоим сетям, либо выборочно только к основному офису, либо только к филиалу.
Первым делом нам надо выпустить для клиента сертификаты и подготовить файл конфигурации. Для того, чтобы упростить эти процессы, я подготовил небольшой скрипт, который выпускает сертификат по заданному имени и сразу добавляет его в файл конфигурации. Таким образом нам надо будет передать клиенту только конфиг.
Скрипт по генерации сертификата и конфига add_vpn_user.sh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
#!/bin/bash proto="udp" port="13555" server="10.20.1.38" confdir="/etc/openvpn/users-conf" echo -n "Enter user name: " read user echo "Protect the private key with a password?" echo " 1) No, passwordless client" echo " 2) Yes, use a password for the client" until [[ $pass =~ ^[1-2]$ ]]; do read -rp "Select an option [1-2]: " -e pass done clientexist=$(tail -n +2 /etc/openvpn/keys/easyrsa/pki/index.txt | grep -c -E "/CN=$user\$") if [[ $clientexist == '1' ]]; then echo "" echo "The specified client name was already found in easy-rsa" exit else cd /etc/openvpn/keys/easyrsa/ || return case $pass in 1) ./easyrsa build-client-full "$user" nopass ;; 2) ./easyrsa build-client-full "$user" ;; esac echo "Client $user added." fi touch /etc/openvpn/ccd/$user mkdir -p $confdir echo "dev tun proto $proto remote $server $port client resolv-retry infinite remote-cert-tls server auth SHA256 cipher AES-256-CBC persist-key persist-tun resolv-retry infinite nobind comp-lzo verb 3" > $confdir/$user.ovpn { echo "<ca>" cat "/etc/openvpn/keys/easyrsa/pki/ca.crt" echo "</ca>" echo "<cert>" awk '/BEGIN/,/END/' "/etc/openvpn/keys/easyrsa/pki/issued/$user.crt" echo "</cert>" echo "<key>" cat "/etc/openvpn/keys/easyrsa/pki/private/$user.key" echo "</key>" echo "<tls-crypt>" cat "/etc/openvpn/server/tc.key" echo "</tls-crypt>" } >> $confdir/$user.ovpn |
Скрипт делает следующие операции:
- Проверяет, есть ли уже пользователь с указанным именем. Если есть, то завершает работу.
- Выпускает и подписывает сертификат пользователя, давая возможность выбрать, указывать пароль для защиты приватного ключа или нет.
- Создает пустой файл для серверных настроек пользователя в ccd директории. Параметры туда нужно будет добавить вручную, если они нужны.
- Создает готовый конфиг .ovpn, куда включены параметры подключения и все необходимые сертификаты и ключи.
Дальше редактируем файл конфигурации на сервере openvpn для этого клиента:
1 2 3 4 |
# cd /etc/openvpn/ccd # mcedit user08 push "route 192.168.220.0 255.255.255.0" push "route 192.168.150.0 255.255.255.0" |
Этими параметрами мы передаем клиенту маршруты к обоим сетям офисов. Если нужно подключать клиента только к какой-то одной сети, то оставляйте одну сеть, вторую удаляйте. Обращаю внимание на еще один факт. В конфигурации openvpn сервера у нас уже добавлен маршрут для 192.168.220.0, так что он в любом случае будет добавлен всем клиентам, которые будут подключаться к этому серверу.
Если вы хотите, чтобы весь трафик клиента заворачивался автоматически в vpn туннель, по сути подменяя его внешний ip адрес адресом vpn сервера, то добавьте следующий параметр в конфиг клиента:
1 |
push "redirect-gateway def1 bypass-dhcp" |
Теперь нужно скачать openvpn client под нашу версию windows. Ссылки для скачивания я давал в самом начале статьи. Дальше выполняем установку клиента. Обращаю внимание, что для полной установки понадобятся права администратора:
Приступаем к настройке клиента openvpn в windows. Для этого нам понадобится файл конфигурации, который мы создали ранее. Заберите его любым подходящим способом. Например, с помощью WinSCP. Файл конфигурации openvpn клиента будет выглядеть примерно так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
dev tun proto udp remote 10.20.1.38 13555 client resolv-retry infinite route 192.168.220.0 255.255.255.0 remote-cert-tls server auth SHA256 cipher AES-256-CBC persist-key persist-tun resolv-retry infinite nobind comp-lzo verb 3 <ca> -----BEGIN CERTIFICATE----- MIIDVDCCAjygAwIBAgIUBPs8jwyy1zXzzPxXwsy8Zym6TRcwDQYJKoZIhvcNAQEL BQAwGTEXMBUGA1UEAwwOc2VydmVyYWRtaW4ucnUwHhcNMjEwMTE1MDQyMjM3WhcN MzEwMTEzMDQyMjM3WjAZMRcwFQYDVQQDDA5zZXJ2ZXJhZG1pbi5ydTCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMzWGWWY1ly8goyiLJrSWm9jwA7L/lL1 ItwOU3IJbA1FUJkZN4o2xnrzzcjYnpAauF/JBoUGXPPn8tbfOxAw0ScrwK2041N5 j3OgjtMJDa64WBfW8JhSu2qMWFkE6MMyl254nzRQWX1xp7W6T+TevvBFqbwlQf6B 34HqNTcsBB0w98L/2+jndYEA73+5/WIUj48GQl3qxlbF7mebPcnJ9uY4R7ypX7Dv EsdJc0N5Ccn7knBdDkPLu+cy6c2W5QBHYVp+ZJSvZyGzpKgv39RaChDqM3+Ak+i2 C0U8DY8XZIrh93hH//6FpzH+cFLspOeu95k2qg+2FKgqTlAfkS82JtsCAwEAAaOB kzCBkDAdBgNVHQ4EFgQUjSVPyvZ1R1/lDApbcielAyjLrFMwVAYDVR0jBE0wS4AU jSVPyvZ1R1/lDApbcielAyjLrFOhHaQbMBkxFzAVBgNVBAMMDnNlcnZlcmFkbWlu LnJ1ghQE+zyPDLLXNfPM/FfCzLxnKbpNFzAMBgNVHRMEBTADAQH/MAsGA1UdDwQE AwIBBjANBgkqhkiG9w0BAQsFAAOCAQEAD9OnpuyAypQ3NXDKp4gCp/vTmfJtYZmf 1fJ4qIAhuxfh4dOzuWEEGH/SOFj1WLimS0DhKPedo4NxwEvl3mfX15BVVg4l+64l eEDrKgYQqCZe+uTM1kjy9910rLBu9k5HlMJN/pdtl9Weg9Xl7HIM2icnnLgaxvid iyywlH0PjCOAB3cYh26yplqxF/etgin2EYBsws+9wuKsp07lxGHr6K8BpNfhb7FJ kHqs6No1N3OvgY0NVICEEjdfSjRZoWenuwbUWQI9upkDJu3fwb2DedR5UbRFiUsA thpky1K16oYpRAIEKSWKjcC16Zf0kE+vOVEXU6VSArpLx2DEE2LHJw== -----END CERTIFICATE----- </ca> <cert> -----BEGIN CERTIFICATE----- MIIDWzCCAkOgAwIBAgIRAM4vdyTPpevleeccthmYizQwDQYJKoZIhvcNAQELBQAw GTEXMBUGA1UEAwwOc2VydmVyYWRtaW4ucnUwHhcNMjEwMTE1MTYwNzA1WhcNMjMw NDIwMTYwNzA1WjARMQ8wDQYDVQQDDAZ1c2VyMDUwggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQDUW+fSTJZFWoisj3gTHg797lIqhnbebczYY6GIPALqy37Q TBsyzeaCA4pt/1PKe7PMafxrVc9nu+bwEdR1OynN0EJppujb1AkqVWsF197qoCoD wCNfzcKOcuVLOJzfPGbQrUth2yMCJJ+hT39P+Z8ZPwhks2lR29FqwzDJFObBfA7F aLl9JI5wSX+imz0WSYKhkrBA9PUg3UAJ9cDjY3p3Y6m4QI0R49Hh5PJpJ4z0xRXI iCl2rCvLbkxTiUZoDMfsAO9rYKMb0zVvWtnz+YuJVGlck7AGTrPMeBC92u5dNo+h YS1IWbQdu8LgwXCMaWwscEAp50VErVMoTO1h6ut/AgMBAAGjgaUwgaIwCQYDVR0T BAIwADAdBgNVHQ4EFgQUfT6l/W9IvkNnSKrzJYHYtCxoBhowVAYDVR0jBE0wS4AU jSVPyvZ1R1/lDApbcielAyjLrFOhHaQbMBkxFzAVBgNVBAMMDnNlcnZlcmFkbWlu LnJ1ghQE+zyPDLLXNfPM/FfCzLxnKbpNFzATBgNVHSUEDDAKBggrBgEFBQcDAjAL BgNVHQ8EBAMCB4AwDQYJKoZIhvcNAQELBQADggEBAGPjghLJpB55n6ioyT8Jzw5l AiXW/9FyNDMN6zWF3wrkHvZznLZWfOXnTmZdnh8icvzieUngUHoKSgSgAJDJNWp1 KVQ4pgts9g62qerYzsLVS+1HIBSYLul/W336sma2YsstDNBrUpZKhFwwl0J1EeGY 7SvdBSE0ysxia3NxT3LPoziQ0FIr7GLT1KosOTO6JzKRHgDzPkW5njHioaRyKTMN ahKc9ESW3/ShgQndoYldXQTs4LCOYrSkspzf3651I1XnQkwb+jofvC0Sba3YXnXy tROkDsB0lr3p4Wmne+oIj8A4NcNCb3HWimMVfbhzHvqx8rBhnAdmpLhyLjyNgc0= -----END CERTIFICATE----- </cert> <key> -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDUW+fSTJZFWois j3gTHg797lIqhnbebczYY6GIPALqy37QTBsyzeaCA4pt/1PKe7PMafxrVc9nu+bw EdR1OynN0EJppujb1AkqVWsF197qoCoDwCNfzcKOcuVLOJzfPGbQrUth2yMCJJ+h T39P+Z8ZPwhks2lR29FqwzDJFObBfA7FaLl9JI5wSX+imz0WSYKhkrBA9PUg3UAJ 9cDjY3p3Y6m4QI0R49Hh5PJpJ4z0xRXIiCl2rCvLbkxTiUZoDMfsAO9rYKMb0zVv Wtnz+YuJVGlck7AGTrPMeBC92u5dNo+hYS1IWbQdu8LgwXCMaWwscEAp50VErVMo TO1h6ut/AgMBAAECggEANFPVQu/WU46kgQj1SJiujwnru0jY/6RExsl+I0jOWzb7 r64hQZqVA1KGCObSqeFjg6pWJcjGS8R0epGaLaz/dxSrWMdlN83+2CymK5Fu/5ep 4rS0wsW7/Ef5kliH50ZF+4PIQHu0G7IUl7Y0I+vZtWnf0piXCjHFX65rVhFNbz2E iC1XcpbgYV9/YisTniT815hTt2MVGCs64Vf5gt9TEwTD0GTEj9PX1mnafSvnHH9l cs/6/g9Jgx4c+G3JTlks7kZB+AaHiQG46eR42lyo2kHRwYeO44LYvJYmG+wL1S+2 q9Kwy+7x4a2uqPmdQ/ggN4m+TGJBwJExBQA+KJHNoQKBgQD0kvQhIAetQNQEXSJr HvZ+VKuA85vl3ODhIYSJse+wHGpOusvzsQFYb5fdJlEHTxrScDjfLRJn7cnyYzGt pAHXY8D4E/hCZ53CgSs8S3F0FgVSITT5P8MftIu+ydbM+365n9qkIb7kmh8qEOaa C/2NCWTWHwHDmPZ52kVME4CPbwKBgQDeR6r9mRvhpCJjIi1h0qn7ru50wYRskZP7 aM0dNqubhaKlRZMVfjyh1ZLVxZ0l2EoeiE3Nm6HbSgfW5P7oKw9HWTqOgVRQy6Z+ VZnMkXFCwqvPoxZLLzTw+0OLctk4zs40tyP0swNoUjTu0QYIJFxFGs1OpcwPsenW Lcgrpyhc8QKBgQD0TTZ/QDdq4K7oDQAscKlYV8tY6/52BcS8HXb+9DawfDHUotLH gbAOXqobxgJ6gpIQUvj8NVGFbwmijWM6R/Fu7b38EDaUXlw/xjch61pQ0w5Nk84O i5qlOPu+gG+IIk/bq8oC2ZKNV0Z6BpfSmNeU4iVPnXltoIXUAivmajSpEQKBgF8k phgutTR8IQv10R8SIRhN5FutiZU/KuxuC335rLLBHMFJao/EnQdYd6VxFLbiQbeX +FWNzFYk9f4Rvtp5s+yCUQI2cXSz9uwUj+R0TNqaoRgbYquD5VFQ+7Rw0HH0c2c1 DPrstQSuS2H9rmtFxQj/U+naJeKB8OlwZ0HoJurBAoGBAPGBekQHqVToFXylxOst ufyj0bAUWyoFKUHc7jiTOYUTlxsDcQho8aeveRD5GkE0ZTiKLFv9/QouCUjLKj2u tD/IyAjj5X59FhIJ4pu+xiJhaie7LvoojiCQMtP5lrt+y6IH+pzd0L3P1S/e5ttd UJ2bVZguV0qBXoJiKbuDmJl+ -----END PRIVATE KEY----- </key> <tls-crypt> # # 2048 bit OpenVPN static key # -----BEGIN OpenVPN Static key V1----- 73a440594e622482311817c96808bbe6 ef2cf42445013ab49ac7e2e64bc15b84 fd11ce32252690989a1bc56ae24318a5 3097e194f17578b819febcef7dfb9651 125bd310a67ddd40bcf388af777cc2b2 14505ed2dd827a5346a1ac2d0f2b8c5a 472680165136adabdeead231a73530db 9aaa30d0e1309d415db00a803b7893d7 36dd9b376d9083e9773c2365f61839b6 0740ee6943b8f3c39b8f7e36e7fe485a c4c07f0dc1827b2aecc809775b86a078 ffc9976dcab6a1221890d0d73096697c 9cf1f9958f2cd6a2a474a8357249606d ba688aa0cac64d44614b0e7683e6e894 dafeffc9da5ded05b06c88986eb4fac6 960398bb8b70fe01c8c06c1abd7db8bd -----END OpenVPN Static key V1----- </tls-crypt> |
У нас нет задачи видеть сеть за клиентом, да и он скорее всего не будет являться шлюзом, поэтому параметра iroute для этого клиента нет. Плюс убраны пути для логов - openvpn будет создавать их в папке по умолчанию - C:\users\username\OpenVPN\log. Туда же, рядом, кладем конфиг в папку C:\users\username\OpenVPN\config.
Для подключения openvpn клиента в windows запускаем OpenVPN GUI от имени администратора!
Это важно, без прав администратора openvpn client для правильной маршрутизации не сможет прописать необходимые маршруты автоматически.
Ищем мониторчик в трее, нажимаем правой кнопкой мыши на него и выбираем "Подключиться".
Если в директории с конфигами несколько файлов конфигураций, то будет выбор, к какому серверу подключиться. Чтобы одновременно подключаться к разным серверам, необходимо добавить несколько TAP-Windows Adapter для openvpn.
Во время подключения мониторчик будут гореть желтым цветом. Как только подключение будет установлено, цвет сменится на зеленый. Это означает, что openvpn клиент успешно создал туннель и можно начинать работать по vpn.
Для того, чтобы openvpn client автоматически подключался при запуске, нужно создать для него ярлык с параметрами:
1 |
--connect "user05.ovpn" |
Для этого выбираем ярлык на рабочем столе OpenVPN GUI и нажимаем правой кнопкой мыши, открываем "Свойства". На вкладке "Ярлык" в поле "Объект" в самом конце дописываем указанные параметры. Вся строка должна выглядеть следующим образом:
1 |
"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect "user05.ovpn" |
Теперь при запуске ярлыка, openvpn будет автоматически подключаться к серверу и устанавливать vpn соединение.
Мы подключились к корпоративной vpn сети, объединяющей 2 офиса. Давайте попробуем получить доступ к компьютерам внутри этой сети. Пингуем все машины из нашей схемы:
192.168.220.1 | 192.168.220.10 | 192.168.150.1 | 192.168.150.10 |
Отлично, связь есть. Теперь попробуем зайти на сетевой ресурс, который мы создали ранее на компьютере сети филиала PC2:
Доступ есть, все в порядке. Если у вас какие-то проблемы с доступом к ресурсам по vpn, в первую очередь смотрите маршруты на клиенте. Они должны быть прописаны до всех необходимых подсетей филиалов.
Если запустить openvpn gui без прав администратора, то он не сможет добавить маршруты в систему. Соответственно и доступа никуда не будет.
Автоматическое подключение Openvpn при загрузке системы
Если вы хотите, чтобы ваш openvpn клиент в Windows автоматически подключался к серверу при старте системы, необходимо во время установки клиента добавить установку OpenVPN Service. По умолчанию она отключена.
Когда клиент будет установлен, убедитесь, что указанная служба имеет автоматический запуск.
Выше вы можете наблюдать еще одну службу, которая добавляется автоматически во время установки openvpn client в windows. Она отвечает за возможность запускать с правами администратора openvpn-gui у пользователя, который администратором не является.
Для того, чтобы после загрузки Winows OpenVPN подключилась автоматически к серверу, необходимо добавить конфигурационный файл в директорию C:\Program Files\OpenVPN\config-auto.
Теперь проверяйте. Перезагрузите компьютер и смотрите настройки сетевых интерфейсов Openvpn TAP-Windows.
Подключение к openvpn серверу выполнено автоматически после загрузки операционной системы. Через GUI информации об этом подключении вы не увидите. Если что-то пойдет не так, то лог автоматического подключения будет в директории C:\Program Files\OpenVPN\log. Если вам нужно будет подключиться к еще одному vpn серверу, то вы можете сделать это через openvpn-gui, если в системе есть еще сетевые интерфейсы openvpn.
Подключение по Openvpn в Android
Для того, чтобы настроить openvpn подключение в Android, я обычно использую приложение OpenVPN Connect. Каких-то проблем с ним я не испытывал. К тому же настраивается очень просто. В приложение достаточно импортировать конфигурационный файл с интегрированными сертификатами, типа того, что мы использовали ранее. Его можно передать через любой мессенджер со сквозным шифрованием, если переживаете за безопасность
При этом приложение нормально поддерживает и tls-crypt, и сжатие. Если у вас будут какие-то проблемы с этой программой на android, попробуйте еще OpenVPN for Android. Оно тоже нормально работает, но настройки более замороченные.
Подключившись к локальной сети в Android с помощью openvpn, можно пользоваться локальными ресурсами. Например, я иногда подключаюсь по RDP с помощью Microsoft Remote Desktop.
Отзыв сертификата клиента
В завершении расскажу об еще одной важной функциональности openvpn сервера - отзыв сертификатов пользователей. Делается это для того, чтобы запретить подключение конкретного пользователя к вашей vpn сети. Выполнить отзыв сертификата можно с помощью easyrsa следующим образом:
1 2 3 4 5 6 7 |
# ./easyrsa --batch revoke user01 Using SSL: openssl OpenSSL 1.1.1g FIPS 21 Apr 2020 Using configuration from /etc/openvpn/keys/easyrsa/pki/easy-rsa-1505.XnOgIX/tmp.3v8Hny Enter pass phrase for /etc/openvpn/keys/easyrsa/pki/private/ca.key: Revoking Certificate 2A4F516FA120BE4284FE9D0C46119BB0. Data Base Updated |
После отзыва необходимо сформировать файл со списком отозванных сертификатов. Это нужно будет делать каждый раз после отзыва.
1 |
# ./easyrsa gen-crl |
Скопируем теперь этот файл в директорию с конфигом openvpn server.
1 |
# cp /etc/openvpn/keys/easyrsa/pki/crl.pem /etc/openvpn/server/ |
Если ранее у вас там уже был файл отозванных сертификатов, его надо будет либо удалить, либо перезаписать. Для того, чтобы сервер проверял отозванные сертификаты, в файл настроек server.conf нужно добавить соответствующий параметр.
1 |
crl-verify /etc/openvpn/server/crl.pem |
Для применения настроек openvpn, сервер надо перезапустить. Если же у вас там уже был этот параметр и вы только обновили файл отозванных сертификатов, перезапускать сам сервер не обязательно. Но имейте ввиду, что проверка сертификата происходит при подключении клиента. Таким образом, если клиент уже подключен, а вы отозвали сертификат, подключение не будет сброшено и клиент не будет отключен до тех пор, пока он сам не завершит текущее соединение, либо пока сервер openvpn не будет перезапущен.
Так же после отзыва не лишним будет удалить файл настроек и конфигурации клиента, а так же сохраненный ip адрес. Чтобы все это не делать вручную, я написал простенький скрипт revoke-user.sh, который включает все необходимые действия.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/bash echo -n "Enter user name for revoke: " read user clientexist=$(tail -n +2 /etc/openvpn/keys/easyrsa/pki/index.txt | grep -c -E "/CN=$user\$") if [[ $clientexist == '0' ]]; then echo "" echo "The specified client name was not found in easy-rsa" exit else cd /etc/openvpn/keys/easyrsa/ ./easyrsa revoke "$user" ./easyrsa gen-crl rm -f /etc/openvpn/server/crl.pem cp /etc/openvpn/keys/easyrsa/pki/crl.pem /etc/openvpn/server/crl.pem rm -f "/etc/openvpn/users-conf/$user.ovpn" rm -f "/etc/openvpn/ccd/$user" sed -i "/^$user,.*/d" /etc/openvpn/server/ipp.txt echo "" echo "Certificate $user revoked." fi |
Отозванные сертификаты в списке index.txt помечаются буквой R.
На этом все основное по настройке openvpn сервера.
Заключение
Теперь подведем итоги того, что мы сделали:
- В первую очередь настроили сервер openvpn на CentOS. Для этого создали инфраструктуру для удостоверяющего центра СА, с помощью которого мы создаем сертификаты.
- Затем с помощью этого центра сформировали сертификаты для сервера и клиента, в роли которых выступает головной офис компании и его филиал.
- Потом мы настроили openvpn сервер в офисе компании и подключили к нему в качестве клиента сервер филиала. Проверили это соединение, взаимную доступность узлов обоих сетей.
- В завершении сформировали сертификат для удаленного сотрудника и настроили ему подключение openvpn клиента в windows. Проверили доступность всех узлов обоих сетей.
По этой схеме можно добавить любое количество филиалов или удаленных сотрудников к общей сети. Единственная проблема, которая тут может возникнуть, это если нумерация подключаемых сетей будет совпадать. Но тут уже ничего не поделаешь, придется ее где-то менять, либо выкручиваться с помощью netmap или как-то еще.
Если вам кажется, что скорость тоннеля недостаточная и при этом нет жестких требований по безопасности, можете сменить шифр на BF-CBC. С ним, навскидку, раза в 2-3 производительность должна вырасти.