В современном интернете вопрос анонимности встает с каждым годом все острее. Запреты на доступ к контенту вынуждают пользователей искать обходные пути, одним из которых является использование приватных тоннелей. Установка на CentOS openvpn сервера для подключения удаленных клиентов является одной из реализаций шифрованного vpn канала. Этой задачей мы и займемся в текущей статье - поднимем шифрованный тоннель и подключим клиентов.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Данная статья является частью единого цикла статьей про сервер Centos.
Введение - что такое vpn server?
Упомянутое во вступлении применение технологии vpn и openvpn сервера в частности не ограничивается созданием каналов для анонимного трафика пользователей. Более того, я думаю это не основная сфера применения данных технологий. Давайте поподробнее познакомимся с этими вещами, чтобы иметь полное представление о том, что мы будем настраивать.
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 будет такой же.
Данный материал я создавал на тестовом стенде, который специально собрал для написания статьи. Но все настройки взяты с реально работающих серверов, причем разных систем, в том числе и freebsd. Для практического применения нужно просто поменять IP адреса на свои. У меня на стенде 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. Если еще нет, то можете воспользоваться моими материалами. В них раскрыты следующие темы:
- Подробное описание установки CentOS 8 с разбором всех этапов и параметров.
- Настройка CentOS шаг за шагом - базовая конфигурация сервера.
Устанавливаем openvpn на оба наших сервера, которые являются шлюзами в своих сегментах сети. Первым делом подключаем репозиторий epel к centos:
# yum install epel-release
Выполняем непосредственно установку:
# yum install openvpn
Создание сертификатов
Для работы сервера openvpn необходимо создать соответствующие сертификаты. Для этого воспользуемся программой Easy-RSA, которая генерирует сертификаты с помощью утилиты openssl. Все работы в этом разделе выполняем только на centos-server.
Создаем директорию для ключей:
# mkdir /etc/openvpn/keys
Скачиваем и устанавливаем утилиту Easy-RSA. Ссылку на последнюю версию можно посмотреть на github.
# cd /etc/openvpn/keys # wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz
Если получаете сообщение:
-bash: wget: command not found
То устанавливаете wget:
# yum install wget
Продолжаем:
# 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 ключей:
# 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:
# ./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, иначе придется вводить пароль с консоли при каждом запуске сервера:
# ./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:
# ./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
Нам еще пригодится ключ Диффи-Хелмана, генерируем его:
# ./easyrsa gen-dh
По завершению работы скрипта получаем файл dh сертификата - /etc/openvpn/keys/easy-rsa/pki/dh.pem.
Копируем в папку /etc/openvpn/server/ все необходимые для работы openvpn сервера файлы:
# 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, что повышает безопасность.
# openvpn --genkey --secret /etc/openvpn/server/tc.key
Создадим ключ для клиента openvpn:
# ./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 примерно так:
# ./easyrsa build-client-full client01 nopass
Клиенту, которым у нас является шлюз филиала, нужно будет передать следующий набор файлов - client01.crt, client01.key, ca.crt, tc.key. Либо использовать единый файл конфигурации клиента, который включает в себя в том числе и сертификаты. Я отдельно покажу как это сделать.
Настройка openvpn на CentOS 8
Теперь приступаем к настройке. Создаем файл конфигурации openvpn:
# mcedit /etc/openvpn/server/server.conf
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.
Создаем необходимые директории:
# mkdir /etc/openvpn/ccd && mkdir /var/log/openvpn
Создаем файл конфигурации клиента в папке, указанной в параметре client-config-dir :
mcedit /etc/openvpn/ccd/client01
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. Вернемся к настройке.
Запускаем сервер:
# systemctl start openvpn-server@server.service
Если сервер не запустился, а в логе ошибка:
TCP/UDP: Socket bind failed on local address [undef]: Permission denied
Значит вам нужно либо правильно настроить, либо отключить SELinux. В данном материале я не хочу касаться настройки SELinux, поэтому просто отключаем его:
# mcedit /etc/sysconfig/selinux
меняем значение
SELINUX=disabled
Чтобы изменения вступили в силу, выполняет:
# setenforce 0
Пробуем снова запустить openvpn сервер:
# systemctl start openvpn-server@server.service
Если опять видите какие-то ошибки, то проверяйте лог файлы /var/log/openvpn/openvpn.log и /var/log/messages. Там почти наверняка будет указано, в чем проблема. Проверяем, запустился сервер или нет:
# netstat -tulnp | grep 13555 udp 0 0 0.0.0.0:13555 0.0.0.0:* 1900/openvpn
Отлично, запустился на указанном порту.
Добавляем сервер openvpn в автозагрузку:
# 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 туннелей.
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 будет следующий:
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 в отдельной статье. В соответствии с этой статьей я использую следующий итоговый набор правил всего сервера для iptables.
#!/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 на борту. Про настройку шлюза на базе centos я так же рассказываю отдельно. Для сервера клиента openvpn набор правил будет точно такой же, только ip адреса, подсети и интерфейсы будут другие.
Настройка в CentOS клиента openvpn
На centos-client не забываем настроить или отключить SELinux. Устанавливаем openvpn:
# yum install openvpn
Создаем в директории /etc/openvpn/client/ файл конфигурации client.conf:
# mcedit /etc/openvpn/client/client.conf
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 следующим образом:
push "route 192.168.220.0 255.255.255.0"
Создаем каталог для логов:
# mkdir /var/log/openvpn
Запускаем openvpn client:
# systemctl start openvpn-client@client.service
Добавляем в автозагрузку:
# systemctl enable openvpn-client@client.service
Теперь смотрим картину сетевых настроек на клиенте:
Ну и маршруты глянем заодно:
Все в порядке, подключение к vpn серверу есть, маршруты прописаны верно. Как вы видите, трафик к удаленной сети 192.168.220.0.24 пойдет через vpn туннель. Маршрут для него openvpn поднял автоматически в соответсвии со своими настройками на клиенте или сервере.
В принципе, этого уже достаточно, чтобы трафик забегал в обе стороны из одной подсети в другую. Но для этого у вас должны быть соответствующим образом настроены сами шлюзы, фаерволы на них, маскарадинг, в том числе на интерфейсе tun. Как это можно сделать, я приводил выше в примерах своих настроек iptables.
Перед этим напомню важный момент, если вдруг вы с нуля настраиваете шлюз и не проверили его в реальной работе. Для роутинга трафика между сетевыми интерфейсами, необходимо добавить строку:
net.ipv4.ip_forward = 1
в файл /etc/sysctl.conf и применить настройку:
# 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):
И напоследок пропингуем с vpn сервера подсеть клиента:
Как видите, связь настроена в обе стороны. Если у вас что-то где-то не пингуется, то смотрите в первую очередь на наличие маршрутов на самих серверах с openvpn, а так же на настройки firewall. Проблемы могут быть только здесь. Ну и не забудьте настроить windows firewall на самих виндовых машинах. И помните про антивирусы на них. А то бывает кучу времени потратишь на поиск проблемы, а ее на самом деле не было. Пинги не работали, потому что тупо запрещены на виндовых машинах.
В завершение темы объединения удаленных офисов, проверим доступ к общим сетевым ресурсам. Расшарим папку на PC1 и зайдем на нее с PC2:
Все получилось. Мы реально объединили удаленные офисы в единую связную сеть с помощью openvpn сервера. Дальше поверх vpn можно настраивать работу остальных сервисов. Например, объединить 2 сервера asterisk или контроллеры домена.
Настройка openvpn client в windows
Теперь рассмотрим вариант подключения к нашей логической сети удаленного сотрудника с рабочей станцией windows. Допустим, мы объединили наши офисы в единую сеть, доступ работает в обе стороны. Нам необходимо, чтобы удаленный пользователь смог подключиться либо к обоим сетям, либо выборочно только к основному офису, либо только к филиалу.
Первым делом нам надо выпустить для клиента сертификаты и подготовить файл конфигурации. Для того, чтобы упростить эти процессы, я подготовил небольшой скрипт, который выпускает сертификат по заданному имени и сразу добавляет его в файл конфигурации. Таким образом нам надо будет передать клиенту только конфиг.
Скрипт по генерации сертификата и конфига add_vpn_user.sh:
#!/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, куда включены параметры подключения и все необходимые сертификаты и ключи.
Сразу предупреждаю, чтобы не было вопросов и претензий. Скрипт написал во время подготовки статьи. Красоту и оптимизацию не делал. Убедился, что все работает, конфиг на выходе корректный. Подобные вещи можно улучшать, дополнять до бесконечности. Настройка vpn серверов не моя специализация, поэтому тратить много времени на красивые и функциональные скрипты у меня нет возможности.
Дальше редактируем файл конфигурации на сервере openvpn для этого клиента:
# 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 сервера, то добавьте следующий параметр в конфиг клиента:
push "redirect-gateway def1 bypass-dhcp"
Теперь нужно скачать openvpn client под нашу версию windows. Ссылки для скачивания я давал в самом начале статьи. Дальше выполняем установку клиента. Обращаю внимание, что для полной установки понадобятся права администратора:
Приступаем к настройке клиента openvpn в windows. Для этого нам понадобится файл конфигурации, который мы создали ранее. Заберите его любым подходящим способом. Например, с помощью WinSCP. Файл конфигурации openvpn клиента будет выглядеть примерно так:
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 автоматически подключался при запуске, нужно создать для него ярлык с параметрами:
--connect "user05.ovpn"
Для этого выбираем ярлык на рабочем столе OpenVPN GUI и нажимаем правой кнопкой мыши, открываем "Свойства". На вкладке "Ярлык" в поле "Объект" в самом конце дописываем указанные параметры. Вся строка должна выглядеть следующим образом:
"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. Каких-то проблем с ним я не испытывал. К тому же настраивается очень просто. В приложение достаточно импортировать конфигурационный файл с интегрированными сертификатами, типа того, что мы использовали ранее. Его можно передать через любой мессенджер со сквозным шифрованием, если переживаете за безопасность. Или просто отправить по почте вложением или зашифрованным архивом. Я передал через чат VK :)
При этом приложение нормально поддерживает и tls-crypt, и сжатие. Если у вас будут какие-то проблемы с этой программой на android, попробуйте еще OpenVPN for Android. Оно тоже нормально работает, но настройки более замороченные.
Подключившись к локальной сети в Android с помощью openvpn, можно пользоваться локальными ресурсами. Например, я иногда подключаюсь по RDP с помощью Microsoft Remote Desktop.
Отзыв сертификата клиента
В завершении расскажу об еще одной важной функциональности openvpn сервера - отзыв сертификатов пользователей. Делается это для того, чтобы запретить подключение конкретного пользователя к вашей vpn сети. Выполнить отзыв сертификата можно с помощью easyrsa следующим образом:
# ./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
После отзыва необходимо сформировать файл со списком отозванных сертификатов. Это нужно будет делать каждый раз после отзыва.
# ./easyrsa gen-crl
Скопируем теперь этот файл в директорию с конфигом openvpn server.
# cp /etc/openvpn/keys/easyrsa/pki/crl.pem /etc/openvpn/server/
Если ранее у вас там уже был файл отозванных сертификатов, его надо будет либо удалить, либо перезаписать. Для того, чтобы сервер проверял отозванные сертификаты, в файл настроек server.conf нужно добавить соответствующий параметр.
crl-verify /etc/openvpn/server/crl.pem
Для применения настроек openvpn, сервер надо перезапустить. Если же у вас там уже был этот параметр и вы только обновили файл отозванных сертификатов, перезапускать сам сервер не обязательно. Но имейте ввиду, что проверка сертификата происходит при подключении клиента. Таким образом, если клиент уже подключен, а вы отозвали сертификат, подключение не будет сброшено и клиент не будет отключен до тех пор, пока он сам не завершит текущее соединение, либо пока сервер openvpn не будет перезапущен.
Так же после отзыва не лишним будет удалить файл настроек и конфигурации клиента, а так же сохраненный ip адрес. Чтобы все это не делать вручную, я написал простенький скрипт revoke-user.sh, который включает все необходимые действия.
#!/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. Проверили доступность всех узлов обоих сетей.
По этой схеме можно добавить любое количество филиалов или удаленных сотрудников к общей сети. Я с крупными сетями не работал, но лично подключал до 5-ти удаленных филиалов к головной сети офисов, плюс удаленных пользователей к ним. У пользователей маршрутами настраивал доступ к той или иной сети. Единственная проблема, которая тут может возникнуть, это если нумерация подключаемых сетей будет совпадать. Но тут уже ничего не поделаешь, придется ее где-то менять, либо выкручиваться с помощью netmap или как-то еще.
В эту же статью изначально планировал добавить сравнение производительности и пропускной способности туннеля в зависимости от разного шифрования. Но в итоге статья и так получилась очень большая, так что сделаю это позже и оформлю отдельной статьей. Если вам кажется, что скорость тоннеля недостаточная и при этом нет жестких требований по безопасности, можете сменить шифр на BF-CBC. С ним, навскидку, раза в 2-3 производительность должна вырасти. Но это не точно, мое предположение.
Если вам нужен мониторинг пользователей, подключенных по openvpn, то читайте мою статью по мониторингу OpenVPN в Zabbix. Она достаточно старая и мониторинг там сделан не оптимально, но лучше у меня ничего нет. Как основа для вашего мониторинга сойдет, а дальше сможете сами модернизировать как вам будет нужно.
Напоминаю, что данная статья является частью единого цикла статьей про сервер Centos.
Видео
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
подскажите, подойдёт ли данная инструкция для серфинга в интернете через сервер с VPN ?
имеется сервер CentOs 7 "за бугром" и локальная ОС Ubuntu
с локальной тачки хочу зацепиться к серверу, чтобы "в мир" ходить через него
Да, подойдёт. Но для личного использования есть готовые решения, который в разы проще и быстрее разворачиваются.
после
$IPT -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
получаю
bash: -t: команда не найдена
Замените $IPT на iptables и проверьте.
Владимир, я уже голову сломал, куда дальше копать не понимаю...
конфигурация openvpn сервер и клиент, оба на centos stream 8
все поднял по данной статье
на обоих машинах ens192: WAN, ens224: LAN
сервер:
------
ip a
3: ens224: mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:65:9c:e9 brd ff:ff:ff:ff:ff:ff
inet 10.1.1.51/23 brd 10.1.1.255 scope global noprefixroute ens224
valid_lft forever preferred_lft forever
5: tun0: mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.1.4.1 peer 10.1.4.2/32 scope global tun0
valid_lft forever preferred_lft forever
netstat -nr
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 xxxxx 0.0.0.0 UG 0 0 0 ens192
10.1.0.0 0.0.0.0 255.255.254.0 U 0 0 0 ens224
10.1.4.0 10.1.4.2 255.255.255.0 UG 0 0 0 tun0
10.1.4.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.60.20.0 10.1.4.2 255.255.255.0 UG 0 0 0 tun0
10.60.21.0 10.1.4.2 255.255.255.0 UG 0 0 0 tun0
клиент:
-------
3: ens224: mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:0c:d4:01 brd ff:ff:ff:ff:ff:ff
altname enp19s0
inet 10.60.21.1/24 brd 10.60.21.255 scope global noprefixroute ens224
valid_lft forever preferred_lft forever
inet 10.60.20.1/24 brd 10.60.20.255 scope global noprefixroute ens224:0
valid_lft forever preferred_lft forever
5: tun0: mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.1.4.6 peer 10.1.4.5/32 scope global tun0
valid_lft forever preferred_lft forever
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 xxxxx 0.0.0.0 UG 0 0 0 ens192
10.1.0.0 10.1.4.5 255.255.254.0 UG 0 0 0 tun0
10.1.4.0 10.1.4.5 255.255.255.0 UG 0 0 0 tun0
10.1.4.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.60.20.0 0.0.0.0 255.255.255.0 U 0 0 0 ens224
10.60.21.0 0.0.0.0 255.255.255.0 U 0 0 0 ens224
Туннели поднялись.
с клиента напрямую любой хост в 10.1.0.0/23 пингуется
с машины в сети 10.60.21.0/24 (за клиентом) хосты в 10.1.0.0/23 не пингуются
при этом на клиенте tcpdump на tun интерфейсе эхо запросы показывает, но их не видно на tun интерфейсе на сервере
из сети за сервером и с самого сервера хосты в 10.60.21.0/24 (которая за клиентом) не пингуются
отключение файерволла на клиенте не дает эффекта, значит что-то в маршрутизации (на сервере отключить файерволл не могу, т.к. маскарадит боевую локалку наружу)
как крайний вариант, что-то с маскарадингом, но правило одно, маскарадить диапазон LAN сети на WAN интерфейсе сервера (клиента)
изначально проблема была в том, что наклиенте роутинг забыл включить, включил, не помогло, пакеты хостов за клиентом форвардятся куда угодно, но только не в туннель
Я обычно начинаю с того, что включаю логирование всех запрещающих правил на фаерволах. Это более правильный подход, нежели отключение. Там сразу будет видно, если что-то блокируется. Чаще всего это решает проблему. Тут смотреть нужно только на фаерволы и на маршруты. Больше ничего, относящегося к хождению пакетов, нет. Но маршруты и фаерволы надо смотреть по всему пути пакетов, а не только на vpn клиенте и сервере. Возможно есть какой-то нюанс с /23 сетками. Я сам никогда их не использую.
Немного подумал и вижу, что тут скорее всего проблема с пересечением адресных пространств. У вас и VPN сеть, и рабочая 10.1.Х.Х и при этом с разными масками. Тут скорее всего они накладываются друг на друга и пакеты идут не туда, куда вы ожидаете. У меня сейчас нет времени подробно разбираться в этом, но мне кажется, проблема именно тут. Возьмите для vpn сети подсеть 192.168.55.0/24 и попробуйте.
сети не должны пересекаться (10.1.0.0/23 - офис, 10.60.20.0/24 management и 10.60.21.0/24 lan - филиал. 10.1.4.0/24 -- vpn подсеть)
обнаружил интересный момент:
со стороны клиента
5: tun0: mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.1.4.6 peer 10.1.4.5/32 scope global tun0
пингуется только inet адрес 10.1.4.5, а peer адрес 10.1.4.6 не пингуется
со стороны сервера
6: tun0: mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.1.4.1 peer 10.1.4.2/32 scope global tun0
пингуется только inet адрес 10.1.4.1, а peer адрес 10.1.4.2 не пингуется
при этом есть рабочая пара сервер\клиент на 6 сайнтифике
4: tun0: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
link/[65534]
inet 10.200.0.5 peer 10.200.0.6/32 scope global tun0
тут пингуется и inet IP и peer IP
пингую с хоста на котором поднимается туннель (как на сервере, так и на клиенте)
такое ощущение, что проблема с openvpn пакетом или вообще с ядром!!!!
в рабочей системе все-таки древний сайнтифик, а в нерабочей на обоих концах centos stream 8
У Вас нет статистики случайно работает ли OpenVPN на centos stream 8?
На centos stream 8 работает. Все проблемы хождения пакетов по VPN это всегда вопросы к firewall и маршрутам. Всегда, сколько бы я таких проблем не видел. Надо подробно разбираться с этими вещами.
Привет, сделал по вашей инструкции, и на этапе добавления пользователя через скрипт сталкиваюсь с ошибкой
[root@vm3301024 /]# sh ect/add_vpn_usr.sh
Enter user name: su
Protect the private key with a password?
1) No, passwordless client
2) Yes, use a password for the client
Select an option [1-2]: 1
Note: using Easy-RSA configuration from: /etc/openvpn/keys/easyrsa/vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
Generating a 2048 bit RSA private key
..........................................................+++
.....................................+++
writing new private key to '/etc/openvpn/keys/easyrsa/pki/easy-rsa-11452.KTr6Oq/tmp.jFja0o'
-----
Using configuration from /etc/openvpn/keys/easyrsa/pki/easy-rsa-11452.KTr6Oq/tmp.4g1R51
Enter pass phrase for /etc/openvpn/keys/easyrsa/pki/private/ca.key:
unable to load CA private key
140267397597072:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:618:
140267397597072:error:0906A065:PEM routines:PEM_do_header:bad decrypt:pem_lib.c:488:
Easy-RSA error:
signing failed (openssl output above may have more detail)
Easy-RSA error:
Failed to sign 'su'
Client su added.
awk: fatal: cannot open file `/etc/openvpn/keys/easyrsa/pki/issued/su.crt' for reading (No such file or directory)
cat: /etc/openvpn/keys/easyrsa/pki/private/su.key: No such file or directory
Vpn open cob gerek
Сегодня по данному мануалу настраивал поднимал OpenVPN на Debian 11, для доступа из внешнего мира к ресурсам локалки ну и прочих плюшек VPN.
Выложу здесь свои шаги и конфиги, может кому поможет, а может кто и покритикует )))
По центру сертификации и по созданию сертификатов всё шло как по маслу, потом было немножко граблей по которым я походил с удовольствием )))
Ну поехали по шагам:
1. apt update
2. apt install openvpn
3. Идём на https://github.com/OpenVPN/easy-rsa/releases - смотрим последний релиз easy-rsa
4. wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz
5. mkdir /etc/openvpn/keys
6. mv EasyRSA-3.0.8.tgz /etc/openvpn/keys
7. cd /etc/openvpn/keys
8. tar xzvf EasyRSA-3.0.8.tgz
9. mv EasyRSA-3.0.8 easyrsa
10. rm -f EasyRSA-3.0.8.tgz
11. cd easyrsa
######### СОЗДАЕМ СТРУКТУРУ PUBLIK KEY ##########
12. mv vars.example vars
13. ./easyrsa init-pki
########### Создание удостоверяющего центра ##########
14. ./easyrsa build-ca
- при выполнении нужно задать пароль в строке "Enter New CA Key Passphrase:" он потребуется при созданиии сертификатов
В итоге получаем 2 файла:
/etc/openvpn/keys/easyrsa/pki/private/ca.key (Сертификат сервера)
/etc/openvpn/keys/easyrsa/pki/ca.crt (Клиентский сертиификат)
###### Создание (запрос) сертификата для сервера без пароля с помощью опции nopass############
15. ./easyrsa gen-req server nopass
##########Подписываем запрос на получение сертификата у нашего CA:###########
16. ./easyrsa sign-req server server
########## Генерируем ключ Диффи-Хелмана ###############
17. ./easyrsa gen-dh
########### копируем в папку server все необходимые файлы ###########
18. 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 #############
19. openvpn --genkey secret /etc/openvpn/server/tc.key
########### Создадим ключ для клиента openvpn ##############
20. ./easyrsa build-client-full client01 nopass
################# НАСТРОЙКИ OpenVPN #####################################
21. mcedit /etc/openvpn/server/server.conf
Содержимое файла
(-----------------------
port 41941
proto udp
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 # подсеть для туннеля, может быть любой
ifconfig-pool-persist ipp.txt # файл с записями соответствий clinet - ip
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 77.88.8.8"
push "dhcp-option DNS 77.88.8.1"
client-to-client # позволяет клиентам openvpn подключаться друг к другу
client-config-dir /etc/openvpn/ccd # директория с индивидуальными настройками клиентов
keepalive 10 120
comp-lzo # если используется протокол tcp, сжатие надо отключить
max-clients 10
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 nogroup
verb 3
mode server
---------------------)
22. mkdir /etc/openvpn/ccd && mkdir /var/log/openvpn
23. mcedit /etc/openvpn/ccd/client01 - файл создал, но никаких параметров в нем не указывал.
24. systemctl start openvpn-server@server.service - Запускаем сервер
25. netstat -tulnp | grep 41941 - смотрим открылся ли порт
26. ip a - проверяем интерфейс tun
27. netstat -nr - проверяем статическую маршрутизацию.
28. systemctl enable openvpn-server@server.service - добавляем сервер в автозапуск
29. Добавляем правила в iptables:
создаем файл или правим существующий /etc/iptables.sh
(-----------------------
#!/bin/bash
#
# Объявление переменных
export IPT="iptables"
# Активный сетевой интерфейс
export WAN=enp5s0
export WAN_IP=192.168.10.2
# Очистка всех цепочек iptables
$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
# разрешаем локальный траффик для loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -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
# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
# Пропускать все уже инициированные соединения, а также дочерние от них
$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
# Включаем фрагментацию пакетов. Необходимо из-за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
# Приводит к связыванию системных ресурсов, так что реальный
# обмен данными становится не возможным, обрубаем
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
# Разрешаем OpenVPN
$IPT -A INPUT -i tun+ -j ACCEPT
$IPT -A OUTPUT -o tun+ -j ACCEPT
$IPT -A FORWARD -i tun+ -j ACCEPT
# Открываем порт для ssh (!!!не забудьте указать свой порт, который вы изменили ранее!!!)
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT
# Открываем порт для web сервера
#$IPT -A INPUT -i $WAN -p tcp --dport 80 -j ACCEPT - (у себя не открывал, кому надо активируйте)
#$IPT -A INPUT -i $WAN -p tcp --dport 443 -j ACCEPT - (у себя не открывал, кому надо активируйте)
# Открываем порт для openvpn
$IPT -A INPUT -i $WAN -p udp --dport 41941 -j ACCEPT
$IPT -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
# Записываем правила в файл
/sbin/iptables-save > /etc/iptables_rules
----------------------------------)
делаем файл иисполняемым chmod 700 /etc/iptables.sh
и выполняем скрипт sh /etc/iptables.sh
30. добавляем net.ipv4.ip_forward = 1 в файл /etc/sysctl.conf и применяем настройку командой sysctl -p
########################## Создаем файл конфигурации для клиента ###############################
Дальше выполняем всё как описано в статье с использованием скрипта приведённого в статье - всё работает.
#####################################################################################
Да, забыл сказать: адреса и порты нужно поменять на свои. В моей конфигурации сервер находится за маршрутизатором с "белым, статическим IP", на котором нужно настроить проброс порта 41941.
Привет. Вопрос к вам, и ко всем кто прочитает, не было ли у вас проблем с типом шифрования? Просто у меня сервер то стартует, норм, но если логи посмотреть, там пишут что ПРЕДУПРЕЖДЕНИЕ!!! ))) что мол от AES-256-CBC надо уходить, либо принять меры. Хотя если на сайте пишут что только BF-256-CBC, устарел. Я в общем ставил AES-256-GCM. И что делать лучше, перейти на другое шифрование или дополнительные параметры вводить, что бы сервер принял AES-256-CBC нормально?
"Сервер": Винда-7 про. OpenVPN-2.5.5-I602-amd64.
# ./easyrsa init-pki - выполнена успешно, все создало.
# ./easyrsa build-ca - после ввода пароля и подтверждения к нему (правильного - вводил очень внимательно и медленно!) выдает ошибку
Extra arguments given.
Failed create CA private key
- - - - - - - - - - - - - - - - - - - - - -
Вывод команды:
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.1.1l 24 Aug 2021
path = C:/Program Files/OpenVPN/easy-rsa/pki/easy-rsa-6060.a08748/tmp.XXXXXX
lpPathBuffer = D:\Temp\SYSTEM\
szTempName = D:\Temp\SYSTEM\tmpA109.tmp
path = D:\Temp\SYSTEM\tmpA109.tmp
fd = 4
path = C:/Program Files/OpenVPN/easy-rsa/pki/easy-rsa-6060.a08748/tmp.XXXXXX
lpPathBuffer = D:\Temp\SYSTEM\
szTempName = D:\Temp\SYSTEM\tmpA1A5.tmp
path = D:\Temp\SYSTEM\tmpA1A5.tmp
fd = 4
path = C:/Program Files/OpenVPN/easy-rsa/pki/easy-rsa-6060.a08748/tmp.XXXXXX
lpPathBuffer = D:\Temp\SYSTEM\
szTempName = D:\Temp\SYSTEM\tmpA251.tmp
path = D:\Temp\SYSTEM\tmpA251.tmp
fd = 4
Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
Extra arguments given.
genrsa: Use -help for summary.
Easy-RSA error:
Failed create CA private key
- - - - - - - - - - - - - - - - - - - - - -
Если добавить параметр "nopass", то ключи генерируются успешно.
А почему Win7? Она уже сколько времени не поддерживается. В этом может быть проблема. Каких-нибудь шифров нет. А вообще не стоит сильно запариваться с этой системой. Ключи можно где угодно сделать и просто скопировать на сервер.
Добрый день
спасибо за статью и скрипт, интересный подход с добавление сертификата и ключей в конфиг клиента, раньше такое не использовал!
подскажите, вы использовали когда- то промежуточный центр сертификации? когда из СА генерируется subCA и уже subCA подписывает сертификаты клиентов и серверов, тогда в случае компроментации секрета subCA его можно отозвать и сгенерировать новый
Ни разу не использовал subCA. Думаю, это актуально для больших систем. У меня таких не было никогда.
subCA оказалось не сложно развернуть, особо никаких нюансов нету , только в конфиге клиента нужно всю цепочку сертификатов держать и соблюдать последобавтельно - , при другой последовательности у меня подключения не устанавливались, так не смог понять почему OpenVpn Connect не захотел подключаться! на клиенте и сервере в логах ничего криминального, TunnelBlick подключается с тем же конфигом так что просто пользуюсь им
последовательность :)
я хотел написать потому что потратил время тусуя эти сертификаты , а в комментах знаки больше/меньше урезаются :D
[CA]
[clientCert
subCA]
[clientKey]
[ta]
Здравствуйте! Полезная статья, спасибо! Подскажите пожалуйста как реализовать при помощи того же vpn сервера возможность доступа к хостам которые находятся в филиалах по доменному имени, например office1.mycompany.ru, office2.mycompany.ru и тд. Вообще возможно ли такое? Как понимаю нужно задействовать службу dns на сервере, а дальше не соображу.
Обращение по имени с vpn вообще никак не связно. Нужно просто добавить dns записи по ip адресам ваших серверов.
Добрый день!
Есть два вопроса.
1) Как можно защитится от передачи пользователям сертификата другому пользователя.
2) Настроил всё как в гайде но при вводе команды netstat -nt | grep 13555 не отображаются подключенные клиенты, подключение по другим портам видно.
Не могу понять в чем дело.
С сервера и опорной машины клиента пинги идут и на клиентскую машину и на сервер/опорную. С клиентских машин обоих сетей не идут ни на какую машину другой подсети. Так же они не идут если пинговать от имени внутреннего тнтерфейса опорной/сервера.
ip_forward прописан.
Маршруты выглядят нормально.
Маршруты 192.168.251.0 255.255.255.0 10.1.1.5 UG 0 tun 0 на клиенте и 192.168.252.0 255.255.255.0 10.1.1.2 UG 0 tun 0 на сервере есть.
Пакеты в тунель с интерфейсов локалок не попадают (не форвардятся).
В чем может быть дело? Куда смотреть?
Такие проблемы все решаются одинаково - надо проверять все маршруты и настройки фаерволов. Больше проблем неоткуда взяться.
Вроде все делал по статье. Включая настройки iptables.
Нулевая метрика маршрута это нормально?
Строчка после добавления которой заработало.
$I -A FORWARD -i $L -o $V -j ACCEPT
I - iptables
L - local iface
V - tun0
Спасибо большое за статью, а также за обновление информации в ней.
Сервер запустился, а на клиенте (CentOS 8) после запуска не появляется интерфейс tun0. На каком этапе он должен появлятся? С чем может быть связано? CentOS-client настроен, как шлюз для офиса по вашей статье https://serveradmin.ru/nastroyka-shlyuza-dlya-lokalnoy-seti-na-centos-7/
Скорее всего клиент не запустился, раз интерфейс не поднялся. Надо смотреть системный лог messages на наличие ошибок и дополнительной информации. По умолчанию, openvpn туда свои логи пишет, если не настроен отдельный файл для них в конфигурации.
Статус службы - active. /var/log/messages отсутствует. Лог по адресу /var/log/openvpn/openvpn-client.log показывает:
TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
TLS Error: TLS handshake failed
SIGUSR1[soft,tls-error] received, process restarting
Restart pause, 300 second(s)
TCP/UDP: Preserving recently used remote address: [AF_INET]xxx.xxx.xxx.xxx:13555
Socket Buffers: R=[212992->212992] S=[212992->212992]
UDP link local: (not bound)
UDP link remote: [AF_INET]xxx.xxx.xxx.xxx:13555
То есть - проблема с сетью? Фаервол (iptables) ?
Не обязательно с сетью, но начинать проверки следует с нее.
Проблема была с файлом tc.key : он должен лежать на сервере рядом с server.conf и на клиенте рядом с client.conf. У меня он был на сервере в другом каталоге. Сервер на CentOS-7, клиент на CentOS-8, потому с каталогами напутал.
Текст ошибки, к сожалению, неинформативный. Часто так бывает. В логах пишет что-то про сеть, но проблема совсем в другом. Часто с таким сталкиваюсь.
Понимаю, что это не круто, но может кому сгодится, сам не тестил)))
https://cryptopunks.org/article/secure+openvpn+installer/
https://github.com/adamwalach/openvpn-web-ui/blob/master/docs/screenshots.md
А для чего в такой задаче нужен TLS? Решил посоветоваться, может чего то не так делаю.
Я создаю один ключ самим ovpn:
openvpn --genkey --secret /etc/openvpn/key22.key и копирую его на второй сервер.
Делаю конфиг:
remote 179.37.25.12
proto udp4
port 46752
dev tun-of7
keepalive 10 120
ping-timer-rem
persist-tun
persist-key
cipher AES-256-CBC
ifconfig 192.168.20.5 192.168.20.4
#route 192.168.1.0 255.255.255.0
secret /etc/openvpn/key22.key
status /var/log/ovpn-office7.log
На другом сервере конфиг такой же, только, remote, заменен на local и в ifconfig адреса меняю местами.
Все, systenctl start…
Повторюсь, хотел узнать грабли моего варианта, при соединении двух сетей? (или просто ноут - работа :)
А как сюда внешнего клиента в виде удаленного сотрудника подключить? Вы настроили Site-to-Site соединение. Если вам этого достаточно, то можно больше ничего не настраивать. Я так тоже делал иногда, когда точно не нужно было никого подключать, кроме двух серверов между собой.
>А как сюда внешнего клиента в виде удаленного сотрудника подключить?
Каждый новый клиент, в моей реализации - гемор. Показалось, что статья про side2side. Важность TLS для провайдеров vpn не отрицаю (нет опыта). В общем успокоили, с s2s не косячу. Еще раз, спасибо за темы и стиль изложения.
Спасибо Вам за обновление статьи, последний раз делал по нескольким статьям на разных сайтах, а теперь тут все в одном месте
А по этой одной получилось сделать? Она самодостаточна или чего-то не хватает? Я старался все основное охватить.
https://github.com/StreisandEffect/streisand
pritunl
Все и сразу
Может кто сделает такую же инструкцию только по L2TP как клиент к серверу микротик, а то везде какая то лажа
Может еще как сервер кому пригодится это работает https://github.com/xelerance/xl2tpd
Здравствуйте! В комментариях ответа не нашёл, хотя подобные вопросы были но остались без ответа. Если vpn сервер выступает в роли клиента сети а не шлюза. Шлюз на mikrotik получает на wan интерфейс серый ip адрес провайдерской сети. Вообще реализация по удалённому доступу к vpn серверу будет работать при таких условиях? Или в любом случае необходим белый IP?
Будет работать. Клиенту белый ip не нужен. Клиент vpn подключается к серверу и поднимает vpn канал. Далее на микротике, если он является дефолтным шлюзом для локальной сети, добавляете маршруты vpn туннеля и удаленных сетей за ним. Для этих маршрутов ставите шлюзом сервер, где vpn клиент. Вот и все.
Клиенты из локальной сети обращаются в удаленную сеть, микротик их переправляет на сервер с vpn клиентом, а тот дальше отправляет пакеты в удаленные сети через vpn.
Немного не пойму что то, как удалённый клиент знает что за адресом напр. 10.12.3.140/20 находиться vpn сервер? Интернет не знает ничего про адрес 10.12.3.140/20 к которому подключается клиент.
И в конфигурации сервера строка route 10.12.0.0 255.225.240.0 должна остаться? Или это нужно только если необходим доступ к сети клиента?
VPN сервер должен иметь внешний ip адрес. В моей статье в этом качестве выступает адрес 10.20.1.38. Просто у меня нет тестового стенда с внешним ip.
Здравствуйте!
я не в теме, но кажется у нас на предыдущей работе был аппаратный open VPN , на роутере Asus был такой функционал. Для оптимизации, интересно, можно в Головном Офисе поставить программный сервер, который Вы описали, а в филиалах аппаратный Open VPN ? подружатся филиалы с программным сервером в ГО?
Да, конечно можно. Единственное, у аппаратных реализаций openvpn наверняка будут какие-то специфичные требования к конфигурации. Их не сложно узнать и нужно будет учесть. К примеру, я использовал центральный openvpn сервер на базе centos и подключал к нему клиентов на mikrotik.
понял, спасибо!
mkdir /etc/openvpn/keys не хватает ключа -p
В целом да, с ключом более универсально. Но в данном случае это не обязательно, так как директория openvpn 100% будет после установки пакета.
Здравствуйте, с наступающим Вас! Возможно в комменте эта ситуация обсуждалась, извините за скорость.
Но не об этом, в общем столкнулся с такой проблемой, что после выполнения команды "systecmtl start openvpn@server", пропадает подключение к самому серверу из локальной сети по порту 22, но после не определённого времени возобновляется, но пароль не подходит, в дальнейшем так же сам сервер не может пинговать своё локальное окружение и это отражается на клиентах, после подключения к серверу не каких доступов и пингов в подсеть указанную в "route".
Сервер просто закрывается от местных своих скажем так, и у клиента подключение есть, но адрес внешний у него свой так и остается, ну и соответственно подсеть не видит за сервером, не хотел повторяться, так получилось)
Подскажите пожалуйста куда копать.
Ни разу не видел такой реакции на запуск openvpn сервера. Может с маршрутами в конфиге что-то напутали и запуск vpn ломает работу сети. Но я даже не уверен, что это можно сделать с помощью openvpn. Думаю, вы просто где-то капитально ошиблись в конфигах.
Спасибо за информацию. А если на VPS сервере размещены сайты, vpn сервер не будет мешать? Или надо арендовать VPS отдельно?
Мешать несколько некорректное слово в данном случае. Технически мешать не будет. А дальше смотрите сами, подходит вам такое соседство функционала или нет. Я предпочитаю функционал разделять.
Подскажите по поводу NAT
Настроил связь по Вашему примеру, раньше Centos-server и Centos-client, была настроена как то по другому, без NAT походу
В сети 192.168.10.0/24 есть Zabbix-server 192.168.10.8
В сети 192.168.20.0/24 zabbix-agent(ы)
После настройки сети с NATом zabbix-agent(ы) начали видеть сервер как 10.0.0.1 (т.е. VPN Server адрес), я конечно добавил его в конфиг агента, и все заработало, но мне не нравиться что все происходит через VPNовские адреса
Если я отключу NAT в iptables, нужно ли будет что-то еще настраивать?
Cпрашиваю, потому что это все делаю в рабочем режиме, не хочу оставлять офис надолго без работы
Отвечу сам себе, убрал NAT, все заработало как я хотел
Если у вас низкая скорость openvpn по tcp на windows
Добавляем в конфиг сервера.
sndbuf 0
rcvbuf 0
push "sndbuf 393216"
push "rcvbuf 393216"
Для UDP:
sndbuf 393216
rcvbuf 393216
push "sndbuf 393216"
push "rcvbuf 393216"
–Sndbuf размер
Установите размер буфера отправки сокета TCP / UDP. По умолчанию используется операционная система по умолчанию.
–Rcvbuf размер
Установите размер приемного буфера сокета TCP / UDP. По умолчанию используется операционная система по умолчанию.
При правельных конфигах есть разница TUN и TAP
TUN - на сервере автоматом поднимается интерфейс TUN0 - доступ клиентов только в интернет ( сервер за роутером ).
TAP - на сервере автоматом поднимается интерфейс TAP0 - доступ клиентов и в локалку и интернет ( сервер за роутером ).
Если сервер сразу от провайдера надо поднимать BRIGE - интерфейс.
Всегда читаю ваши статьи ! Напишите мне на мыло - есть увлекательные темы и вопросы !
Увлекательные для кого? Мне и так не скучно :)
Я немного ещё т2 cesbo и астериск + CRM локально . Всякие облака я не признаю !
Я тоже не скучаю zlodey1969@mail.ru
Владимир добрый день, как то в вашем Телеграмме вы говорили что обновите данную статью - очень-очень ждем)))
У openvpn есть обёртка в виде Pritunl. Если нужны только элементарные основные функции, он бесплатен для неограниченного количества клиентов и быстро настраивается.
Смотрел эту панель несколько лет назад. На тот момент она была бесплатна только для 2-х клиентов. У них больше нет этого ограничения?
Нету. Проверил только что.
Free:
Single server
Unlimited users
Unlimited devices
$0/month
Классная штука .. мне сэкономила столько времени и нервов ))))
Есть более гибкий, мульти-протокольный и совсем бесплатный SoftEther, но он не так удобен и не так быстро разворачивается.
Я понял, спасибо за информацию. Надо тоже потестить. Мне для небольшого числа юзеров нравится вот эта панель управления - https://serveradmin.ru/nastrojka-vpn-ipsec-s-pomoshhyu-internet-shlyuza-iks/#Nastrojka_svoego_VPN_servera Бесплатно для 9-ти пользователей.
Выглядит неплохо.
А он в бесплатной версии умеет объединять сети?
Каков его "free" список возможностей?
Single server - имеется ввиду что он не поддерживает кластер в бесплатной версии,
а не то что его только на 1 сервер ставить можно.
Всем привет!
Уже который день мучаюсь с настройкой сервера OpenVPN.
Суть такая:
У меня есть роутер, он раздает IP с своей сети 192.168.0.0
На сервере VPN стоит сеть 10.8.0.0
Если я подключаюсь к серверу VPN внутри сети роутера, то все норм!
Если подключаюсь к VPN из вне (мобильная сеть ТЕЛЕ2 с раздачей инета для бука), провайдер присваивает IP WiFi адаптеру 192.168.43.233, и TAP адаптер клиента OpenVPN берет Gateway с WiFi карты "192.168.43.1". И соответственно моя домашняя сеть перестает работать (не видно расшаренных папок и т.д.)
И еще есть один нюанс - при подключении бука к VPN через мобильную сеть, внутрисетевые IP пингуются (192.168.0.2), а расшаренные папки появляются после команды tracert 192.168.0.2
Ребята, можете мне объяснить, что за хрень происходит?)))
1. Почему TAP адаптер присваивает шлюз сетевой карты?
2. Почему я вижу внутреннюю сеть после команды tracert 192.168.0.2?
Вот конфиг OpenVPN:
local 192.168.0.10
client-to-client
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt tc.key
topology subnet
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "route 192.168.0.0 255.255.255.0"
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 192.168.0.1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
crl-verify crl.pem
explicit-exit-notify
Не подскажите, возможно ли настроить впн на Centos 8 так, чтобы можно было подключиться к сети дефолтной утилитой винды 10? Везде этот openvpn, не хочется использовать на винде сторонний софт для подключения к сети(
Можно. Настраивайте l2tp для этого. Его клиент есть в Windows.
А зачем использовать NAT для внутренних серых IP?
В каких-то ситуациях NAT нужна и в серых адресах. NAT не только для выхода в интернет бывает нужен.
Все вкурить не могу где у меня проблемы с Нат.
Есть роутер 91.xx.xx.x внутренняя сеть 10.0.0.1
Есть опенвпн c ip 10.0.0.2 и тап интерфейсом 192.168.0.1
Клинт получает адрес 192.168.1.2
Когда клиент подключается к любому адресу 10.0.0.4 то отображается адрес в линуксе что заходил 10.0.0.2 а не 192.168.1.2.
Хотя с 10.0.0.4 пинается адрес 192.168.1.2
В нашем офисе авторизация к впн по логину/паролю. Как указать данные для клиента openvpn?
На винде понятно - там выскакивает окно OpenVPN GUI.
Если на винде понятно, то где конкретно не понятно?
Очень интересует как подключить машину CentOS в качестве клиента к впн
А в чем конкретно проблема? Там нет никаких сложностей. Ставится пакет openvpn-client. Настраивается конфиг. Его формат примерно одинаковый для всех систем. Потом клиент через systemctl запускается.
Хорошо, благодарю. Тема организации удаленной работы сейчас весьма актуальна и данная статься пришлась очень кстати =)
А вот тут push "route 192.168.20.0 255.255.255.0" вместо 20 сети разве не 10 нужно передавать?
Все верно. Так и должно быть. Мы указываем, что этот маршрут на сервере обслуживает vpn тоннель. А следующей командой передаем маршрут клиенту.
Ну правильно через пуш мы передаем клиентам маршрут где находится сеть сервера, а у вас получается мы передаем клиентам их же сеть.
А всё увидел, на клиенте тоже в конфиге есть маршрут. Не внимательно смотрел.
А почему бы не добавить TLS...? Сгенерировать ta.key...
Все можно добавить и заменить. Статья уже давно ждет обновления и актуализации. Пока руки не дошли.
Спасибо большое за статью, было очень полезно. Еще здесь читал немало инфо о VPN сервисах с поддержкой Linux https://testvpn.ru/vpn-dlya-linux/
Что для себя выбрали?
Не могу сообразить что написать в iptables.sh если это не шлюз, а отдельная машина с OpenVPN
Огромное спасибо за статью, все получилось!
Хотел только уточнить, что в Centos 8 для корректного автозапуска сервера через systemctl
файл server.conf необходимо разместить не в /etc/openvpn/server.conf а подпапке server,
т.е. он должен находиться в /etc/openvpn/server/server.conf
судя по более ранним комментариям, я не первый, кто на эти грабли наступил,
буду признателен, если Вы сможете внести это уточнение в текст основной статьи
Спасибо за дополнение. Статья давно ждет своего часа на обновление. Думаю, это случится в ближайшее время. В планах стоит. Но обновить такой объемный материал большой труд.
Сама команда запуска серевера на CentOS 8:
systemctl start openvpn-server@server.service
клиента:
systemctl start openvpn-client@client.service
где "server" или "client" после @ - имя сертификата сервера или клиента соответственно, а перед @ - часть команды.
Добрый день.А как удалить уже ненужных клиентов на сервере чтобы они не могли соединяться?
В директории со скриптами есть скрипт revoke-all. Надо с его помощью отозвать сертификат:
# revoke-all unwanted-client-name
После работы скрипта появится файл crl.pem. Его надо добавить в конфиг сервера:
crl-verify /etc/openvpn/crl.pem
После этого отозванные сертификаты не смогут подключаться.
Доброго времени суток! возник вопрос, а может ли клиент работать одновременно и как сервер для одиночных подключений виндовых клиентов?
По сути клиент и сервер openvpn между собой никак не связаны. Вы можете настраивать как клиент, так и сервер на одном компьютере.
по сути да, но что-то не работает :)
есть два настроенных и работающих сервера OVPN, на них без проблем конектятся виндовые одиночные клиенты.
на одном из серверов пытаюсь запустить клиентскую настройку для объединения этих серверов постоянным тоннелем, но клиент не хочет конектится к серверу. все настройки серверов выполнены по этой статье
в логе клиента:
Mon Mar 23 11:46:11 2020 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
Mon Mar 23 11:46:11 2020 TCP/UDP: Preserving recently used remote address: [AF_INET]хх.хх.хх.хх:13555
Mon Mar 23 11:46:11 2020 Socket Buffers: R=[212992->212992] S=[212992->212992]
Mon Mar 23 11:46:11 2020 UDP link local (bound): [AF_INET][undef]:1194
Mon Mar 23 11:46:11 2020 UDP link remote: [AF_INET]хх.хх.хх.хх:13555
Mon Mar 23 11:47:11 2020 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Mon Mar 23 11:47:11 2020 TLS Error: TLS handshake failed
Mon Mar 23 11:47:11 2020 SIGUSR1[soft,tls-error] received, process restarting
Mon Mar 23 11:47:11 2020 Restart pause, 80 second(s)
может подскажет кто в чем причина?
Правильно ли я понимаю что на стороне где запускается два экземпляра OpenVPN должно подняться два TUN интерфейса?
Прошу прощения за беспокойство, все работает ))
В адресах запутался ))
При попытке применить правила iptables выдаёт такое:
Bad argument `tun+'
Try `iptables -h' or 'iptables --help' for more information.
интерфейс tun0 присутствует
В синтаксисе правила ошибка. Посмотрите внимательно на него.
Спасибо, перепроверил правила раз десять, но пока не сказали что там ошибка, не видел её.
Странно, почему при этой ошибке, ругается на tun+?
Статья, как всегда, отличная, но пора уже пофиксить устаревшее, а еще лучше, переписать под Centos 8 + SElinux :)
Читатели, если будете копировать конфиг сервера, учтите, что:
" 'comp-lzo' was deprecated in OpenVPN 2.4 and has been or will be removed in a later version".
Клиенты на маках будут получать назойливые уведомления, а после обновления все перестанут соединяться с сервером.
Фиксим конфиг:
compress lz4-v2 # новый формат для сжатия
push "compress lz4-v2" # передать настройку сжатия клиентам
Храни тебя бог, не работало и всё, я просто не мог понять что не так....... замена comp-lzo на compress lz4-v2 помогла
Привет, подскажи плз, я поднял OPENVPN сервер на VPS (Cent OS), с компов заходит на ура, с телефона через ПО OpenVPN connect вот не в какую, там заблочено на уровне ядра маршрутизация udp пакетов?
инет на телефоне 4г
ноут, на котором пашет, получает инет с телефона по 4г =)
сервер по tun, udp.
в логах пишется ошибка рукопожатия tls
Привет, подскажи пожалуйста, я поднял OPENVPN сервер на VPS (Cent OS), с компов заходит на ура, с телефоне через ПО OpenVPN connect вот не в какую, там заблочено на уровне ядра маршрутизация udp пакетов?
openvpn через tun по upd
на мобильнике инет через 4G
ноут, который получает инет с мобильника без проблем подключается к серверу впн
У меня нет проблем с подключением к openvpn серверам, настроенным по этой статье, на мобильном телефоне. Прямо сейчас настроены 3 разных подключения и все работают. Использую программу OpenVPN Connect.
Спасибо за статью, помогла весьма сильно в своё время.
Понадобилось тут запустить ещё одну копию OpenVPN сервера с другим конфигом. А как правильно ключи генерировать в таком случае, чтоб старые не затёрлись?
Папку easy-rsa-master скопировать в другое место и выпускать там сертификаты. Они все в этой директории хранятся.
Здравствуйте, есть задача прокинуть порты UDP 5060,10000-20000 от астериска который стоит за клиентом в ОВПН сеть, с iptables знаком минимально, поэтому назрел такой вопрос.
Схема:
ovpnclient+softphone
|
ovpnserver
|
ovpnclient
|
Asterisk
если не сложно напишите пожалуйста правила для iptables для PAT'а из приватной сети в локальную сеть за ovpnclient'ом
за ранее спасибо
парни, в двух словах, зачем всё это, когда есть pfsense??
В смысле зачем? Получается, если есть pfsense, то все остальные маршрутизаторы вообще не нужны стали? А если у тебя вся инфрастурктура построена на Centos и управляется через ansible playbooks, ты будешь их отдельно пилить для pfsense на базе freebsd? При том, что pfsense управляется через браузер.
Комбайны все в одном это решение для тех, кому так быстрее, проще управлять. Но оно подходит не всем. Уверен, что критическое обновление безопасности, обнаруженное в каком-нибудь компоненте системы быстрее приедет в centos, чем в pfsense.
Как решаете вопрос с бэкапом настроек VPN сервера, центра сертификации? Или если необходимо переносом данных на другой сервер? Какие файлы необходимо скопировать?
Решаю по месту, в зависимости от ситуации. Достаточно скопировать все файлы конфигураций и сертификаты. Много раз переносил openvpn на другой сервер. Проблем с этим нет никаких.
Нужна помощью. Перенес через копирование OpenVPN сервак с одной машины на другу, копированием. Теперь на новом у меня при старте службы орет: openvpn error opening configuration file service.conf Все права на новой машине соответствует старой. Что я не учел?!
Четко ошибка прописана:
openvpn error opening configuration file service.conf
Сервис не может найти конфиг по нужному пути.
Сделал в соответствии с документацией. Из дома я и коллеги к директориям и машинам по SSH/RDP подключаемся. А вот по Web-интерфейсам (допустим на ZABBIX, GLPI) подключиться не выходит. Пишет превышении времени ожидания, как я понимаю надо порты 443 и 80 пробрассовать.
Попробовал полностью пробросить порты:
$Tabl -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$Tabl -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
не помогло.
Попробовал с использованием PREROUTING и POSTROUTING прописать маршруты на вх/исх трафик на конкретны адреса по интерфейсу tun0, ни к чему не привело. Что надо в Iptables прописать что бы открыть все порты в VPN, полный доступ в локальную сеть и обратно?
Все, что касается настройки iptables для доступа к ресурсам через vpn сеть, в статье есть. Этих правил достаточно. Они разрешают весть трафик по vpn туннелям. Порты пробрасывать не надо, их надо открывать.
Смотрите, нет ли блокировки запросов на 80 и 443 порт на серверах с zabbix и glpi. Так же смотрите, чтобы на этих серверах были маршруты в vpn сеть. В общем случае, vpn сервер должен быть их шлюзом по-умолчанию. Если это не так, то надо маршруты прописывать для доступа в серые сети vpn.
Здравствуйте. Подскажите сделал все как в описании создал сервер centos 7 и клиент centos 7 все работает и пингуется, теперь не могу подключится локально виндовс 10. В общем после всех манипуляций при подключении через значка в трее openvpn gui выдает красную строчку TCP: connect to [AF_INET]ххх.ххх.ххх.ххх:13555 failed: Unknown error
Смотрите, что на сервере в логах в этот момент. Если совсем ничего, то похоже на сетевые проблемы. Клиент не может достучаться до сервера.
Добрый день!
В статье описывается объединение двух филиалов, а как добавить к нему последующие если в каждом из филиалов своя подсеть? Необходим выпуск сертификатов для каждого? Или возможна ли работа одного сертификата на нескольких клиентах? Если да, то будет ли работать если я в конфиге пропишу, скажем, route 192.168.0.0 255.255.0.0 и будут ли подключаться филиалы начиная с 192.168.1.0, заканчивая 192.168.30.0?
Еще один филиал добавляется без проблем. Для него выпускается еще один сертификат и по аналогии настраиваются маршруты. Если нужен доступ из всех филиалов ко всем, то во все три филиала добавляются маршруты о других филиалах.
Да, спасибо, я просто немного сглупил не дочитав статью до конца, ведь в разделе настройки Windows-клиента это описано. Я просто выпускаю сертификат с новым именем и через /etc/openvpn/ccd/new-cert-name делаю "соответствие" адресов и пушу маршруты а так же в конфиге сервера добавить строки новые, например:
route 192.168.20.0 255.255.255.0 # указываем подсеть, к которой будем обращаться через vpn
route 192.168.30.0 255.255.255.0 # подсеть второго филиала
push "route 192.168.20.0 255.255.255.0" # передаем маршрут клиентам
push "route 192.168.30.0 255.255.255.0" # передаем маршрут клиентам второй подсети
Да, все верно. Причем через маршруты вы можете управлять доступом из одного филиала в другой. Обычно нет необходимости всем филиалам бывать на всех других. ПУшите в филиал только те маршруты, что там реально нужны.
Добрый день.
Хочу настроить связку Микротик, а за ним openvpn.
Что принципиально следует учесть если настраивать по Вашей статье?
Какие правила следует добавить на Микротик, чтобы создать режим моста между Ovpn?
Или просто настроить проброс пота к ovpn серверу:
chain=dstnat action=netmap to-addresses=192.168.5.89 protocol=udp port=1194 log=no
Подскажите, а что будет при замене сетевого адаптера , т.е. mac адреса, можно ли использовать тот же сертификат сервера, или его нужно перегенерить?
Ключи и сертификаты клиентов будут работать, или их тоже нужно менять
Ничего не надо делать. Сертификат никак не привязан к серверу и сетевым интерфейсам. Его можно без проблем переносить на другой сервер и использовать там. Клиенты будут подключаться.
Скажите пожалуйста, могу ли я настроить vpn сервер на виртуальной машине и подключаться к нему из своей основной ОС. При этом я не имею белого ip?
при настройки клиентской части, tun0 не поднимается. При этом systemctl restart openvpn@client не выдает никаких ошибок. Помогите в чем может быть проблема ?
Настроил, все отлично. Вопрос в одном: не могу понять почему фтп не работает(коннект есть, при попытке считать каталог - дисконнект) через впн сервер. Есть ли какие либо моменты которые надо учитывать?
Закооментил в конфиге сервера строчку
# route 192.168.20.0 255.255.255.0 # указываем подсеть, к которой будем обращаться через vpn?
и интерфейсы на месте, не отключаются, полет пока номальный :)
Я получил надежный вылючатель интерфейса : systemctl start openvpn@server.service раз, и все сервер доступен только с локальной консоли.
systemctl stop openvpn@server.service и все восстанавливается, даже SSH становиться доступен!
Все делалось по мануалу, чудеса начались со старта OPENVPN,
HELP , как это вылечить, из за чего такое ?
Привет.
Столкнулся с такой проблемой. Настроен шлюз+squid+OpenVPN server в ЦО и к нему подключаются 4 ф-ла OpenVPN client. Все работает отлично. Всех юзеров с ф-лов завернул на proxy в ЦО и спокойно настраиваю для них правила. Но вот беда) один из ф-лов в ЦО попадает весь трафик как от OpenVPN clienta по внутреннему адресу. Что ограничивает настройку proxy, т.е одно правило настраивается сразу для всего ф-ла.
Сеть ЦО 192.168.0.Х
Сеть VPN 10.0.X.X
Сеть проблемного ф-ла 192.168.9.Х, с него приходит весь трафик как 10.0.9.1
С других ф-лов трафик приходит с сети 192.168.Х.Х (т.е не внутренней)
Куда смотреть ?
Маршруты уже проверил.
Я так понимаю, в сторону NAT надо смотреть для интерфейса tun, который использует этот филиал.
Все настроено через интерфейс tap, полностью переписал iptables по аналогии другого ф-ла, но трабл остался.
Не понял, а откуда тогда берется подсеть 10.0.X.X? Если я не ошибаюсь, то tap интерфейс объединяет все подключения в единое адресное пространство. Сам никогда не использовал tap, могу ошибаться.
Никогда не работал с tun, всегда использовал tap, не буду утверждать за отличия. Но tap отлично справлялся с разными сетями и под сетями.
Каждый ф-ал имеет свою сеть 192.16.Х.Х
А связаны они между собой 10.0.X.X
Тогда я не понимаю, в чем смысл tap и отдельной маршрутизации для филиалов? Интерфейс tap используется для создания моста и работает на 2-м канальном уровне osi. https://ru.wikipedia.org/wiki/TUN/TAP
https://www.linux.org.ru/forum/admin/7962987
Мне кажется вы что-то путаете.
Итак, проблема была в понимании : Кого просить о сервисе? Просить нужно было интерфейс Tun, у мня он Tun01, именно на нем отвечает и отлично функционирует сервис Астериска, настраивать телефоны нужно было на него.
Но кто ж знал , адрес локальный сервера 192.168.x.x пингуется , вэб морда FPBX открывается, чего же надо, логично , что и телефон настраивать на 192.168.x.x, ан нет нужно на 10.8.0.1. Кстати 10.8.0.1 это адрес изначально заточеный в FPBX под OpenVPN, важно ли его использование , не знаю, но там своя настройка Iptables , и к ним лучше подстраиваться, логично не шалить, тем более , что "диапазон тоннеля может быть любым".
Таким образом телефоны работают, что и нужно было критично
Что хотелось бы , но не критично пока:
Шлюз в интернет не пингуется , клиенты друг друга тоже не видят, с другой стороны еще не факт , что прооблема есть. Клиенты на Win10 и маршруты уперто не передаются. Т.е. нужно поставить линуксовую машинку и проверить есть ли глюк. :D
Нет, как раз все работает, кроме телефонов по Vpn, а без него , звонят и пашут как часы
Здравствуйте , помогите понять где проблема
Итак DREEPBX Distro ? поднял OpenVPN ? обнаружил, что там уже была предуствновка его же, но получилось и вроде все работает, клиенту подключаются, а дальше косяки: маршруты Win 10 , тупо не желает принимать, программные телефоны через тоннель подключаться не желают. В туннеле пингунтся сервер, и шлюз туннеля , более того открывается Webморда FPBX и еще пару сайтов c сервака, то есть между интерфейсами траффик ходит. Только Sip не хочет, firewall отключал, включал - нет результата. У FPBX 13-14 firewall свой, заточенный под PBX ? что вносит свои и плюсы и минусы.
Не ясен следующий нюанс:
В адаптере клиента 10.11.11.6 нет шлюза, есть только адрес DHCP сервера 10.11.11.5 , пинг по этому адресу не проходит, а по адресу интерфейса Tun01 10.11.11.1 без проблем, пингуется
То есть клиент 6 прет через шлюз ..5 , Сервер врет , что это DHCP, другому клиенту xx.10 он уже говорит , что DHCP на 9 адресе, сам же OPenVPN ждет запросов на TUN 01 интерфейсе на x.x.x.1 адресе ?
push "redirect-gateway def1" ничего не меняет ,по крайней мере в конфиге клиента , то ли он передает обманку адрес DHCP, то ли как и маршруты win 10 не желает получать? Ну и как передать клиенту шлюз 10.11.11.1
Что делать то?
Кстати , может кто знает, как можно пиговать через определенный, указанный шлюз ?
Друг, с такими проблемами тебе вряд ли кто поможет. Я даже не осилил понять, что написано. Возникло ощущение, что не работает все :)
Зашел в тупик:
root ~ # systemctl start openvpn@server
Failed to start openvpn@server.service: Unit not found.
Как решить проблему?
Возможно конфиг сервера называется не server.conf.
Проверил, все верно.
root /etc/openvpn # ls
ca.crt client dh.pem easy-rsa keys server server.conf server.crt server.key
А так запускается:
root ~ # openvpn /etc/openvpn/server.conf
Mon Jan 21 23:02:55 2019 OpenVPN 2.4.6 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Jul 5 2018
Mon Jan 21 23:02:55 2019 library versions: OpenSSL 1.0.2k-fips 26 Jan 2017, LZO 2.06
Mon Jan 21 23:02:55 2019 Diffie-Hellman initialized with 2048 bit key
Mon Jan 21 23:02:55 2019 ROUTE_GATEWAY 192.168.12.1/255.255.255.0 IFACE=enp3s0 HWADDR=1c:1b:0d:44:fe:04
Mon Jan 21 23:02:55 2019 TUN/TAP device tun1 opened
Mon Jan 21 23:02:55 2019 TUN/TAP TX queue length set to 100
Mon Jan 21 23:02:55 2019 do_ifconfig, tt->did_ifconfig_ipv6_setup=0
Mon Jan 21 23:02:55 2019 /sbin/ip link set dev tun1 up mtu 1500
Mon Jan 21 23:02:55 2019 /sbin/ip addr add dev tun1 local 10.8.0.1 peer 10.8.0.2
Mon Jan 21 23:02:55 2019 /sbin/ip route add 10.8.0.0/24 via 10.8.0.2
RTNETLINK answers: File exists
Mon Jan 21 23:02:55 2019 ERROR: Linux route add command failed: external program exited with error status: 2
Mon Jan 21 23:02:55 2019 Could not determine IPv4/IPv6 protocol. Using AF_INET
Mon Jan 21 23:02:55 2019 Socket Buffers: R=[212992->212992] S=[212992->212992]
Mon Jan 21 23:02:55 2019 TCP/UDP: Socket bind failed on local address [AF_INET][undef]:1194: Address already in use (errno=98)
Mon Jan 21 23:02:55 2019 Exiting due to fatal error
Mon Jan 21 23:02:55 2019 Closing TUN/TAP interface
Mon Jan 21 23:02:55 2019 /sbin/ip addr del dev tun1 local 10.8.0.1 peer 10.8.0.2
Надо тогда systemd конфиг смотреть. Может там ошибка, либо не установился. Ни разу с таким не сталкивался.
Смотреть тут - /usr/lib/systemd/system
Должны быть файлы:
openvpn-client@.service
openvpn-server@.service
openvpn@.service
Нужен последний шаблон конфига.
Проверил там все папки. Таких файлов нет.
У вас какая-то проблема с установкой. Рекомендую переустановить openvpn.
Получилось создать файл:
root ~ # systemctl enable openvpn-server@server.service
Created symlink from /etc/systemd/system/multi-user.target.wants/openvpn-server@server.service to /usr/lib/systemd/system/openvpn-server@.service.
Но что-то пошло не так:
root ~ # systemctl status openvpn-server@server.service
● openvpn-server@server.service - OpenVPN service for server
Loaded: loaded (/usr/lib/systemd/system/openvpn-server@.service; enabled; vendor preset: disabled)
Active: activating (auto-restart) (Result: exit-code) since Пн 2019-01-21 23:36:41 MSK; 4s ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Process: 12413 ExecStart=/usr/sbin/openvpn --status %t/openvpn-server/status-%i.log --status-version 2 --suppress-timestamps --cipher AES-256-GCM --ncp-ciphers AES-256-GCM:AES-128-GCM:AES-256-CBC:AES-128-CBC:BF-CBC --config %i.conf (code=exited, status=1/FAILURE)
Main PID: 12413 (code=exited, status=1/FAILURE)
янв 21 23:36:41 web-server systemd[1]: Failed to start OpenVPN service for server.
янв 21 23:36:41 web-server systemd[1]: Unit openvpn-server@server.service entered failed state.
янв 21 23:36:41 web-server systemd[1]: openvpn-server@server.service failed.
Разобрался. Нужно было перенести server.config в другую папку etc/openvpn/server
В моем случае, мне нужен был просто клиент VPN на CentOS 8, чтобы подключиться к шлюзу PFsense, на котором работает сервер VPN и с которого была экспортирована конфигурация. После того, как конфигурация была положена в папку /etc/openvpn/client, при попытке выполнить
# systemctl start openvpn@client
выдавалось сообщение с ошибкой "Failed to start openvpn@client.service: Unit not found."
Все попытки перекладывать куда-то конфигурацию, смотреть статус службы выдавали одно и тоже. Либо Unit not found, либо что вообще нет такой службы. Переустановка openvpn тоже ничего не дала.
Плюс к тому с PFsense конфигурация экспортируется в формате *.ovpn. Может быть этот файл можно просто переименовать в *.config, что я пробовал делать и это не помогало, и в результате оставил его в формате .ovpn все равно.
Полечил таким образом:
В конфигурации самой службы я указал использовать свой файл конфига. Понимаю, что функциональность перестает быть универсальной, но в моем случае это не важно.
В файле /usr/lib/systemd/system/openvpn-client@client я изменил строчку:
ExecStart=/usr/sbin/openvpn --suppress-timestamps --nobind --config myConfig.ovpn
Соответственно, на сколько я понял, в этой строчке можно было бы оставить что-то вида ... --config %I.ovpn, чтобы без проблем подсовывать туда конфигурации из PFsense.
После этого создал symlink на службу клиента, как любезно подсказал Westus.
# systemctl enable openvpn-client@client.service
После запроса статуса службы
# systemctl status openvpn-client
мне выдалось сообщение с ошибкой в статусе, что мне бы следовало сделать
#systemctl daemon-reload
что я и сделал.
После этого служба openvpn-клиента стала запускаться с помощью:
systemctl start openvpn-client@client
В самой конфигурации VPN у меня прописан параметр
auth-user-pass fileWithCredentials.txt
чтобы клиент подключался автоматом с логином и паролем, указанным в файле fileWithCredentials.txt
Поскольку я нахожусь в разных сетях с сервером CentOS, меня соответственно выкинуло из консоли, что я исправил добавлением маршрута к своей сети:
#ip route add 10.0.xx.0/24 via 10.0.xx.254 dev devXXX
проверил, что доступ появился и добавил в /etc/sysconfig/network-scripts/route-devXX
строчку
10.0.xx.0/24 via 10.0.xx.254 dev devXXX
чтобы маршрут стал постоянным.
P.S.: только не закидывайте меня тапками, please! Я вообще ничего не понимаю в Линуксах, пытаюсь учиться на ходу... Напишите, если я что-то сделал неправильно.
у меня на этом шаге выдает ошибку, пароль ввожу какой и до этого
./easyrsa sign-req client client
Using configuration from ./safessl-easyrsa.cnf
Enter pass phrase for /etc/openvpn/keys/easy-rsa-master/easyrsa3/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:'canada'
Certificate is to be certified until Jan 2 23:13:37 2022 GMT (1080 days)
failed to update database
TXT_DB error number 2
Easy-RSA error:
signing failed (openssl output above may have more detail)
Отличная статья. Вопрос - а процесс перевыпуска сертификата после завершения действия этого сертификата как выглядеть будет?
Там по дефолту по-моему на 10 лет выпускается. Мне еще ни разу не приходилось сталкиваться с перевыпуском :) Но я не вижу тут никаких проблем. Выпускается новый сертификат и все.
Не могли бы вы подсказать как это делается?
Так ровно так же, как описано в статье. С нуля выпускается CA, потом серверный сертификат и клиентские. И всё заменяется. Тут полный перевыпуск всего должен быть, есть надо заменить сертификат удостоверяющего центра.
Спасибо большое
Коллега, спасибо за статью. По ней пытался поднять VPN-client на шлюзе Debian 8. Изначально шлюз был на windows. Решил заменить на Debian (т.е. сервер OpenVPN у меня уже был поднят и все работало). После всех настроек. Компы на стороне Debian видят всю сеть на стороне сервера, а наоборот нет! Правда было исключение компьютер на Windows XP пинговался (со стороны сети сервера OpenVPN)...
Короче пару часов убил, нашел решение. Немного переписал Ваш файл с конфигурацией файервола. Ниже важные правила, после чего у меня все запинговалось.
export ПОДСЕТЬ_OpenVPN =10.0.0.1/24
export ПОДСЕТЬ_сети_за_сервером_OpenVPN = 192.168.0.1/24
$IPT -A FORWARD -i tun0 -j ACCEPT
$IPT -A FORWARD -i tun0 -o $LAN1 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -i $LAN1 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -t nat -A POSTROUTING -s $ПОДСЕТЬ_OpenVPN -o $LAN1 -j MASQUERADE
$IPT -t nat -A POSTROUTING -s $ПОДСЕТЬ_сети_за_сервером_OpenVPN -o $LAN1 -j MASQUERADE
Может кому то время сэкономлю...
Здравствуйте! Спасибо за статью.
У вас в криншотах, после установки соединения на сервере:
tun0: mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.10.0.1 peer 10.10.0.2/32 scope global tun0
на клиенте : ..... inet 10.10.0.6 peer 10.10.0.5/32.
По логике на клиенте должно быть: .........inet 10.10.0.2 peer 10.10.0.1/32
Почему при установлении одного туннеля мы видим, что задействованы 4 адреса:
10.10.0.1
10.10.0.2
10.10.0.5
10.10.0.6
?
Причем, что с сервера, что с клиента противоположные концы тоннеля почему-то не пингуются?
Здравствуйте! Спасибо огромное за толковую статью, долго собирал куски информации по инету, прежде чем наткнутлся на вашу. Очень сильно помогло и сэкономило время. Все настроил, все работает, за исключением мелочи.Вроде не нашел в статье упоминания об этом
Есть сервер OpenVPN, есть 2 роутера с подсетями, которые коннектятся к серверу - все друг друга видят из подсетей, все хорошо.
А если я из сторонней сети за-за NAT коннекчусь к серверу OpenVPN отдельной машиной (с внутренним адресом машины, допустим, 192.168.100.100 и адресом клиента VPN 10.100.0.10) - подсети за роутерами я вижу. А они эту машину 10.100.0.10 - нет. Возможно ли сделать, чтобы и она была видна из любой подсети?
Добрый день. Спасибо за статью.
Вопрос в следующем, можно ли изменить конфигурацию клиента или сервера так, что бы определенный клиент или группа клиентов при подключении к серверу получала доступ не ко всей посети, а к одному конкретному серверу?
Можно. Самый простой вариант, который сразу приходит в голову - сделать статические ip для клиентов openvpn и с помощью фаервола настроить необходимый доступ для этих адресов.
Если таких клиентов много, то лучше их в отдельный vpn туннель завести с отдельной подсетью. Так проще управлять и настраивать доступ будет.
Добрый день! Что делать если у меня только один сетевой интерфейс (LAN\WAN) ?
#!/bin/bash
#
# Объявление переменных
export IPT="iptables"
# Интерфейс который смотрит в интернет
export WAN=eth0
export WAN_IP=192.168.1.25
# Локалка
export LAN=eth0
export LAN_IP_RANGE=192.168.10.0/24
Добрый день! 2 вопроса, видел вариант настррйки OpenVPN на https://www.digitalocean.com/community/tutorials/how-to-set-up-and-configure-an-openvpn-server-on-centos-7 можете ответить в чем разница от вашей конфигурации?
2-й вопрос, видел настройку VPN в режиме bridge https://www.server-world.info/en/note?os=CentOS_7&p=openvpn&f=1, можете подсказать для чего оно делается?
1. Принципиальной разницы нет, по сути то же самое настраивается.
2. По второй ссылке не увидел ничего особенного, только интерфейс tap, в не tun, как у меня. В чем разница я описал в статье.
Строго говоря, при наличии белыъх ип с каждой стороны, можно бросить два тонеля и тогда проблема исчезнет.. но.... Не для того мы гуглим бест практикс, и пилим конфиги, чтобы вот так легко взять и сдаться... не для того сервис, чтобы взять и просто сделать по тонелю в каждую посдеть... Это же не наш метод... Знатоки, выручайте.. я уже все версии перебрал... что с этим капризным роутингом не так ).
Уточню, что есть просто 1 сервер, к нему цепляется клиент и ЗА ним подсеть, ни сам сервер ни подсеть в которой живёт севрер - никак не может заглянуть ЗА этого клиента. client-to-client включено..
Просто не могу понять что я делаю не так. Конечно можно через одного этого клиента бросать пакеты через форвардинг и форвардить чреез пачку портов всё, но это не совсем удобно... хотелось бы именно между подсетью ЗА клиентом и плжсеть в котрой живёт сервер организовать связь... в чём проблема не могу понять.
У меня одного не пробросываются сети за клиентами ? Отказывается срабатывать параметр iroute. Проверено tcpdump'ами пакеты бегут из сети сервера и маскарадятся всё как полагается, но как только попытка доступа в сеть ЗА одним из клиентов (ovpn согласно таблице маршрутов должен зарулить пакет на внутренний свой адрес и "знать" какая подсеть живёт за клиентом, параметр iroute лишь фильтр чтобы не передавать подсеть за клиентом самому клиенту ) то до клиентам пакетики отказываются заруливаться.
Маскарадинги включены, дампы говорят что всё как надо заруливается на внутренний ип ovpn'а. но вот до самого клиента пакет не доходит (по любому протоколу, все ифейсы в доверенных зонах так что любой протокол не роутиться).
в общем знатоки, подскажите в чём может быть загвоздка (форвардинги включены, маскарадинги включены, всё правила нарисованы через firеwall-cmd - просто ифейсы добавлены в доверенные зоны то есть всё должно быть ок).
в ощбем всё работате ок.... кроме одной детали... не видятся подсети за клиентами )) Гугл не помог - ибо везде ссылаются на параметр iroute. (все сети которые живут ЗА клиентами - пропушены, в конфиг сервера добавлены, в общей итаблице маршрутизации всё добавлено). Уже голову сломал в чём проблема. Хоть исходники ovpn открывай. Что я делаю не так )
Zerox, не сталкивались с таким, что после установки и настройки сервера указаный порт в настройках не находится в состоянии LISTEN?
Много раз использовал ваш мануал и все было без проблем.
А тут напоролся и не могу понять в чем проблема.
21 и 22 порты LISTEN, опен впновский не слушается, хотя через netstat выдается:
udp 0 0 0.0.0.0:6333 0.0.0.0:* 999/openvpn
Все отбой, понял, это же UDP.
День добрый! Настроил все по Вашей статье, все получилось, спасибо!
Есть такой вопрос, можно ли к такой конфигурации прикрутить openvpnadmin на webmin?
Думал об этом, но все руки не доходили проверить. Мне кажется, что если использовать webmin, то надо настраивать в нем с самого начала. Не думаю, что если установить на готовую конфигурацию, то он ее корректно воспримет и позволит управлять.
Здравствуйте, коллеги.
Подскажите, пожалуйста, где можно посмотреть информацию о принципах работы туннельных интерфейсов в контексте linux? В частности сейчас очень интересует механизм прохождения ipip-трафика через netfilter. Самому картину сложить не удаётся.
Может быть, кто-то сможет на словах объяснить?
Конфигурация простая:
2 территориально удалённых шлюза. Каждый смотрит одним интерфейсом в интернет, другим в локальную сеть.
На обоих шлюзах CentOS. Поднят IPIP-туннель. Соответственно, помимо двух физических сетевых интерфейсов, на каждом ещё есть виртуальный ifcfg-tun.
Интересно, что происходит, после того, как пакет по туннелю попадает на физический внешний интерфейс шлюза. Где происходит декапсуляция, как пакет передаётся от физического внешнего интерфейса виртуальному, какой процесс обеспечивает фунционирование туннельного адаптера и тд
tcpdump'ом вижу на внешнем интерфейсе ipip-пакеты, а на туннельном - данные уже декапсулированы. Схему прохождения пакета через netfilter в голове держу, но сообразить как всё работает не удаётся.
Всё ж просто. Качаем версию пакета прям с исходниками, открываем, смотрим (не забываем ещё джержать в голвое что у нас есть кернел спейс, не забываем про ipc и все интерфейсы внутри ko плюс помним что обработка пакетов ведётся ещё и фаером, у кторого часть функций внутри юзерспейса в часть в ядре ) в итоге получается маленькая схемка такая на всю стену в кабинете ).
зы: кроме шуток, такие вопросы наверное более актуальны для разработчиков. а то если вы задаёте вопрос что во что инкапсулируется... чтобы актуальыне данные получать их надо либо копирвоать до того как их любой процесс как-то обработал, а схемы работы netfilter гуглятся
Спасибо за мануал. Очень помог. Только вот была странность на клиенте, он получал маску 255.255.255.252 вместо 255.255.255.255
тут проблемой служило отсутствие в конфиге сервера строка topology subnet.
Сейчас проблема другая: имеется две сети 192.168.100.0/24 и 192.168.77.0/24. есть сеть туннеля 10.31.0.0/24 есть pc1 в сети 1 и pc2 в сети 2
при подключении к серверу pc1 получает адрес 10.31.0.2 а pc2 получает адрес 10.31.0.3 адрес сервера в туннеле 10.31.0.1.
так вот пинг между pc1 и pc2 есть только по их туннельным адресам, а по их реальным адресам они не пингуют друг друга. Кроме того с сервера опенвпн тоже не пингуются ни pc1 ни pc2 по реальным адресам. Приведу route -n:
[root@pfsense openvpn]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 xx.x6.70.1 0.0.0.0 UG 0 0 0 eth0
10.31.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
xx.x6.70.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
xxx.xxx.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
192.168.77.0 10.31.0.2 255.255.255.0 UG 0 0 0 tun0
192.168.100.0 10.31.0.2 255.255.255.0 UG 0 0 0 tun0
теперь route print -4 с pc1:
IPv4 таблица маршрута
===========================================================================
Активные маршруты:
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
0.0.0.0 0.0.0.0 192.168.100.1 192.168.100.3 25
10.31.0.0 255.255.255.0 On-link 10.31.0.2 276
10.31.0.2 255.255.255.255 On-link 10.31.0.2 276
10.31.0.255 255.255.255.255 On-link 10.31.0.2 276
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
192.168.77.0 255.255.255.0 10.31.0.1 10.31.0.2 20
192.168.100.0 255.255.255.0 On-link 192.168.100.3 281
192.168.100.3 255.255.255.255 On-link 192.168.100.3 281
192.168.100.255 255.255.255.255 On-link 192.168.100.3 281
224.0.0.0 240.0.0.0 On-link 127.0.0.1 306
224.0.0.0 240.0.0.0 On-link 192.168.100.3 281
224.0.0.0 240.0.0.0 On-link 10.31.0.2 276
255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
255.255.255.255 255.255.255.255 On-link 192.168.100.3 281
255.255.255.255 255.255.255.255 On-link 10.31.0.2 276
========================== =================================================
и route print -4 с pc2:
IPv4 таблица маршрута
===========================================================================
Активные маршруты:
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
0.0.0.0 0.0.0.0 192.168.100.1 192.168.100.3 25
10.31.0.0 255.255.255.0 On-link 10.31.0.2 276
10.31.0.2 255.255.255.255 On-link 10.31.0.2 276
10.31.0.255 255.255.255.255 On-link 10.31.0.2 276
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
192.168.77.0 255.255.255.0 10.31.0.1 10.31.0.2 20
192.168.100.0 255.255.255.0 On-link 192.168.100.3 281
192.168.100.3 255.255.255.255 On-link 192.168.100.3 281
192.168.100.255 255.255.255.255 On-link 192.168.100.3 281
224.0.0.0 240.0.0.0 On-link 127.0.0.1 306
224.0.0.0 240.0.0.0 On-link 192.168.100.3 281
224.0.0.0 240.0.0.0 On-link 10.31.0.2 276
255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
255.255.255.255 255.255.255.255 On-link 192.168.100.3 281
255.255.255.255 255.255.255.255 On-link 10.31.0.2 276
===========================================================================
Хотел узнать. Зачем нужны ca.crt client.crt и server.crt если у нас есть прешаред server.key одинаковый на обоих пирах?
Всегда соединял два сервера созданием одного ключа и пятью строками в конфиге. Может я что-то упускаю?
Добрый день.
Настроил все по вашему ману, но задача у меня не много иная не до конца все работает есть vds сервер с белым айпи есть клиенты zyxel kenetic с юсб модемами серыми айпи за натом провайдера за zyxel есть видео регистраторы к котором надо попадать по белому айпи vds/
VDS OPENVPN сервер ip 94.x.x.x
openvpn Тунель ip 10.0.0./24 пинги работаю в обе стороны
внутренняя сеть zyxel 192.168.8.0/24
видеорегистратор за zyxelом 192.168.8.100
так вот у меня не пингуеться с сервера сам регистратор 192.168.8.100
и как с внешнего айпи по нужному порту про кинуть в впн на видеорегистратор.
[spoiler]
server.conf
port 1313 # я предпочитаю использовать нестандартные порты для работы
proto tcp # протокол может быт и tcp, если есть необходимость в этом
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem
server 10.0.0.0 255.255.255.0 # подсеть для туннеля, может быть любой
route 192.168.8.0 255.255.255.0 # указываем подсеть, к которой будем обращаться$
push "route 10.0.0.0 255.255.255.0" # передаем маршрут клиентам
# push "route 192.168.8.0 255.255.255.0"
ifconfig-pool-persist ipp.txt # файл с записями соответствий clinet - ip
client-to-client # позволяет клиентам openvpn подключаться друг к другу
client-config-dir /etc/openvpn/ccd # директория с индивидуальными настройками к$
keepalive 10 120
#comp-lzo
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 3
[/spoiler]
[spoiler]
iptables
#!/bin/bash
#
# Объявление переменных
export IPT="iptables"
# Интерфейс который смотрит в интернет
export WAN=eth0
export WAN_IP=94.X.X.X
# Очистка всех цепочек iptables
$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
# разрешаем локальный траффик для loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# Разрешаем исходящие соединения самого сервера
$IPT -A OUTPUT -o $WAN -j ACCEPT
# Разрешаем 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 $WAN -o tun+ -j ACCEPT
# Маскарадинг
$IPT -t nat -A POSTROUTING -o tun0 -j MASQUERADE
#$IPT -t nat -A POSTROUTING -o $WAN -s tun0 -j MASQUERADE
# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
# Пропускать все уже инициированные соединения, а также дочерние от них
$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
# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
# Приводит к связыванию системных ресурсов, так что реальный
# обмен данными становится не возможным, обрубаем
$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 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
# Открываем порт для ssh
$IPT -A INPUT -i $WAN -p tcp --dport 1327 -j ACCEPT
$IPT -A INPUT -i $WAN -p tcp --dport 1313 -j ACCEPT
$IPT -A INPUT -i $WAN -p udp --dport 1313 -j ACCEPT
# Открываем порт для DNS
#$IPT -A INPUT -i $WAN -p udp --dport 53 -j ACCEPT
# Открываем порт для NTP
#$IPT -A INPUT -i $WAN -p udp --dport 123 -j ACCEPT
# Логирование
# Все что не разрешено, но ломится отправим в цепочку undef
$IPT -N undef_in
$IPT -N undef_out
$IPT -N undef_fw
$IPT -A INPUT -j undef_in
$IPT -A OUTPUT -j undef_out
$IPT -A FORWARD -j undef_fw
# Логируем все из undef
$IPT -A undef_in -j LOG --log-level info --log-prefix "-- IN -- DROP "
$IPT -A undef_in -j DROP
$IPT -A undef_out -j LOG --log-level info --log-prefix "-- OUT -- DROP "
$IPT -A undef_out -j DROP
$IPT -A undef_fw -j LOG --log-level info --log-prefix "-- FW -- DROP "
$IPT -A undef_fw -j DROP
# Записываем правила
/sbin/iptables-save > /etc/sysconfig/iptables
[/spoiler]
В своих конфигурациях вы сами разбирайтесь, я искать ошибки не буду. Скажу только, что это реально. Я сам так делаю. Есть сервер с белым ip, есть дачные дома с серыми ip через мобильную связь. Эти дома подключаются по vpn к серверу. На сервере настроен проброс на эти регистраторы. Проброс получается двойной. Сначала с белого ip на роутер с серым ip, а потом с этого роутера на регистратор. Если все сделать аккуратно и правильно, будет работать. Нужно проверять все элементы - сервер, модемы в домах, настраивать маршруты.
Спасибо,за ваш ответ может хотя бы тыкаете в какой нибудь ман ??
*ткнёте
можете подсказать , как сделать чтоб по каждому пользователю подключившемуся по vpn велся лог действий в сети?
Этот вопрос не имеет отношения к vpn. Чтобы следить за всей сетевой активностью, перехватывая все сетевые пакеты, нужен отдельный софт. Я сомневаюсь, что есть хороший, бесплатный вариант такого софта. По крайней мере мне такой не попадался. В общем случае, нужно просто собирать дамп всей сетевой активности и анализировать его.
сетевую активность я могу проанализировать. но проблема в том что мне необходимо именно по пользователю vpn дергать инфу. в документации к openvpn не нашел чтоб можно вообще вести лог подключаемых пользователей. единственный вариант который я нашел, это тупо фиксировать ip для каждого устройства, а не по пользователю
Вы же подключаете людей по сертификатам. Для каждого сертификата можно назначить статичный ip через ccd. А дальше уже по ip собирать статистику. Либо через лог-файл статуса брать информацию о подключенных клиентах и их ip. Там это все фиксируется.
Спасибо, делал по статье, всё работает.
Один вопрос: как прописать на сервере статический маршрут в сеть клиента? то есть:
мне нужен доступ со стороны centos openvpn сервера в сеть клиента. Команда ip route add - всё работает, пингутеся, всё ок. Но после перезагрузки роут пропадает.
в network-scripts делал файл route-tun0 - не работает (при этом там же файл route-eth0 на выдуманный маршрут - работает).
Как ещё можно прописать статический маршрут для tun0 интерфейса? спасибо.
Всё оказалось просто (хотя полдня потратил на поиск )))
надо в server.conf указать указать сеть клиента:
route 192.168.1.0 255.255.255.0,
где 192.168.1.0 сеть клиента
Так об этом же в статье рассказано :)
SELINUX=disabled
ламер...
Добрый день.столкнулся с проблемой на сервере почему то интерфейс eth0 видит tun0. для чистоты эксперимента iptables отключал, net.ipv4.ip_forward = 1 прописал , что может быть еще?
я так понимаю мне не поможете?!
Тут советом не помочь, а разбираться в чужих конфигурациях у меня нет возможности.
Решил проблему SoftEther VPN Client
Нет , показалось :D Вопрос с запуском клиета в Open VPN сервере доступа по прежнему актуален, тем более , что версия удаленного сервера может быть иной, в моем случае провайдер прелдлагает отразец настроек с сертификатом в тексте конфига. То есть tun адаптер занят обслуживанием входящих подключений + для исходящего подключения нужно "совместиться" с требованиями удаленного сервера доступа :(
А в чем конкретно проблема? Можно отдельно запускать клиент и сервер, причем сколько угодно клиентов и серверов. У каждого будет свой конфиг и свой интерфейс tun1, tun2 и т.д.
Создаете в директории с openvpn 2 конфига, один client.conf, второй server.conf Настраиваете в конфигах все, что надо, только разные tun интерфейсы указываете. Потом запускаете отдельно сервер, отдельно клиент:
systemctl start openvp@server
systemctl start openvp@client
Спасибо за ответ, но можно уточнить:
Для сервера указывали tun - в системе появился tun0
Для клиента в конфиге пишем , что tun1 ?
Лучше всем явно указать tun0, tun1 и т.д.
Итак, благодаря Вашей статье есть сервер удаленного доступа, как теперь сделать его клиентом к другому серваку?
Адаптер то 1 tun0 и шифрование TLS нужно на нем же запустить клиента. Клиент получит адрес, и.. не глюкнет ли вся конструкция ?
Здравствуйте уважаемый. Спасибо за мануал.
Благодаря Вам быстро настроил сервер и решил задачу подклбчения IP телефонов удаленных сотрудников.
И когда все было сделано, обновление прошивки телефонов добавило к Open Vpn разделу поля юзер и пароль. :)
Что наводит на подозрения , о возможности идентификации клиента либо вообще без сертификатов, либо без клиентских?
Но , тогда не понятно где и как на сервере задавать user-пароль?
Если это важно телефоны GXP1620 , в них есть PPoE и OpenVpn подключения, сервер Centos 7.
Из глюков : пропал доступ к web морде Elastix . но его удалось легко восстановить
Еще раз спасибо за Вашу работу.
Я настраивал на этих аппаратах openvpn. Интересная возможность, которая на удивление еще и работает нормально, без глюков. Главное подобрать параметры opevpn сервера под требования телефона, так как на телефоне клиент не настраивается.
:D Знаете , я не знал об этих сложностях , мне , в виду отсутствия инструментария на стороне "клиента" , сложнее было угадать параметры на нем и логику его подключения. Но , вроде , правда работает стабильно . Теперь нужно к провайдеру по vpn подключиться и можно закрывать порты на роутере.
Подключение тупых "железяк" вообще отдельная тема, не слишком освещенная. Вот, к примеру, у этого же телефона есть PPoe, а у меня на роутере, о счастье, есть функция PPoE server. Удачно? Ну приемлемо, только эта хрень на роутере , по моему, не работает вообще. Мне не удалось ее завести ни на 480 , ни на 470, ни на 604W моделях TP-Link. Есть правда и PPTP и работающий, но его нет на телефоне.
Кстати , если интересно, скриншоты настроек телефона могу скинутьБ если скажете куда.
это на windows так говорит, когда хотел подключить удалённый комп. Между двум просто супер работает
Привет! У меня такая ошибка
Tue Apr 03 16:25:34 2018 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
ВНИМАНИЕ: Не проверен метод проверки сервера - translate google
помогите! :)
А чем помочь то? Это просто предупреждение, не ошибка. Плюс дана ссылка, где можно прочитать о чем идет речь. Если не понимаешь, о чем идет речь, просто не обращай внимание. Это не страшно :)
Бьюсь вторую неделю и не могу найти где косяк, нет интернета с клиента. В связи с чем вот мой iptables Может сможете подсказать где косяк. А то не могу понять.
#!/bin/bash
export IPT="iptables"
# Внешний интерфейс
export WAN=eth0
export WAN_IP=109.*.*.*
# Локальная сеть
export LAN1=eth1
export LAN1_IP_RANGE=192.*.*.*/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
# Разрешаем 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
# разрешаем установленные подключения
$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 INPUT -s 84.122.21.197 -j REJECT
# Разрешаем доступ из локалки наружу
$IPT -A FORWARD -i $LAN1 -o $WAN -j ACCEPT
# Закрываем доступ снаружи в локалку
$IPT -A FORWARD -i $WAN -o $LAN1 -j ACCEPT
# Пробрасываем внешний порт на локальный адрес и порт
$IPT -t nat -A PREROUTING -d 109.*.*.*/32 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.*.*.*:25
# Включаем NAT
$IPT -t nat -A POSTROUTING -o $WAN -s $LAN1_IP_RANGE -j MASQUERADE
$IPT -t nat -A POSTROUTING -o tun0 -j MASQUERADE
# открываем доступ к SSH
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT
#$IPT -A INPUT -i $WAN -p tcp --dport 25 -j ACCEPT
# Открываем доступ к почтовому серверу
$IPT -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
#$IPT -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
#$IPT -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
#$IPT -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
#$IPT -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
#$IPT -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
#Открываем доступ к web серверу
#$IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
#$IPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
$IPT -A INPUT -i $LAN1 -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -i $LAN1 -p tcp --dport 443 -j ACCEPT
#Открываем порт VPN сервера
$IPT -A INPUT -p udp -m udp --dport 882 -j ACCEPT
#Открываем доступ к DNS серверу
#$IPT -A INPUT -i $WAN -p udp --dport 53 -j ACCEPT
# Включаем логирование
$IPT -N block_in
$IPT -N block_out
$IPT -N block_fw
$IPT -A INPUT -j block_in
$IPT -A OUTPUT -j block_out
$IPT -A FORWARD -j block_fw
$IPT -A block_in -j LOG --log-level info --log-prefix "--IN--BLOCK"
$IPT -A block_in -j DROP
$IPT -A block_out -j LOG --log-level info --log-prefix "--OUT--BLOCK"
$IPT -A block_out -j DROP
$IPT -A block_fw -j LOG --log-level info --log-prefix "--FW--BLOCK"
$IPT -A block_fw -j DROP
# Сохраняем правила
/sbin/iptables-save > /etc/sysconfig/iptables
скрипт сервера ВПН взят от сюда
настроил по инструкции и столкнулся с проблемой. соединение клиентов с удаленной сетью проходит, работают. а вот интернет на клиентах пропал. что не так?
Зависит от того, как клиенты получают интернет. В общем случае, если у них пропал интернет, значит либо изменился шлюз по-умолчанию, либо на самом шлюзе что-то изменилось, что привело к пропаже интернета.
Только что настроил все по статье. Она актуальна.
Нашел проект на гитхабе по установке openvpn, на мой взгляд с точки зрения безопасности и быстродействия, в свете версии 2.4 у них оч грамотно сделан скрипт. При небольшом допиливании их скрипта адаптировал под себя.
https://github.com/Angristan/OpenVPN-install
Мощный скрипт. Не хватило терпения все осмысленно проверить. Что там полезного есть, если в двух словах? Всякие dns блоки и настройка iptables меня не интересуют. В самом конфиге server.conf чего-то интересного и полезного не увидел. В общем, не очень понял, для чего это.
Вместо DH - ECDH, TLS-Auth, шифрация - AES-GCM. Все это есть только на 2.4. Ну и полноценный скрипт по генерации конфигов для юсеров. Что не понравилось - скрипт трогает штатный юнит systemd - соответственно при обновлении все слетит и как следствие запуск нескольких демонов на разных портах невозможен. Да и настройку ипитаблес зря они в скрипт прилепили. Если будете смотреть - смотрите сразу ветку openvpn-2.4-update.
Спасибо. Скрипт для генерации конфигов мне пригодится. У самого все никак не доходят руки сделать. Посмотрю, как там сделано. У меня, кстати, тоже часто несколько тоннелей на разных портах, и соответственно разные systemd юниты.
Подскажи что надо исправить чтоб работал клиент под Андроидом. При подключении на андроиде пропадает интренет. Делал все по статье. Необходимо обеспечить подключение смартфонов и планшетов к рабочей сети, удаленная работа в сети предприятия
При выполнении ./easyrsa sign-req server server
выдает ошибки:
ERROR: on line 16 of config file '/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/extensions.temp'
140617769633696:error:02001002:system library:fopen:No such file or directory:bss_file.c:175:fopen('/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/index.txt.attr','rb')
140617769633696:error:2006D080:BIO routines:BIO_new_file:no such file:bss_file.c:182:
140617769633696:error:0E078072:configuration file routines:DEF_LOAD:no such file:conf_def.c:195:
140617769633696:error:0E079065:configuration file routines:DEF_LOAD_BIO:missing equal sign:conf_def.c:345:line 16
В сети не нашел ответа из-за чего возникают данные ошибки. Может подскажите причину и метод решения?
разобрался. последняя сборка мастера не github оказалась косячная.
Нужна консультация по настройке конфигов. Суть в чем, необходимо сделать VPN для сотрудников, чтоб могли подключаться с любых ПК и мобильных устройств. Сервер VPN он же шлюз. Настроил по данной инструкции в итоге не вышло.
сервер сконфигурировал:
port 882 # я предпочитаю использовать нестандартные порты для работы
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
server 192.168.10.0 255.255.255.0 # подсеть для туннеля, может быть любой
route 192.168.0.0 255.255.255.0 # указываем подсеть, к которой будем обращаться через vpn
push "dhcp-option DNS 192.168.0.220" # передаем маршрут клиентам
ifconfig-pool-persist ipp.txt # файл с записями соответствий clinet - ip
client-to-client # позволяет клиентам openvpn подключаться друг к другу
client-config-dir /etc/openvpn/ccd # директория с индивидуальными настройками клиентов
keepalive 10 120
comp-lzo
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 3
Клиент:
client
dev tun
proto udp
remote 109.202.11.243 882
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
comp-lzo
verb 3
ca /path/to/ca.crt
cert /path/to/client.crt
key /path/to/client.key
в итоге. при подключении выдает ошибку:
Wed Dec 26 10:53:22 2017 UDP link local (bound): [undef]
Wed Dec 26 10:53:22 2017 UDP link remote: [AF_INET]109.202.11.243:882
Wed Dec 26 10:53:22 2017 read UDP [ECONNREFUSED]: Connection refused (code=111)
Wed Dec 26 10:53:24 2017 read UDP [ECONNREFUSED]: Connection refused (code=111)
Wed Dec 26 10:53:29 2017 read UDP [ECONNREFUSED]: Connection refused (code=111)
Wed Dec 26 10:53:36 2017 read UDP [ECONNREFUSED]: Connection refused (code=111)
Wed Dec 26 10:53:52 2017 read UDP [ECONNREFUSED]: Connection refused (code=111)
Wed Dec 26 10:54:22 2017 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Wed Dec 26 10:54:22 2012 TLS Error: TLS handshake failed
Wed Dec 26 10:54:22 2012 TCP/UDP: Closing socket
Wed Dec 26 10:54:22 2012 SIGUSR1[soft,tls-error] received, process restarting
В принципе, в логе все написано, куда копать:
Wed Dec 26 10:53:52 2017 read UDP [ECONNREFUSED]: Connection refused (code=111)
Wed Dec 26 10:54:22 2017 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Я часто вижу подобные ошибки и они действительно сетевые, но не всегда лежат на поверхности. Нужно все аккуратно проверять и пробовать подключаться из разных мест. Я частенько не могу подключиться через мобильных операторов, как раз ошибка TLS выскакивает. Может на фаерволе что-то не так сделано, правила перепутаны, переадресации или пробросы какие-то. В общем, надо аккуратно во всем разбираться на месте.
сейчас увидел что на сервере интерфейс tun нет
не могу понять почему не создается интерфейс tun
Столкнулся с этой же проблемой.
как успехи? сумел понять почему интерфейс не поднимается? я нет, лог чист.
Уважаемый, я смотрел, интерфейс tun уже имелся на серваке еще до всякого OPenVPN
лежит где то тут /dev/net/tun он размером 0 права 666 может создать и наступит счастье?
Но вряд ли..
Подскажите какие программы и модули нужны. Не могу подписать сертификат сервера
Добрый день. Получилось выпустить клиентов через openvpn. Но возникла проблема с подключением с android устройств (на маках не пробовал). Подскажите плыз, может кто-то сталкивался с проблемой подключения на andorid?
log:
Вопрос снят, это все настройки самого клиента на android.
Но если кто ткнет носом на статейку как правильно создать конфигурационный файл для клиентов на моб (android, ios)? буду очень признателен. Так как моб клиенты, почему-то не видят filename.ovpn.
А ищи.
В этом весь OpenSource.
Вторая нога не знает, куда идет первая.
У всех все по-своему. Без стандартизации.
добрый день
спасибо за статью
возникла одна проблема при установке которую не могу ни нагуглить ни сам решить
[root@Openvpn easyrsa3]# ./easyrsa sign-req server server
Note: using Easy-RSA configuration from: ./vars
Usage: rand [options] num
where options are
-out file - write to file
-engine e - use engine e, possibly a hardware device.
-rand file:file:... - seed PRNG from files
-base64 - base64 encode output
-hex - hex encode output
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 3650 days:
subject=
commonName = server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from ./openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :PRINTABLE:'server'
ERROR: adding extensions in section default
140605755951008:error:22097082:X509 V3 routines:DO_EXT_NCONF:unknown extension name:v3_conf.c:124:
140605755951008:error:22098080:X509 V3 routines:X509V3_EXT_nconf:error in extension:v3_conf.c:93:name=copy_extensions, value=copy
Easy-RSA error:
signing failed (openssl output above may have more detail)
подскажите пожалуйста что я делаю не так
пробовал обновить openssl (не помогло)
# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
# yum -y install gcc
# yum -y install gcc-c++
# yum install make
# cd /usr/local/src
# wget https://www.openssl.org/source/openssl-1.0.2-latest.tar.gz
# tar -zxf openssl-1.0.2-latest.tar.gz
# cd openssl-1.0.2a
# ./config
# make
# make test
# make install
# mv /usr/bin/openssl /root/
# ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
# openssl version
OpenSSL 1.0.2l 25 May 2017
Надо гуглить ошибку и смотреть, в чем может быть проблема. Так трудно что-то советовать. У меня обычно все штатно проходит, без проблем.
говорят в easyrsa надо исправить
источник #https://github.com/OpenVPN/easy-rsa/commit/bc586578b4d6318e1a00317e5a14a19311649eac#diff-231cb43897d7aa2a98dfda5720c2b40fL537#
- EASYRSA_EXTRA_EXTS="
+ local extra_exts="
и
- print "$EASYRSA_EXTRA_EXTS" | \
+ print "$extra_exts" | \
но у меня уже исправленно хз проблама была в 2015 году и в новой версии должны были поправить но ничего не работает
centos 3 раза перебивал
походу дело в скрипте
Может у кого есть рабочий архив - поделитесь пожалуйста
Коллеги пожалуйста у кого есть
Столкнулся с такой же проблемой вчера. Не нужно качать версию мастер (wget https://github.com/OpenVPN/easy-rsa/archive/master.zip)
Скачайте последнюю стабильную версию, например (https://github.com/OpenVPN/easy-rsa/archive/v3.0.3.zip). Мастер не всегда стабилен.
Добрый день! Возможно ли подключиться к OpenVPN серверу клиентом модема, например TP-Link. Там, на сколько понял, нет выбора сертификата с которым можно будет подключиться.
Спасибо за статью! Очень полезно. Один из вопросов, как заставить весь трафик клиента идти в тоннель в обход локального подключения к интернету?
Гугли вот этот параметр:
push redirect-gateway def1
Его нужно передать клиенту, чтобы он весь траффик пускал через vpn.
Спасибо! Но к сожалению складывается странная ситуация, при завороте трафика от клиента серверу, клиент не может выйти в интернет через сервер. Подключение есть, сеть на сервере видна и доступна, а вот трафик клиента в интернет не выходит. Как по моему мнению связано это может быть со следующим моментом.
На свежеустановленной системе iptables некорректно обрабатывает конфиги данные в статье (в этой и в соседних про настройку сервера и firewall).
Конкретнее, iptables игнорирует все настройки что ниже этих строк (раздел *filter)
INPUT DROP
OUTPUT DROP
FORWARD DROP
Пока не изменить здесь значение на ACCEPT, сервер даже сам не может выйти в интернет хотя ниже в конфиге это разрешено.
C firewall надо разбираться, чтобы работало без ошибок.
Еще надо не забыть настроить NAT на openvpn интерфейсе на сервере. Без этого клиенты не смогут выходить в интернет по vpn, используя в качестве шлюза vpn сервер.
Не удалось никак заставить работать iptables корректно. Так как времени экспериментировать у меня больше не было вернул 6 цент, все настройки легли сразу и заработали верно, а интернет клиентам шарится через две опции:
В скрипт добавляется строка: $IPT -t nat -A POSTROUTING -s tun0 -o $WAN -j MASQUERADE
В конфиг openvpn сервера добавляется: push "redirect-gateway def1"
Ещё раз спасибо огромное за серию статей! Мне это сильно помогло.
В centos 7 по-умолчанию используется firewalld. Это обертка управления над iptables. Возможно из-за этого не получилось сразу настроить iptables. У меня об этом рассказано в статье про настройку iptables.
Понимаю что автору сообщения уже не актуально, но может будет полезно тому кто столкнулся с такой проблемой. Я добавил правило
$IPT -A FORWARD -i tun0 -o $WAN -j ACCEPT доплнительно к $IPT -t nat -A POSTROUTING -s tun0 -o $WAN -j MASQUERADE и все заработало. PS Автору спасибо за труд, статьи очень пригодились при настроке сервера.
Доброго времени суток. Большое спасибо за столь подробное написание статьи!
Только столкнулся с такой проблемой, подключаюсь удаленным клиентом (на Windows) к серверу, подключение проходит, маршрут нужный прописывается. Но, не пингуется и не доступна сеть за сервером, хотя интерфейс сервера подключенный к локальной сети пингуется. Перенаправление трафика между интерфейсами включен и в iptables все настроено. Можете подсказать в чем может быть проблема или в какую сторону копать? Заранее спасибо!
Проблемы тут может быть 3, хотя по всем трем вы написали, что все в порядке. Но нужно проверять каждый нюанс в отдельности:
1. Что маршруты верно указаны и реально работают.
2. Что фаервол настроен правильно и реально все пропускает. Можно включить его логирование для разбора этой ситуации.
3. Убедиться, что форвард пакетов между сетевыми интерфейсами точно включен и работает.
4. Убедиться, что в сети за сервером на конечных машинах тоже настроен фаервол и он не блочит запросы. Например, включенный фаервол винды по-умолчанию не пропускает пинги.
5. На машинах за сервером должен быть указан шлюз по-умолчанию именно vpn сервер, либо иным образом корректно настроены все маршруты. То есть проверять маршруты нужно не только на стороне клиента, который подключается по vpn, но и на стороне локальной сети, к которой должен быть доступ. Иначе может возникнуть ситуация, что клиент корректно обращается в локальную сеть и его пакеты долетают, а вот ответы назад не приходят.
Спасибо за помощь! Все получилось.
В чем была проблема?
Проблема оказалась в 3 дневной усталости и по итогу невнимательности =) В iptables форвард не так был настроен. Сегодня "свежим" взглядом ещё раз пробежался по скрипту и нашел ошибку. Еще раз спасибо =)
Здравствуйте!
Спасибо за статью. Я только с нее начал изучать Centos. Только у меня проблема возникла в процессе настройки.
У вас написано: Создаем запрос сертификата для сервера без пароля с помощью опции nopass, иначе придется вводить пароль с консоли при каждом запуске сервера:
# ./easyrsa gen-req server nopass
У меня в результате после команды пишет: -bash: ./easyrsa: No such file or directory
Что сделать, чтобы у меня было бы так как у вас в статье?
В тексте ошибки же все написано. Указанный фал не найден. Вы выполняете команду, будучи в каталоге, где нет файла easyrsa. Нужно перейти в каталог с ним.
спасибо, я уже стал более менее разбираться, просто команды не знаю. В общем с этим разобрался уже. Сейчас встал на следующей проблеме при запуске сервера. Она уже обсуждалась выше, но решения ее я не понял:
добрый вечер,при запуске вылитае ошибка, подскажите пожалуйста
[root@localhost easyrsa3]# systemctl start openvpn@server
Job for openvpn@server.service failed because the control process exited with error code. See «systemctl status openvpn@server.service» and «journalctl -xe» for details.
Ответить
Zerox 16.05.2017 at 23:13
Надо набрать в консоли
systemctl status openvpn@server.service
и посмотреть текст ошибки.
Ответить
Вадим 16.05.2017 at 23:44
извините за беспокойство, это nano не сейвнуло конфигурационный файл, спасибо за Ваши статьи, очень упростили жизнь
Ответить
Алексей 26.06.2017 at 10:56
У меня такая же ошибка. Как ее исправить? Вот текст ошибки:
● openvpn@server.service — OpenVPN Robust And Highly Flexible Tunneling Application On server
Loaded: loaded (/usr/lib/systemd/system/openvpn@.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2017-06-26 10:41:40 MSK; 6min ago
Process: 56316 ExecStart=/usr/sbin/openvpn —cd /etc/openvpn/ —config %i.conf (code=exited, status=1/FAILURE)
Main PID: 56316 (code=exited, status=1/FAILURE)
Jun 26 10:41:40 centos.ruvds.com systemd[1]: Starting OpenVPN Robust And Hig….
Jun 26 10:41:40 centos.ruvds.com systemd[1]: openvpn@server.service: main pr…E
Jun 26 10:41:40 centos.ruvds.com systemd[1]: Failed to start OpenVPN Robust ….
Jun 26 10:41:40 centos.ruvds.com systemd[1]: Unit openvpn@server.service ent….
Jun 26 10:41:40 centos.ruvds.com systemd[1]: openvpn@server.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
Здравствуйте у меня такая беда делал всё по статье всё работает за исключением одной мелочи когда я пингую сервер шлюз всё хорошо пинги проходят а когда пытаюсь пропинговать windows 7 со включенным брендмауером пинги не проходят но если брендмауер выключить то всё хорошо что можно исправить чтобы всё работало со включенным брендмауером помогите плиз мучаюсь уже 2 неделю
Не понял, в чем проблема? На windows фаервол блокирует пинги. Его либо настроить надо, чтобы он пропускал пинги, либо отключить. Это не проблема со связью.
На клиенте
IPv4 таблица маршрута
===========================================================================
Активные маршруты:
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.166 10
10.0.0.0 255.255.255.0 On-link 10.0.0.4 276
10.0.0.4 255.255.255.255 On-link 10.0.0.4 276
10.0.0.255 255.255.255.255 On-link 10.0.0.4 276
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
192.168.0.0 255.255.255.0 On-link 192.168.0.166 266
192.168.0.166 255.255.255.255 On-link 192.168.0.166 266
192.168.0.255 255.255.255.255 On-link 192.168.0.166 266
192.168.1.0 255.255.255.0 10.0.0.1 10.0.0.4 20
224.0.0.0 240.0.0.0 On-link 127.0.0.1 306
224.0.0.0 240.0.0.0 On-link 192.168.0.166 266
224.0.0.0 240.0.0.0 On-link 10.0.0.4 276
255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
255.255.255.255 255.255.255.255 On-link 192.168.0.166 266
255.255.255.255 255.255.255.255 On-link 10.0.0.4 276
===========================================================================
На сервере:
[root@openvpn-vm ~]# ip ro
default via 192.168.1.1 dev eth0 proto static metric 100
10.0.0.0/24 dev tun0 proto kernel scope link src 10.0.0.1
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.199 metric 100
[root@openvpn-vm ~]# iptables -L -nv
Chain INPUT (policy ACCEPT 7421 packets, 662K bytes)
pkts bytes target prot opt in out source destination
72 7406 ACCEPT all -- tun+ * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1443 76908 ACCEPT all -- tun+ * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- * * 10.0.0.0/24 192.168.1.0/24
0 0 ACCEPT all -- * * 192.168.1.0/24 10.0.0.0/24
Chain OUTPUT (policy ACCEPT 1562 packets, 152K bytes)
pkts bytes target prot opt in out source destination
Конфиг сервера:
mode server
daemon vpn-server
port 1194 # я предпочитаю использовать нестандартные порты для работы
proto udp # протокол может быт и tcp, если есть необходимость в этом
dev tun
topology subnet
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem
server 10.0.0.0 255.255.255.0 # подсеть для туннеля, может быть любой
#route 192.168.0.0 255.255.255.0 # указываем подсеть, к которой будем обращаться через vpn
push "route 192.168.1.0 255.255.255.0" # передаем маршрут клиентам
#push "redirect-gateway def1" # Перенаправлять default gateway на vpn-сервер. Если не нужно - закомментировать.
#push "redirect-gateway"
ifconfig-pool-persist ipp.txt # файл с записями соответствий clinet - ip
client-to-client # позволяет клиентам openvpn подключаться друг к другу
client-config-dir /etc/openvpn/ccd # директория с индивидуальными настройками клиентов
keepalive 10 120
comp-lzo
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 3
Конфиг клиента:
dev tun
proto udp
remote xxxx.net 1194
client
ca C:\\OpenVPN\\sauto\\ca.crt
cert C:\\OpenVPN\\sauto\\fedorov.crt
key C:\\OpenVPN\\sauto\\fedorov.key
#route 192.168.1.0 255.255.255.0
persist-key
persist-tun
comp-lzo
verb 3
Конфиг iptables (многое что перепробовал, сейчас пытаюсь без всякиъ блокираторов траффика делать)
#!/bin/bash
#
export IPT="iptables"
# Очистка всех цепочек iptables
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
export LAN_RANGE=192.168.1.0/24
export OPENVPN_RANGE=10.0.0.0/24
# Allow TUN interface connections to OpenVPN server
$IPT -A INPUT -i tun+ -j ACCEPT
# Allow TUN interface connections to be forwarded through other interfaces
$IPT -A FORWARD -i tun+ -j ACCEPT
$IPT -A FORWARD -s $OPENVPN_RANGE -d $LAN_RANGE -j ACCEPT
$IPT -A FORWARD -s $LAN_RANGE -d $OPENVPN_RANGE -j ACCEPT
#iptables -t nat -A POSTROUTING -o tun+ -j MASQUERADE
iptables -A POSTROUTING -s 192.168.1.0/24 -t nat -o tun0 -j MASQUERADE
# Записываем правила
#/sbin/iptables-save > /etc/sysconfig/iptables
Нашел на забугорном сайте настройки iptables
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
iptables -A OUTPUT -o tun+ -j ACCEPT
Здравствуйте, я уже достаточно долго бьюсь над созданием сервера openvpn по вашей статье.
У меня есть сервер, который имеет одну сетевую карту eth0.
Сделал проброс порта на роутере порта 1194 на этот сервер.
Но я никак не могу увидеть сеть со стороны сервера от клиента.
net.ipv4.ip_forward = 1
push "route 192.168.1.0 255.255.255.0" # передаем маршрут клиентам
Необходимое прописано.
Конфиг для настройки iptables использовал ваш, чуть изменил под свои нужды.
По сути запрещающие правила в iptables мне не нужны.
Что мне нужно прописать в iptables для того, чтобы сеть стала видна?
По своему опыту могу сказать, что вопрос доступности сети за клиентом или сервером чаще всего возникает из-за неправильных или отсутствующих маршрутов между узлами. Смотрите в первую очередь на них и проверяйте, чтобы на всех необходимых узлах присутствовали все необходимые маршруты для правильного хождения пакетов.
для проверки причины лучше всего начать с команды tracert(windows) или traceroute(linux).... она поможет понять до какого узла маршруты есть и где "затык"
понимаю что ответ уже по истечении многих лет, но для других может будет полезно))
добрый вечер,при запуске вылитае ошибка, подскажите пожалуйста
[root@localhost easyrsa3]# systemctl start openvpn@server
Job for openvpn@server.service failed because the control process exited with error code. See "systemctl status openvpn@server.service" and "journalctl -xe" for details.
Надо набрать в консоли
systemctl status openvpn@server.service
и посмотреть текст ошибки.
извините за беспокойство, это nano не сейвнуло конфигурационный файл, спасибо за Ваши статьи, очень упростили жизнь
У меня такая же ошибка. Как ее исправить? Вот текст ошибки:
● openvpn@server.service - OpenVPN Robust And Highly Flexible Tunneling Application On server
Loaded: loaded (/usr/lib/systemd/system/openvpn@.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2017-06-26 10:41:40 MSK; 6min ago
Process: 56316 ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/ --config %i.conf (code=exited, status=1/FAILURE)
Main PID: 56316 (code=exited, status=1/FAILURE)
Jun 26 10:41:40 centos.ruvds.com systemd[1]: Starting OpenVPN Robust And Hig....
Jun 26 10:41:40 centos.ruvds.com systemd[1]: openvpn@server.service: main pr...E
Jun 26 10:41:40 centos.ruvds.com systemd[1]: Failed to start OpenVPN Robust ....
Jun 26 10:41:40 centos.ruvds.com systemd[1]: Unit openvpn@server.service ent....
Jun 26 10:41:40 centos.ruvds.com systemd[1]: openvpn@server.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
Тут обрезан лог, ничего не понятно. Нужен полный.
Подскажите, как поднять два OpenVPN сервера на одном IP.
Один для tcp, другой для udp подключений.
У меня нет готовой инструкции, но это делается без проблем. Я неоднократно запускал несколько vpn серверов на одном сервере. Для этого нужно сделать разные имена конфигов, изменить параметры порта или tcp/udp и изменить стартовые скрипты. При этом сертификаты могут быть одни и те же для сервера.
На сервере 1 интерфейс, на него с роутера идет проброс уличного порта
Чудес не бывает. Если маршруты все нужные переданы, фаерволы настроены, роутинг включен, должно работать. Но в винде я не знаю, что еще проверять, я никогда на ней шлюзы и vpn серверы не настраивал.
автору спасибо за огромную работу!
может и без сертификатов со стороны клиента, только нужно указать в клиентском конфиге ca.crt
все написано
https://openvpn.net/index.php/open-source/documentation/howto.html#auth
Using alternative authentication methods
подскажите, плиз. Сервер/клиент win-платформа, туннель пингуется в обе стороны, серверная подсеть клиенту передана, роутинг на клиента указан (обратка), но пинга нет ни туда ни обратно. Где копать?
А сам роутинг между сетевыми интерфейсами на сервере включен? Честно говоря, не знаю, где это на винде настраивается. Я никогда шлюзы на винде не делал.
Твое обучение уже началось, но ты этого не заметил. Я вижу твое полное отсутвие понимание темы сертификатов, ты вообще ничего не знаешь по теме аутентификации и шифрования и какой впн какие стандарты использует. Почитай, погугли. Я думаю гугл тебе быстро подскажет. Там где ты киваешь на пароли на самом деле стоят сертификаты за кулисами, проосто ты об этом не знаешь. Вместо того, чтобы надувать себя как пузырь, мог бы просто сказать, что по этой теме ты ничего не знаешь. Было бы честно. Учи мат часть, как говорится. Не буду больше на тебя тратить время.
Разочарован уровнем ответов. Зачем вообще статью писать если в гугле можно все найти? Я думал автор понимает концепцию, но выходит, что просто меанические действия умеет исполнять и в действительности не понимает что делает. Нет знаний о шифровании, просто механически генерит сертификаты, а зачем? Что они делают не знает. Так почему не 100 сертов сгенерил, а только 10. Со 100 сертами то может безопаснее бы было? Чем больше тем безопаснее, генери не задумываясь.
Какие проблемы. Делаешь свой сайт, показываешь, как нужно писать классные статьи и ответы высокого уровня. Я захожу к тебе и учусь у тебя как надо. Но почему-то ты у меня на сайте, а не я у тебя.
Мне видится использование сертификатов более удобным, чем пароли, поэтому я постоянно пользуюсь сертификатами и даже не интересуюсь, может ли openvpn работать без них. Мне это не надо. Если это надо тебе, изучи сам вопрос, а не проси меня это сделать за тебя.
основной вопрос был в том можно ли openvpn без клиентских сертификатов использовать? Какие другие варианты есть без клиентских сертификатов я знаю, это все настраивал - pptp, l2tp, IKEv2, SSTP. Последние 2 имеют хорошую гибкость, там можно настраивать и с клиентскими сертификатами и без. Но нужен такой ВПН, который сможет бегать по 443 порту, то есть проникать в зафильтрованных сетях. Из упомянутых это только SSTP, но под него нет клиента на Android. Есть нечто платное но подозреваю, что вообще там через проксирование сделано, а не нативно напрямую. Openvpn же может бегать через 443 порт и клиент на андроиде бесплатный есть. Можно ли openVPN поднять без клиентских сертификатов? Это основной вопрос. И кстати, предложенные 2 варианта pptp, l2tp не используют концепцию асимметричного шифрования, в отличие от IKEv2, SSTP, openvpn, https. А только эта концепция на текущий момент достаточно надежна, остальное весьма уязвимо.
Я специально не проверял, может ли openvpn работать без сертификатов. Думаю, гугул очень быстро даст ответ на этот вопрос.
Спасибо за статью. Написано хорошо, большую работу проделали. На практике не проверял, правда. Пока присматриваюсь к openvpn и думаю как его можно было бы применить к моей очень простой структуре и не слишком ли это сложно будет. Мне непонятно почему там нужны client сертификаты, это же реальное усложнение. Есть ли возможность без них обойтись? Я понимаю, что это дополнительная безопасность, но для меня это уже избыточно. Ведь, например, если рассмотреть обычный доступ к сайту банковскому, будь то личный или даже корпоративный счет маленького ООО или сайт платежей там по https доступ осуществляется и клиентам никаких сертификатов не раздают. И это абсолютно не скомпрометированная схема, она станет таковой только если логин-пароль потеряешь. Private key имеет только web сервер. На стороне клиента никаких client private key и client crt нет. Ну, в хранилище сертификатов у клиента, естественно, находится root СА сертификат в доверенных корневых центрах, но он там лежит с момента установки винды, даже не нужно его туда импортировать. Но если мы свой CA поднимаем, конечно, без импорта CA сертификата не обойтись. Но клиентские можно не выписывать? Это даст определенную дополнительную гибкость, я на лету буду подключать любое устройство, которое ко мне в руки попадет или приду в гости и подключусь к дому или офису. CA crt можно и на сайте расшарить, а вот client private key выкидывать в инет не хочется. Что еще за dh.pem? Он тоже избыточен, хотя особых забот не несет, поскольку клиенту его передавать не нужно. Вот, если сравнивать с IKEv2 и SSTP на винде(их я настраивал), там есть возможность оба настроить и так и сяк - выдавая клиентские сертификаты(вариант усиленной безопасности) и обходясь без них как в схеме с https. А openVPN так может работать? Еще вопрос, скажем, если сервер DHCP отдельно поднят в офисе на другой машине, конфликтов не возникнет? Там можно как-то настройки поменять и разграничить, обозначить ВПН серверу, что ip выдает отдельный DHCP сервер. Также интересно если CA поднят на винде, можно ли передать ему сформированный запрос и подписанный ответ обратно подсунуть openvpn на centos, нормально им прожуется? И интересно еще, конечно, ввести в домен centOS, чтоб доменные credentials использовать. А домен конечно на винде поднят.
Куча вопросов, не знаю, как на все ответить. Если не нужны сертификаты, можно использовать pptp или l2tp, по сути то же самое, даже настраивать проще. Готовый клиент во всех популярных системах уже есть. Все остальное дело техники. Можно настроить.
Доброго времени!
Не могли бы подсказать, при старте сервиса openvpn ложиться ssh, почему такое может возникать?
Что значит ложится? Вырубается служба ssh или пропадает сетевой доступ? В принципе, эти сервисы между собой никак не связаны. Надо смотреть логи, проверять сеть, когда возникают проблемы.
пропадает доступ по ssh и не возможно подключиться пока не отключишь openvpn
Что-то с маршрутизацией скорее всего. Надо смотреть, что меняется в маршрутах после запуска openvpn. Возможно подсети как-то конфликтуют в конфигах или что-то еще. Это явная ошибка в настройках.
Здравствуйте, всё получилось, но у меня, да и в Вашей статье зайти на любой комп можно только по ip. А как сделать чтобы по имени? И чтобы в сетевом окружении отображались ПК? То есть настроить распознавание имён машин в удаленной локальной сети?
Это достаточно сложная задача и нужно понимать, как работает netbios в windows. Тут надо разбираться, я не помню подробностей. Возможно, достаточно будет настройки WINS сервера, а может для работы отображения компьютеров в сетевом окружении потребуется проброс широковещательного трафика, который винда периодически рассылает для поиска соседей.
Забыл еще нюанс. Выше написано про отображение компьютеров в сетевом окружении. Обращение по имени это уже вопрос настройки DNS сервера. При подключении по vpn нужно передавать пользователю свой dns сервер, который будет уметь резолвить нужные имена в ip.
В общем, это 2 совершенно разные задачи.
Ответил Вам в другом посте)) Проблему решил заведением удаленного клиента в домен. Сразу же появились все принтеры и компы в сетевом окружении. Правда не совсем понял, как это работает. И ещё в конфиге клиента добавил строку
route 192.168.3.0 MASK 255.255.255.0. Т.е. в локальную сеть
Здравствуйте.
Интересная статья, спасибо автору !
Только вот не могу ни как настроить/наладить ВПН подключение.
Подскажите что у меня не правильно.
ПО СТЕНДУ:
1 VM Сервер на центосе 7 для ВПН
1 VM windows 7 клиент с которого и будем выходить в инет по впн.
Сеть 192,168,1,0 - моя домашняя локалка через gw которой 1,1 я выхожу в инет.
Сеть 172,16,0,0 - для впн
Все VM развернуты ВМвареворкстэйшен
У всех VM в свойствах на сетевых адаптерах - bridge.
Что мне выбрать из TAP или TUN ???
И как это правильно выставить в настройках.
Пробовал по разному. Выставляю TUN подключение работает, на винде коннект поднимается, пробую TAP не работает.
Если я правильно понял, так как у меня все на VM мне нужно выставить TAP.
МОИ КОНФИГИ;
Server
port 1234
proto tcp
dev tun
ca ca.cert
cert server.crt
key server.key
dh dh.pem
server 172.16.1.0 255.255.255.0
push route "192.168.1.0 255.255.255.0"
push "dhcp-option dns 8.8.8.8"
push "dhcp-option dns 8.8.4.4"
route 192.168.1.0 255.255.255.0
server-bridge 172.16.0.8 255.255.255.0 172.16.0.10 172.16.0.50 - с этой строчкой сервис впн вообще не поднимается. Ее использовал для моста. Без нее поднимается но инета нет.
persist-key
persist-tun
keepalive 10 20
status /etc/openvpn/log/status.log
verb 9
mute 20
CLIENT
dev tap
port 1234
proto tcp
remote 192.168.1.45
client
resolv-retry infinite
ca ca.cert
cert user.crt
key user.key
persist-key
persist-tun
Подскажите пожалуйста что не так в конфиге, что изменить, добавить. Уже много что перепробовал редитктить в конфиге.
Ок, VPN наладил. Подскажите как пробросить инет ? Чтобы клиентская машина могла выходить через openvpn в инет.
здравствуйте, у меня tun0 на vpn-клиенте не создается, в логах ошибка TLS key negotiation failed to occur within 60 seconds , никак не пойму что ему надо(((
Да вы правы, но это же 2 или 3-й раз как всегда на серверный часть всё нормально, а на клиентском при вводе ifconfig есть только два сетевых адаптеров но адаптер от OpenVPN - а нету. А по сути при вводе каких команд адаптер должен появиться? А разве после yum -y install openvpn или после ввода systemctl start openvpn@client она не должна появиться? Помогите пожалуйста в долгу не останусь обещаю... И ещё клиенты которые подключены на сервер филиал без проблем подключаются к Интернету и на основном офисе тоже.
Сама служба openvpn запускается? Лог файл openvpn по пути /var/log/openvpn есть?
У меня чьё та на Сервер удаленного офиса, который стоит CentOS после установки OpenVPN адаптер чье та не появляется. Расскажу что я делал:
На Главный офис где установлен серверная часть OpenVPN я делал всё по инструкцию, который написано в начале статьи, но когда пришел очередь удаленного офиса я просто установил OpenVPN сервер, создал ключи и сертификаты для него на сервере и скинул их в нужное место, но после запуске systemctl start(enable) openvpn@client адаптер tan не появляется
Нужно смотреть логи системы и самого openvpn на наличие ошибок. Если tun интерфейс не создается, значит какие-то ошибки.
Да поднят, использовал конфиг iptables из статьи по настройке iptables для centos.
Еще один вопрос, когда на openvpn клиенте подымаю демон openvpn у меня сразу отваливатся 2 сетевая карта с доступом в локалку
Как только стопаю опенвпн все нормально
Бред какой то копирую ваше правило для iptables
Bad argument `tun+'
tun интерфейс поднят в системе?
Добрый день.
Такая же проблема tun+
Интерфейс поднят. По радмину все работает, обычными средствами невидно клиентские компьютеры за openvpn.
если прописывать push "route ..." - тогда в роутах не создаются автоматом роуты. а вот если push опустить - то все норм. в чем может быть проблема? спасибо
Это изменение я внес буквально на днях, когда настраивал очередной сервер. У меня как раз без push роуты не прописывались автоматом. Но когда я писал статью, конфиг привел без push, значит на тот момент работало так. Я не знаю, с чем это связано. Я проверил на своих работающих серверах, там push стоит, поэтому решил добавить в статью.
вот так как я описал - у меня все работает. если в клиенте ничего не писать, а писать в сервере две строчки и пуш и роут. Тогда клиент подхватывает роуты которые ему пушит сервак.
вроде понял, если конечно правильно понял: в client.conf - вообще ни route, ни push... не указываем. а в server.conf - пишем:
route 192.168.20.0 255.255.255.0
push "route 192.168.20.0 255.255.255.0"
route 192.168.30.0 255.255.255.0
push "route 192.168.30.0 255.255.255.0"
так?
Эти строки по сути дублируют друг друга :)) Они одно и то же делают, просто синтаксис чуть разный. Вообще, если я не путаю, с push я писал прокидывание маршрутов клиенту в файле конфигурации клиента, а без push глобально в общем конфиге для всех. Но могу что-то путать. Я давно уже осмысленно не настраивал рабочие конфигурации openvpn.
)) нет. у меня все как-то по другому)
если в конфиге сервака я пришу пуш "роут 192.168.20.0 255.255.255.0", то тогда в netstat -nr - не видно роута 192.168.20.0 вообще. если не пишу пуш, а пишу роут - тогда клиент не получает роут)
Все правильно, это я ступил. Без push конфиг для сервера, с push для клиента.
Статья полностью актуальна. Только что простым копипастом за 15 минут настроил openvpn сервер.
Добрый день.
В процессе настройки, после того, как отключил SELINUX, и сделал перезагрузку, выловил это:
failed to load selinux policy freezing
Как это можно исправить?
Первый раз такое вижу. А что еще делал на сервере? Я всегда отключаю SELinux и никогда такой ошибки не было. Эта ошибка хорошо гуглится, попробуй разные варианты. Самое простое, это во время выбора ядра для загрузки, выбрать загрузку с параметрами и указать там доп параметр enforcing=0. Так ты сможешь хотя бы загрузиться.
Промазал строчкой.
Вместо SELINUX=disabled
исправил SELINYXTYPE=disabled
От чего он и упал напроч при загрузке.
Пришлось редактировать загрузчик и исправлять все обратно
Прошу прощения, не тот параметр исправил в текстовом файле...
Как отозвать сертификат?
./easyrsa revoke client1
обновить после этого crl.pem
./easyrsa gen-crl
дошел до создания структуру публичных PKI ключей при выполнении
# ./easyrsa init-pki - выдает следующее
Note: using Easy-RSA configuration from: ./vars
./easyrsa: line 289: openssl: command not found
Easy-RSA error:
Missing or invalid OpenSSL
Expected to find openssl command at: openssl
скажите что я делаю не правильно?
Судя по всему openssl не установлен. Не помню в какой момент он устанавливается. Можно вручную установить: yum install openssl
Как отозвать сертификат?
А как сделать так, чтоб можно было выбирать какое впн подключение запустить?
Т.е. есть у меня несколько мест куда я хочу подключаться по требованию. Как сделатьтак,чтоб можно было выбирать в какое место мне подключиться в текущий момент? Как в OpenVPN GUI под виндой?
//serveradmin.ru/kak-sdelat-odnovremenno-neskolko-openvpn-podklyucheniy/
Здесь рассказал об этом.
С Windows проблем не возникает.
А вот как такое же сделать под CentOS?
P.S. Огромное Вам спасибо, очень много полезной информации.
да какбы все просто, все Ваши клиентские конфиги хранятся в в папке /etc/openvpn когда запускаете впн просто укажите имя клиентского конфига который вам необходим systemctl start client1@openvpn или systemctl start client2@openvpn