Доброго времени суток.
Имеется 2 локальных сети: 192.168.1.0/24 и 192.168.2.0/24.
Сеть 192.168.1.0/24 находится за сервером OpenVPN. У сервера 2 сетевые карты eth0 и eth1(eth1 смотрит в Интернет, eth0 в локальную сеть).
Роутер сети 192.168.2.0/24 подключается к интернету модемом Мегафон. Это сеть клиента OpenVPN(сам клиент находиться за NAT в этой сети и имеет IP 192.168.1.100).
Клиент подключается к серверу, может пинговать локальную сеть за сервером. Пинг с сервера до локальной сети клиента не идёт. Также компьютеры из сети клиента не могуть пинговать локальную сеть за сервером.
Конфиг сервера:
local XX.XX.XX.XX
port 1194
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.1.0 255.255.255.0"
push "route 192.168.2.0 255.255.255.0"
client-config-dir /etc/openvpn/ccd
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
client-to-client
keepalive 10 120
tls-auth ta.key 0
persist-key
persist-tun
status openvpn-status.log
log /var/log/openvpn.log
verb 3
Файл /etc/openvpn/ccd/vpn на сервере:iroute 192.168.2.0 255.255.255.0
Конфиг клиента:
remote XX.XX.XX.XX 1194
client
dev tun
resolv-retry infinite
proto tcp
nobind
persist-key
persist-tun
tls-auth ta.key 1
ca ca.crt
cert vpn.crt
key vpn.key
verb 3
pull
Вывод route на сервере:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default IP на внеш.интерф 0.0.0.0 UG 0 0 0 eth1
10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
10.8.0.2 * 255.255.255.255 UH 0 0 0 tun0
IP на внеш. * 255.255.252.0 U 0 0 0 eth1
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
Вывод route на клиенте:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.8.0.13 128.0.0.0 UG 0 0 0 tun0
default 192.168.2.1 0.0.0.0 UG 202 0 0 eth0
Внеш.IP сервера 192.168.2.1 255.255.255.255 UGH 0 0 0 eth0
10.8.0.0 10.8.0.13 255.255.255.0 UG 0 0 0 tun0
10.8.0.13 * 255.255.255.255 UH 0 0 0 tun0
128.0.0.0 10.8.0.13 128.0.0.0 UG 0 0 0 tun0
192.168.1.0 10.8.0.13 255.255.255.0 UG 0 0 0 tun0
192.168.2.0 * 255.255.255.0 U 0 0 0 eth0
192.168.2.0 * 255.255.255.0 U 202 0 0 eth0
Клиент поднят на Raspberry PI 2. Пытаюсь решить проблему уже несколько дней. Прошу помощи)
Добрый день, решил решить задачу в своей локальной сети — объединить филиалы, задача не новая, и реализация самая простая. Необходимо чтобы центральный офис видел публикации через IIS на удаленном
филиале, работал RDP.
структура сети:
сервер — Centos 7, на нем поднят openVPN сервер, сетевые интерфейсы:
ppp0 (pppoe) - выход в инет;
enp2s0 - lan - 192.168.0.0/24
tun0 - openvpn - 10.1.1.0/24
Клиент Windws server 2008 R2, имеет 1 сетевой интерфейс, подключение к инету через роутер — 192.168.20.0/24
Конфиг сервера:
port 1194
proto tcp
dev tun
#tls-server
server 10.1.1.0 255.255.255.0
persist-key
persist-tun
status openvpn-status.log
log-append /var/log/openvpn.log
client-config-dir /etc/openvpn/ccd
client-to-client
push "route 192.168.20.0 255.255.255.0"
push "route 192.168.0.0 255.255.255.0"
route 192.168.20.0 255.255.255.0
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
comp-lzo yes
mssfix
keepalive 10 50
ifconfig-pool-persist /etc/openvpn/ipp.txt
содержимое /etc/openvpn/ccd/srv1c
ifconfig-push 10.1.1.61 10.1.1.62
iroute 192.168.20.0 255.255.255.0
конфиг клиента
client
tls-client
verb 3
dev tun
proto tcp
remote WAN_Centos 1194
nobind
persist-key
persist-tun
ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\srv1c.crt"
key "C:\\Program Files\\OpenVPN\\config\\srv1c.key"
mssfix
comp-lzo yes
После того как установилось соединение маршруты на сервере:
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0
10.1.1.0 10.1.1.2 255.255.255.0 UG 0 0 0 tun0
10.1.1.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
80.234.75.96 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 enp1s0
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 enp2s0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 enp2s0
192.168.20.0 10.1.1.2 255.255.255.0 UG 0 0 0 tun0
На клиенте:
0.0.0.0 0.0.0.0 192.168.20.1 192.168.20.2 21
10.1.1.0 255.255.255.0 10.1.1.62 10.1.1.61 20
10.1.1.60 255.255.255.252 On-link 10.1.1.61 276
10.1.1.61 255.255.255.255 On-link 10.1.1.61 276
10.1.1.63 255.255.255.255 On-link 10.1.1.61 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 10.1.1.62 10.1.1.61 20
192.168.20.0 255.255.255.0 On-link 192.168.20.2 276
192.168.20.2 255.255.255.255 On-link 192.168.20.2 276
192.168.20.255 255.255.255.255 On-link 192.168.20.2 276
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.20.2 276
224.0.0.0 240.0.0.0 On-link 10.1.1.61 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.20.2 276
255.255.255.255 255.255.255.255 On-link 10.1.1.61 276
В настройка сетевого интерфейса в Windows стоит галочка (разрешить другим пользователям сети использовать подключение к Интернету данного компьютера).
Теперь к проблеме:
сети друг друга видят прекрасно, пинги в обе стороны без проблем ходют. Но
При доступе к IIS на 192.168.20.2 вроде как доступ есть, но через какое то время разрывается, 1С постоянно вылетает и просит переподключится.
В тоже время, если в качестве адреса указать адрес выданный при подключении к OpenVpn 10.1.1.2, и открыть этот IIS то все работает нормально.
Я так понимаю проблемы с маршрутизацией в Windows, кто решал подобную задачу, как выходили из ситуации? (кроме как использовать адресацию openvpn)
В интернете много статей как поднять OpenVpn за 5 минут. Да, действительно сервер OpenVPN можно поднять быстро. Но моя статья показывает, сколько всего остается за кадром, если устанавливать OpenVPN без понимания как он в действительности работает. И стремясь все сделать быстро — вы сможете столкнуться как с проблемой безопасности, так и с тем что не сможете подключить все свои устройства к вашему пятиминутному OpenVpn.
Вы после установки по мануалу «пятиминутного» OpenVPN, прочекайте его конфигурационный файл согласно этому руководству, что же Вы в действительности установили.
— Dmytro Yakovenko статья обновлена 2023/09/10
-
Статья протестирована под Ubuntu 22
-
Явным образом указано, что в статье используется Easy-RSA версии 2.3.3
-
Обновлен раздел: Шаг 15: Отзыв клиентских сертификатов crl-verify
-
Добавлен раздел: Настройка EdgeRouter X (EdgeOS) в качестве OpenVPN клиент
OpenVPN — это приложение для создания безопасного IP-туннеля через единый UDP- или Порты TCP. Что такое TCP / IP порт-порт 1194. Для обеспечения безопасности управляющего канала и потока данных, OpenVPN использует библиотеку OpenSSL (точнее протоколы SSLv3/TLSv1) т.е. доступны все возможности шифрования, аутентификации и сертификации библиотеки OpenSSL (любой шифр, размер ключа). Также может использоваться пакетная авторизация Алгоритм HMAC для OpenVPN, для обеспечения большей безопасности, и аппаратное ускорение для улучшения производительности шифрования.
OpenVPN используется на Solaris, OpenBSD, FreeBSD, NetBSD, GNU/Linux, Apple Mac OS X и Microsoft Windows.
-
Предустановленный ключ, — самый простой метод.
-
Сертификатная Аутентификация, — наиболее гибкий в настройках метод.
-
С помощью логина и пароля, — может использоваться без создания клиентского сертификата (серверный сертификат все равно нужен).
OpenVPN может использовать статические, предустановленные ключи или обмен динамическими ключами на основе TLS. Он также поддерживает соединения VPN с динамическими удалёнными узлами (DHCP или клиенты dial-up), туннели поверх NAT преобразование сетевых адресов или через полноценный межсетевой экран (например, Руководство по iptables: Настройка и оптимизация фаервола Linux в Linux).
Настройки конфигурационного файла клиента идентичны по синтаксису и написанию как для Linux, так и для Windows.
В первую очередь нужно арендовать виртуальный сервер VPS/VDS c root-доступом к операционной системе, с постоянным IP- адресом. Если вы собираетесь использовать сервер только в качестве VPN сервера, то вам не нужны дополнительные панели управления, типа ISPmanager, Hestia.
Не все хостинг-провайдеры разрешают использование VPN-серверов, поэтому перед заказом услуги предварительно у техподдержки узнайте разрешают ли они использование VPN сервера.
Рекомендация: если вам нужен доступ доступ к российским сайтам (Яндекс.Директ, Яндекс Почта, Wordstat, Вконтакте, Одноклассники, Mail.ru), то на мой взгляд, стоит выбрать российские сервера, например проверенный Perfect Quality Hosting (PQ). Для тех, кому нужен доступ к заблокированным в Российской Федерации сайтам, нужно арендовать сервер за пределами России, например Список абузоустойчивых хостингов.
Основные компоненты сети OpenVPN и объекты
Безопасность и шифрование в OpenVPN обеспечивается библиотекой Как пользоваться OpenSSL и протоколом транспортного уровня Transport Layer Security (TLS). Вместо OpenSSL в новых версиях OpenVPN можно использовать библиотеку PolarSSL. Протокол TLS представляет собой усовершенствование протокола защищенной передачи данных уровня защищенных сокетов Secure Socket Layers (Что такое SSL сертификат для сайта, почты).
В OpenSSL может использоваться симметричная и ассиметричная криптография.
В первом случае перед началом передачи данных на все узлы сети необходимо поместить одинаковый секретный ключ. При этом возникает проблема безопасной передачи этого ключа через небезопасный Интернет.
Во втором случае у каждого участника обмена данными есть два ключа — публичный (открытый) и приватный (секретный).
Публичный ключ используется для зашифрования данных, а приватный — для расшифрования. В основе шифрования лежит довольно сложная математика. Выбранный в SSL/TLS алгоритм зашифрования публичным ключом обеспечивает возможность расшифрования только с помощью приватного ключа.
Приватный ключ секретный, и должен оставаться в пределах узла, на котором он создан. Публичный ключ должен передаваться участникам обмена данными.
Для безопасной передачи данных необходимо идентифицировать стороны, принимающие участие в обмене данными. В противном случае можно стать жертвой так называемой «атаки посредника» (Man in the Middle, MITM). В ходе такой атаки злоумышленник подключается к каналу передачи данных и прослушивает его. Он также может вмешиваться, удалять или изменять данные.
Чтобы обеспечить аутентификацию (проверку подлинности пользователя) протокол TLS использует инфраструктуру публичных ключей (Public Key Infrastructure, PKI) и асимметричную криптографию.
Нужно осознавать, что расшифрование данных без наличия приватного ключа тоже возможно, например, методом последовательного перебора. Хотя такой метод и требует больших вычислительных ресурсов, это только вопрос времени, когда данные смогут быть расшифрованы.
Хотя размер ключа влияет на сложность расшифрования, никакой ключ не дает гарантии полной безопасности данных. Кроме того, существует возможность похищения уже расшифрованных данных и ключей за счет уязвимостей и закладок в операционной системе или прикладном ПО, а также в аппаратном обеспечении серверов и рабочих станций.
Шифрование данных увеличивает трафик и замедляет обмен данными. Чем больше длина ключа, применяемого для шифрования данных, тем труднее будет его подобрать, но и тем заметнее получится замедление обмена данными.
Изначально статья писалась для Ubuntu 18.04.4 LTS, также она была протестирована под Ubuntu 22 LTS.
Задача:
-
Настроить сервер OpenVPN на VPS или облаке. Выбор Linux сервера для OpenVPN: Облачная технология от DigitalOcean, Цена виртуального сервера 5 долларов в месяц. Колокейшн (дата-центр) выбран Амстердам, прекрасная связь с Украиной в этом центре.
-
Создать простую инструкцию для подчиненного сисадмина по управлению сертификатами/ключами: создание, удаление и отзыв сертификатов клиентов OpenVPN
Предоставить доступ удаленным сотрудникам к локальным сетям для работы с бухгалтерским программным обеспечением и для просмотра видеокамер наблюдения.
Подключаемые удаленные офисы:
-
Офис Московский: 4 локальных сети со шлюзом под управлением Debian GNU/Linux 7.11 (wheezy)
-
Офис Гагарина 1: 1 локальная сеть
Клиенты:
-
Мобильные клиенты на Android
-
Удаленные клиенты Windows 10
Создание нового сертификата пользователя, под правами обычного пользователя (не root).
cd ~/openvpn-ca source vars ./build-key zabbix
cd ~/client-configs ./make_config.sh zabbix
cp /etc/openvpn/ccd/base.client /etc/openvpn/ccd/zabbix
Шаблон base.client содержит комментированные строки такого содержания
- base.client
-
$ cat base.client #ifconfig-push 10.8.0.21 10.8.0.22 #push "route 192.168.35.0 255.255.255.0" #push "route 192.168.22.0 255.255.255.0" #push "route 10.90.91.0 255.255.255.0" #iroute 192.168.35.0 255.255.255.0 #iroute 192.168.22.0 255.255.255.0 #iroute 10.90.91.0 255.255.255.0 # all trafic to VPN #push "redirect-gateway def1 bypass-dhcp" #push "dhcp-option DNS 208.67.222.222" #push "dhcp-option DNS 208.67.220.220"
Для отзыва дополнительных сертификатов выполните следующие шаги.
Настройка сетевой конфигурации Linux — сервера для безопасной работы сервера OpenVPN: iptables/UFW, ядро Linux.
Делаем первичную настройку безопасности Ubuntu. Iptables при помощи ufw разрешаем только SSH.
Многим удобнее смотреть, чем читать. Ниже видео версия этого руководства. Настоятельно рекомендую руководство прочитать!
Необходимо настроить сетевую конфигурацию сервера, чтобы OpenVPN мог корректно перенаправлять трафик. Инструкция применима для операционных систем на базе Linux ядра: Debian, Ubuntu, CentOS и т.д..
Разрешим серверу перенаправлять трафик, настройка производится в файле /etc/sysctl.conf:
sudo nano /etc/sysctl.conf
Найдите строку настройки net.ipv4.ip_forward. Удалите “#” из начала строки, чтобы раскомментировать её.
Для применения настроек к текущей сессии наберите команду:
sudo sysctl -p
В общем случае для корректной работы сервера OpenVPN вы должны открыть входящий порт для клиентов и включить NAT преобразование сетевых адресов Маскарадинг (Masquerading) преобразование, если вы весь трафик клиента, хотите маршрутизировать через VPN.
В моей практике, чаще встречается конфигурация, когда клиентам нужно дать доступ только к локальным сетям, а весь основной трафик идет через обычного провайдер. В этом случае NAT настраивать не надо.
Firewall iptables:
Открываем UDP порт 1194 и разрешаем пакеты приходящие с интерфейса TUN и TAP или tun.
iptables -A INPUT -p udp --dport 1194 -j ACCEPT iptables -A INPUT -i tap+ -j ACCEPT or iptables -A INPUT -i tun+ -j ACCEPT # для динамического IP iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Если вы используете надстройку над iptables UFW, выполните нижеприведенные действия.
Найдите публичный интерфейс сети (public network interface). Для этого наберите команду:
ip route | grep default
Публичный интерфейс должен следовать за словом «dev».
Зная название интерфейса откроем файл /etc/ufw/before.rules и добавим туда соответствующие настройки:
sudo nano /etc/ufw/before.rules
Это файл содержит настройки UFW, которое применяются перед применением правил UFW. Добавьте в начало файла выделенные красным строки. Это настроит правила, применяемые по умолчанию, к цепочке POSTROUTING в таблице nat.
Не забудьте заменить eth0 в строке -A POSTROUTING на имя интерфейса, найденное нами ранее.
# # rules.before # # Rules that should be run before the ufw command line added rules. Custom # rules should be added to one of these chains: # ufw-before-input # ufw-before-output # ufw-before-forward # # START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to eth0 -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES # Don't delete these required lines, otherwise there will be errors *filter . . .
Теперь мы должны сообщить UFW, что ему по умолчанию необходимо разрешать перенаправленные пакеты. Для этого откройте файл /etc/default/ufw. Найдите в файле директиву DEFAULT_FORWARD_POLICY. Мы изменим значение с DROP на ACCEPT:
DEFAULT_FORWARD_POLICY="ACCEPT"
Далее настроим сам файрвол для разрешения трафика в OpenVPN.
Если вы не меняли порт и протокол в файле /etc/openvpn/server.conf, вам необходимо разрешить трафик UDP для порта 1194. Если вы изменили эти настройки, введите указанные вами значения.
sudo ufw allow 1194/udp
Теперь деактивируем и активируем UFW для применения внесённых изменений:
sudo ufw disable sudo ufw enable
Сначала установим OpenVPN на наш сервер. OpenVPN доступен в стандартных репозиториях Ubuntu, мы можем использовать apt для его установки. Также мы установим пакет easy-rsa, который позволит нам настроить наш собственный внутренний центр сертификации (certificate authority, CA) для использования с нашей VPN.
Обновим список пакетов сервера и установим необходимые пакеты следующими командами:
sudo apt update sudo apt full-upgrade sudo apt install openvpn wget https://github.com/OpenVPN/easy-rsa-old/archive/refs/heads/master.zip
Эта статья написана easy-rsa версии 2.3.3. В современных дистрибутивах в репозиториях версия 3. Версия 3 очень сильно изменена и не подходит для использования в этой статье.
OpenVPN это виртуальная частная сеть, использующая TLS/SSL. Это означает, что OpenVPN использует сертификаты для шифрования трафика между сервером и клиентами. Для выпуска доверенных сертификатов (trusted certificates) нам потребуется создать наш собственный центр сертификации.
Первый вариант копирования файлов easy-rsa
cp -r /usr/share/easy-rsa /etc/openvpn/ cd /etc/openvpn/easy-rsa
Но я буду использовать второй вариант копирования файлов easy-rsa
Для начала скопируем шаблонную директорию easy-rsa в нашу домашнюю директорию с помощью команды make-cadir:
make-cadir ~/openvpn-ca
Откройте на компьютере CA каталог EasyRSA, для этого перейдем в директорию openvpn-ca для начала настройки центра сертификации:
cd ~/openvpn-ca
В этом каталоге есть файл с именем vars, создайте его копию.
cp vars vars.original
Для настройки переменных нашего центра сертификации нам необходимо отредактировать файл vars. Откройте этот файл в вашем текстовом редакторе:
nano vars
Внутри файла вы найдёте переменные, которые можно отредактировать, и которые задают параметры сертификатов при их создании. Нам нужно изменить всего несколько переменных.
Чтобы в дальнейшем, при создании сертификатов, не появлялась ошибка про отсутствие файла openssl.cnf, вы можете пойти двумя путями. Первый просто переименовать нужный файл.
cp openssl-1.0.0.cnf openssl.cnf
И второй путь, отредактировать в файле vars параметр export KEY_CONFIG:
# This variable should point to # the openssl.cnf file included # with easy-rsa. #export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA` export KEY_CONFIG=$EASY_RSA/openssl-1.0.0.cnf
Перейдите ближе к концу файла и найдите настройки полей, используемые по умолчанию при создании сертификатов. Они должны выглядеть примерно так:
~/openvpn-ca/vars . . . export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="me@myhost.mydomain" export KEY_OU="MyOrganizationalUnit" . . .
Замените значения, на что-нибудь другое, не оставляйте их не заполненными:
~/openvpn-ca/vars . . . export KEY_COUNTRY="UA" export KEY_PROVINCE="NY" export KEY_CITY="Kharkiv" export KEY_ORG="Mirax" export KEY_EMAIL="darkfire@example.com" export KEY_OU="MyPersonal" . . .
Отредактируйте значение KEY_NAME чуть ниже, которое заполняет поле субъекта сертификатов. Проще всего задать ему имя server, потому что в документации примеры конфигов сервера OpenVPN используют это имя:
~/openvpn-ca/vars export KEY_NAME="server"
Сохраните и закройте файл.
Теперь мы можем использовать заданные нами переменные и утилиты easy-rsa для создания центра сертификации.
Убедитесь, что вы находитесь в директории центра сертификации и используйте команду source к файлу vars:
cd ~/openvpn-ca source vars
Вы должны увидеть следующий вывод:
Вывод
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/sammy/openvpn-ca/keys
Возможно вам нужно будет переименовать файл:
cp openssl-1.0.0.cnf openssl.cnf
Убедимся, что мы работаем в “чистой среде” выполнив следующую команду:
./clean-all
Теперь мы можем создать наш корневой центр сертификации командой:
./build-ca
Эта команда запустит процесс создания ключа и сертификата корневого центра сертификации. Поскольку мы задали все переменные в файле vars, все необходимые значения будут введены автоматически. Нажимайте ENTER для подтверждения выбора:
В результате будет создан центр сертификации и два важных файла, ca.crt и ca.key, представляющие открытую и закрытую части сертификата SSL.
Теперь у нас есть центр сертификации, который мы сможем использовать для создания всех остальных необходимых нам файлов.
Теперь ваш центр сертификации установлен и готов подписывать запросы сертификатов.
Далее создадим сертификат, пару ключей и некоторые дополнительные файлы, используемые для осуществления шифрования, для нашего сервера.
Начнём с создания сертификата OpenVPN и ключей для сервера. Это можно сделать следующей командой:
Внимание: Если ранее вы выбрали имя, отличное от server, вам придётся немного изменить некоторые инструкции. Например, при копировании созданных файлов в директорию /etc/openvpn вам придётся заменить имена на заданные вами. Вам также придётся изменить файл /etc/openvpn/server.conf для того, чтобы он указывал на корректные .crt и .key файлы.
./build-key-server server
Вывод опять будет содержать значения по умолчанию, переданные этой команде (server), а также значения из файла vars.
Согласитесь со всеми значениями по умолчанию, нажимая ENTER. Не задавайте challenge password. В конце процесса два раза введите y для подписи и подтверждения создания сертификата:
Вывод
. . . Certificate is to be certified until May 1 17:51:16 2026 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
Далее создадим оставшиеся файлы. Мы можем сгенерировать сильные ключи протокола Диффи-Хеллмана, используемые при обмене ключами, командой:
./build-dh
Для завершения этой команды может потребоваться несколько минут.
Далее мы можем сгенерировать подпись HMAC для усиления способности сервера проверять целостность TSL:
openvpn --genkey --secret keys/ta.key
Далее мы можем сгенерировать сертификат и пару ключей для клиента. Вообще это можно сделать и на клиентской машине и затем подписать полученный ключ центром сертификации сервера, но в этой статье для простоты мы сгенерируем подписанный ключ на сервере.
В этой статье мы создадим ключ и сертификат только для одного клиента. Если у вас несколько клиентов, вы можете повторять этот процесс сколько угодно раз. Просто каждый раз передавайте уникальное значение скрипту.
Поскольку мы можем вернуться к этому шагу позже, мы повторим команду source для файла vars. Мы будем использовать параметр client1 для создания первого сертификата и ключа.
Для создания файлов без пароля для облегчения автоматических соединений используйте команду build-key:
cd ~/openvpn-ca source vars ./build-key client1
Для создания файлов, защищённых паролем, используйте команду build-key-pass:
cd ~/openvpn-ca source vars ./build-key-pass client1
В ходе процесса создания файлов все значения по умолчанию будут введены, вы можете нажимать ENTER. Не задавайте challenge password и введите y на запросы о подписи и подтверждении создания сертификата.
Далее настроим конфигурационный файл сервера OpenVPN с использованием созданных ранее файлов.
Копирование файлов в директорию OpenVPN. Нам необходимо скопировать нужные нам файлы в директорию /etc/openvpn.
Сначала скопируем созданные нами файлы. Они находятся в директории ~/openvpn-ca/keys, в которой они и были созданы. Нам необходимо скопировать сертификат и ключ центра сертификации, сертификат и ключ сервера, подпись HMAC и файл Diffie-Hellman:
cd ~/openvpn-ca/keys sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
Далее нам необходимо скопировать и распаковать файл-пример конфигурации OpenVPN в конфигурационную директорию, мы будем использовать этот файл в качестве базы для наших настроек:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
Изменения вносимые в скопированный конфигурационный файл /etc/openvpn/server.conf. Приведенные ниже директивы, нужно или добавить или раскомментировать, а директиву cipher заменить.
tls-auth ta.key 0 key-direction cipher AES-128-CBC auth SHA256 user nobody group nogroup
Рабочий конфигурационный файл OpenVPN сервера:
- server.conf
-
;local a.b.c.d local xxx.xxx.xxx.xxx # IP на котором сервер слушает входящие сообщения port 1194 # порт на котором сервер слушает входящие сообщения proto udp # Включение интерфейса управления OpenVPN. Доступен при помощи telnet localhost 7505 # management localhost 7505 dev tun ca ca.crt # местонахождение самоподписного доверенного сертификата (CA) cert server.crt # местонахождение сертификата сервера key server.key # местонахождение закрытого ключа сервера dh dh2048.pem # местонахождение файла параметров Диффи-Хэлмана # Настройка режима сервера и адреса VPN-сети, # из которой OpenVPN будет раздавать адреса клиентам. # Сервер возьмет себе 10.8.0.1, # остальные адреса будут доступны для клиентов. # Каждый клиент сможет связаться с сервером по адресу 10.8.0.1. server 10.8.0.0 255.255.255.0 # в файле ipp.txt хранится информация о соединении, например на случай обрыва соединения # и его дальнейшего восстановления ifconfig-pool-persist /var/log/openvpn/ipp.txt ;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 ;server-bridge # маршруты которые будут передаваться каждому клиенту. # push - команда OpenVPN, передаваемая клиенту и выполняемая клиентом # (в данном случае добавляем на стороне клиента два маршрута к виртуальной частной сети) push "route 192.168.35.0 255.255.255.0" # указываем где будут хранятся файлы с настройками IP-адресов клиентов client-config-dir ccd # добавляем маршрут сервер-клиент. # route - добавляет на стороне сервера маршруты к локальным подсетям, находящимся за клиентами route 192.168.35.0 255.255.255.0 route 192.168.22.0 255.255.255.0 route 10.90.91.0 255.255.255.0 # маршрут передается всем клиентам push "route 192.168.35.0 255.255.255.0" # Перенаправлять default gateway на vpn-сервер. Если не нужно - закомментировать или # добавить в ccd для конкретного клиента ;push "redirect-gateway def1 bypass-dhcp" ;push "dhcp-option DNS 208.67.222.222" ;push "dhcp-option DNS 208.67.220.220" client-to-client # разрешить общение клиентов подключенных к серверу OpenVPN общение между собой ;duplicate-cn # Директива проверки работоспособности, включающая отсылку # ping-подобных сообщений туда и обратно через # соединение для того, чтобы каждая сторона знала когда # другая сторона внезапно пропадет (gone down). # Пинг каждые 10 секунд, с предположением, что удаленный # узел недоступен, если не получено на одного пинга за период времени # равный 120 секундам. keepalive 10 120 tls-auth ta.key 0 # This file is secret key-direction 0 cipher AES-128-CBC auth SHA256 ;compress lz4-v2 ;push "compress lz4-v2" ;comp-lzo max-clients 100 user nobody group nogroup persist-key persist-tun # Содержимое небольшого файла состояния, показывающего # текущие соединения, усекается # и перезаписывается раз в минуту. status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log ;log-append /var/log/openvpn/openvpn.log verb 3 # уровень отладки ;mute 20 explicit-exit-notify 1
Включим сервис OpenVPN с помощью systemd.
При запуске сервера OpenVPN необходимо указать имя нашего файла конфигурации в качестве переменной после имени файла systemd. Файл конфигурации для нашего сервера называется /etc/openvpn/server.conf, поэтому мы добавим @server в конец имени файла при его вызове:
sudo systemctl start openvpn@server
Убедимся, что сервис успешно запущен командой:
sudo systemctl status openvpn@server
Если всё в порядке, настроем сервис на автоматическое включение при загрузке сервера:
sudo systemctl enable openvpn@server
Создание структуры директорий для конфигурационных файлов клиентов. В домашней директории создайте структуру директорий для хранения файлов:
mkdir -p ~/client-configs/files
Поскольку наши файлы конфигурации будут содержать клиентские ключи, мы должны настроить права доступа для созданных директорий:
chmod 700 ~/client-configs/files
Создание базовой конфигурации:
Далее скопируем конфигурацию-пример в нашу директорию для использования в качестве нашей базовой конфигурации:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
Откройте этот файл в вашем текстовом редакторе:
nano ~/client-configs/base.conf
Работающий base.conf. Я привел его одинаковым настройкам с сервером, изменил параметры cipher, auth, key-direction. Основное отличие клиентского файла от серверного в директиве client и задании местонахождения сервера OpenVPN, при помощи директивы remote.
Если ваш клиент работает на Linux и использует файл /etc/openvpn/update-resolv-conf нужно раскомментировать три нижние строчки.
# script-security 2 # up /etc/openvpn/update-resolv-conf # down /etc/openvpn/update-resolv-conf
- base.conf
-
client dev tun proto udp ;remote xxx.xxx.xxx.xxx 1194 remote vpn8.example.net 1194 resolv-retry infinite nobind #user nobody #group nogroup persist-key persist-tun #ca ca.crt #cert client.crt #key client.key remote-cert-tls server tls-auth ta.key 1 #cipher AES-256-CBC cipher AES-128-CBC auth SHA256 #comp-lzo verb 3 ;mute 20 key-direction 1 # script-security 2 # up /etc/openvpn/update-resolv-conf # down /etc/openvpn/update-resolv-conf
Теперь создадим простой скрипт для генерации файлов конфигурации с релевантными сертификатами, ключами и файлами шифрования. Он будет помещать сгенерированные файла конфигурации в директорию ~/client-configs/files.
Создайте и откройте файл make_config.sh внутри директории ~/client-configs:
nano ~/client-configs/make_config.sh
Вставьте следующие текст в этот файл:
- make_config.sh
-
~/client-configs/make_config.sh #!/bin/bash # First argument: Client identifier KEY_DIR=~/openvpn-ca/keys OUTPUT_DIR=~/client-configs/files BASE_CONFIG=~/client-configs/base.conf cat ${BASE_CONFIG} \ <(echo -e '<ca>') \ ${KEY_DIR}/ca.crt \ <(echo -e '</ca>\n<cert>') \ ${KEY_DIR}/${1}.crt \ <(echo -e '</cert>\n<key>') \ ${KEY_DIR}/${1}.key \ <(echo -e '</key>\n<tls-auth>') \ ${KEY_DIR}/ta.key \ <(echo -e '</tls-auth>') \ > ${OUTPUT_DIR}/${1}.ovpn
Сохраните и закройте файл.
Сделайте его исполняемым файлом командой:
chmod 700 ~/client-configs/make_config.sh
Теперь легко и понятно можно генерировать файлы конфигурации клиентов.
Если вы следовали всем шагам этой статьи, вы создали сертификат client1.crt и ключ клиента client1.key командой ./build-key client1 на шаге 7. Вы можете сгенерировать конфигурацию для этих файлов перейдя в директорию ~/client-configs и используя только что созданный нами скрипт:
cd ~/client-configs ./make_config.sh client1
Если всё прошло успешно, мы должны получить файл client1.ovpn в директории ~/client-configs/files:
ls ~/client-configs/files client1.ovpn
Теперь вы должны скопировать или переместить полученный файл конфигурации на клиентское устройство: на компьютер или смартфон.
ШАГ 13: Клиенты OpenVPN для разных ОС Windows, Android, MikroTik, Ubuntu, MacOS
Для Linux сервера проще всего ставить этот же пакет OpenVPN, но настраивать его клиентом. Запуск OpenVPN клиента в Xfce, KDE.
sudo apt install openvpn
Пример рабочего конфига для Ubuntu 20.04.1 LTS скачиваем файл (с расширением ovpn) созданный на этапе 10. Копируем его в директорию /etc/openvpn клиента (переименовываем расширение):
cp client1.ovpn client1.conf
Тестируем работу клиента:
sudo openvpn --config client1.conf
Если все ОК — настраиваем автозапуск клиента в Ubuntu. Для Ubuntu 18.04 LTS и выше нужно включить службу OpenVPN для запуска во время загрузки перечитать конфиг systemctl. Положите конфигурационный файл в /etc/openvpn/client/имя-конфига.conf
sudo systemctl enable openvpn-client@client1 sudo systemctl daemon-reload
Запускаем клиента
sudo systemctl start openvpn-client@client1
В директории ccd хранятся индивидуальные настройки для каждого клиента. Имя файла должно соответствовать имени сгенерированного клиентского сертификата. Файлы конфигурации клиентов являются текстовыми файлами и содержат команды, выполняемые сервером при подключении клиентов. Обычно файл клиента содержать команды:
-
добавляет клиенту маршрут к локальной подсети центрального офиса(push «route 192.168.1.0 255.255.255.0»)
-
определяет адрес локальной подсети, находящейся за клиентом (например iroute 192.168.2.0 255.255.255.0)
-
привязка к статическому IP (ifconfig-push 192.168.14.21 192.168.14.22), где ifconfig-push <IP-адрес клиента> <IP-адрес сервера>. Выбранные пары IP-адресов, во-первых, должны быть уникальными, во-вторых, должны входить в состав последовательных подсетей, ограниченных маской /30 (255.255.255.252), и, в-третьих, должны находиться в пределах пула IP-адресов, выделенного для виртуальной частной сети (определяется параметром server файла конфигурации сервера OpenVPN).
# mkdir /etc/openvpn/ccd # nano ccd/farm1c push "route 192.168.1.0 255.255.255.0" #push "route 192.168.35.0 255.255.255.0" # static IP ifconfig-push 192.168.14.21 192.168.14.22 #iroute 192.168.2.0 255.255.255.0
Сотрудники увольняются и им нужно запретить доступ к VPN. Значит нужно отозвать их сертификат. Команда revoke-full с именем клиента используется для отзыва ssl сертификата OpenVPN.
Если нет файла .rnd (это файл генератора псевдослучайных чисел) в каталоге пользователя, от имени которого вы создаете сертификаты, выполните командой:
$ cd $ touch .rnd
default_crl_days= 3000 # how long before next CRL
Переходим в директорию центра сертификации и вводим команды:
$ cd ~/openvpn-ca $ source vars
Отзываем сертификат используя команду revoke-full с именем клиента, например client1.
$ ./revoke-full client1
В результате работы будет создан файл crl.pem в директории keys с необходимой для отзыва сертификата информацией.
Теперь нужно объяснить серверу OpenvPN, где ему брать информацию об отозванных сертификатах, для этого используется директива crl-verify. Сервер OpenVPN будет проверять список отозванных сертификатов из файла каждый раз crl.pem, когда кто-то устанавливает соединение с сервером.
Копируем crl.pem в каталог. В конце файла /etc/openvpn/server.conf задаем путь через директиву crl-verify
crl-verify crl.pem
Перезапускаем сервер OpenVPN
# service openvpn restart
Теперь клиент не сможет устанавливать соединение с сервером OpenVPN используя старый сертификат, в логе сервера будет появляться строка о том что сертификат отозван: VERIFY ERROR: depth=0, error=certificate revoked. В логе OpenVPN клиента будет написано:
Wed Aug 25 14:28:09 2021 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) Wed Aug 25 14:28:09 2021 TLS Error: TLS handshake failed
Эта процедуру нужно проделывать для отзыва каждого созданного вами сертификата.
Если у вас 2 сервера openvpn, вам следует переименовать crl.pem и в crl-verify задать файл со своим именем. Просто для второго сервера копируем и переименовываем crl.pem например в crltcp.pem. Если вы укажите один и тот же файл для разных OpebVPN серверов — ваши сервера будут падать.
Frequently Asked Questions OpenVPN. Часто задаваемые вопросы по настройке сервера и клиентов OpenVPN
Проблема: Если сервер подключён к ISP при помощи технологии Как работает PPPoE, в этом случае OpenVPN не сможет сделать доступными сети за подключённым клиентом. Не будет отрабатывать команда iroute. Это связано с тем, что PPP прописывает маршрут по умолчанию в таком виде:
# netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0
Т.е. указывается маршрутом по умолчанию интерфейс (ppp0), а не IP адресс, такой записи сервер OpenVPN не понимает, для корректной работы сервера OpenVpn маршрут должен бы вида:
# netstat -rn Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 91.196.96.35 255.255.255.255 UGH 0 0 0 ppp0
Решение: Исправить маршрут по умолчанию можно командой (соответственно указав нужный вам IP)
route add 0/0 gw 91.196.96.35
или в скрипте при загрузке системы, но после поднятия интерфейса ppp0
route del default route add default gw 91.196.96.35 dev ppp0
Окружение: Клиент выходит в интернет с Ubuntu 14.04.3 LTS + Настройка Dnsmasq Ubuntu установленной в Виртуализация при помощи VirtualBox. Сеть установлена в VirtualBox как сетевой мост. IP получается от Настройка DHCP сервера Linux, FreeBSD на интернет роутере (Netis WF2419R).
Проблема: Не работает push «dhcp-option DNS 10.26.95.254″. Соответственно все Раздел DNS: Что такое DNS Dnsmasq отсылает основному DNS серверу. Все бы ничего если бы клиенту не нужны локальные Раздел DNS: Что такое DNS.
Решение: Был доустановлен основной пакет
aptitude install dnsmasq
добавлены описания наших локальных зон (non-public domains) в конфигурационный файл dnsmasq.conf
server=/gaga.lan/10.26.95.254 server=/m86a.lan/10.26.95.254 server=/atlex.lan/10.26.95.254 server=/95.26.10.in-addr.arpa/10.26.95.254 server=/168.192.in-addr.arpa/10.26.95.254 server=/85.161.10.in-addr.arpa/10.26.95.254
В файле /etc/logrotate.d/openvpn прописываем настройки для приложения logrotate, ключевой параметр copytruncate (чтобы не перегружать OpenVPN и заставить его писать данные в тот же лог файл)
- openvpn
-
etc/openvpn/servers/vpnluxor/logs/openvpn.log { daily rotate 8 compress delaycompress missingok copytruncate notifempty create 640 root }
Для управления сертификатами/клиентами сервера OpenVPN при помощи веб-интерфейса существует не так много программ:
Файл | Машина | Назначение | Доступ |
ca.crt | Сервер и клиенты | Сертификат корневого СА | Публичный |
ca.key | Только на сервере | Необходим для подписи других сертификатов | Секретный |
dh{n}.pem | Только на сервере | Diffie Hellman параметры | Публичный |
vpnspar.crt | Только на сервере | Сертификат сервера | Публичный |
vpnspar.key | Только на сервере | Ключ сервера | Секретный |
darkfire.crt | Только на клиенте | Сертификат клиента | Публичный |
darkfire.key | Только на клиенте | Ключ клиента | Секретный |
Подборка руководств по настройке сервера и клиентов OpenVPN.
В этом разделе приведены как ссылки на мои руководства по настройке OpenVPN, так и на руководства других авторов, которым я доверяю.
Расширение границ VPN для включения дополнительных машин из подсетей на стороне клиента или сервера. Включение нескольких машин на стороне сервера при использовании маршрутизируемого VPN (dev tun)
Поскольку VPN действует только в режиме точка-точка, может возникнуть желание расширить границы VPN так, чтобы клиенты могли связываться с другими машинами в сети сервера, а не только с самим сервером.
Чтобы проиллюстрировать это примером, предположим, что в локальной сети на стороне сервера используется подсеть 10.66.0.0/24 и для пула VPN-адресов используется 10.8.0.0/24, о чем говорится в директиве server в файле конфигурации OpenVPN-сервера.
Во-первых, вы должны сообщить VPN-клиентам, что подсеть 10.66.0.0/24 доступна через VPN. Это легко можно сделать с помощью следующих директив в конфигурационном файле сервера:
push "route 10.66.0.0 255.255.255.0"
Далее, необходимо настроить на LAN— шлюзе в сети сервера маршрут для маршрутизации пакетов, предназначенных для подсети VPN-клиентов (10.8.0.0/24) через OpenVPN-сервер (это необходимо только тогда, когда сервер OpenVPN и LAN-шлюз – разные машины).
Убедитесь, что вы включили пересылку для IP (ip-forwarding) (параметр ядра net.ipv4.ip_forward должен быть равен 1) и TUN/TAP на машине OpenVPN-сервера.
Проталкивание изменений DNS для перенаправления всего трафика через VPN.
Сделанные нами настройки создают VPN соединение между двумя машинами, но они не заставляют эти машины использовать VPN соединение. Если вы хотите использовать VPN соединение для всего своего трафика, вам необходимо протолкнуть (push) настройки DNS на клиентские машины.
Для этого вам необходимо раскомментировать несколько директив. Найдите секцию redirect-gateway и удалите “;” из начала строки для расскоментирования redirect-gateway:
/etc/openvpn/server.conf
push "redirect-gateway def1 bypass-dhcp"
Чуть ниже находится секция dhcp-option. Удалите “;” для обеих строк:
/etc/openvpn/server.conf
push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220"
Это позволит клиентам сконфигурировать свои настройки DNS для использования VPN соединения в качестве основного.
LastSoldier 2 / 2 / 0 Регистрация: 07.05.2013 Сообщений: 155 |
||||||||||||
25.07.2023, 01:12. Показов 1376. Ответов 16 Метки нет (Все метки) Всем привет! Конфиг сервера
Так же есть клиент. Он в домашней сети 192.168.10.0, это ПК дома с ip адресом 192.168.10.11. На нем установлен OpenVpn и он выступает в качестве клиента OpenVpn. Его ip адрес в OpenVpn 172.25.167.2 Конфиг клиента
OpenVpn везде стоит версии 2.6.5-I001. Сервер и клиент подключаются без проблем и ping проходит. Теперь стоит задача настроить доступ клиентам OpenVpn доступ в локальную сеть сервера 192.168.1.0 Я добавил строку в конфиг сервера
Попробовал ping с клиента OpenVpn до пк на работе 192.168.1.4, результат нулевой.
0 |
11437 / 7006 / 1903 Регистрация: 25.12.2012 Сообщений: 29,398 |
|
25.07.2023, 09:38 |
|
у клиентов в сети Сообщение от LastSoldier 192.168.1.0 маршрут по умолчанию на ovpn сервер смотрит?
0 |
2 / 2 / 0 Регистрация: 07.05.2013 Сообщений: 155 |
|
25.07.2023, 09:49 [ТС] |
|
у клиентов в сети Вот скрин с одного из клиентов сети 192.168.1.0 Миниатюры
0 |
4352 / 1682 / 336 Регистрация: 23.06.2009 Сообщений: 5,960 |
|
25.07.2023, 10:40 |
|
роутер какой стоит? производитель/модель шлюз на ПК сети должен указывать на ВПН сервер, средств настройки НАТ на вин 7 мне неизвестно.
0 |
2 / 2 / 0 Регистрация: 07.05.2013 Сообщений: 155 |
|
25.07.2023, 11:40 [ТС] |
|
Сообщение от .None роутер какой стоит? производитель/модель шлюз на ПК сети должен указывать на ВПН сервер, средств настройки НАТ на вин 7 мне неизвестно. Модель D-Link Dir 620 Тогда я добавил правило в маршрутизатор на роботе 192.168.1.2 — это и есть адрес пк на работе на котором ВПН сервер А разве нельзя указать этот маршрут на роутере D-Link Dir 620, чтобы не указывать на каждом пк?
0 |
4352 / 1682 / 336 Регистрация: 23.06.2009 Сообщений: 5,960 |
|
25.07.2023, 12:12 |
|
Сообщение от LastSoldier А разве нельзя указать этот маршрут на роутере D-Link Dir 620, чтобы не указывать на каждом пк? нет, так работать не будет прошивка на роутере стоковая? проще всего в вашем случае, установить virtualbox, на виртуалку поставить openwrt, и там поднять ВПН сервер, виртуалка небольшого размера, будет себе работать в фоне и не будет мешать
0 |
2 / 2 / 0 Регистрация: 07.05.2013 Сообщений: 155 |
|
25.07.2023, 12:42 [ТС] |
|
Сообщение от .None нет, так работать не будет прошивка на роутере стоковая? проще всего в вашем случае, установить virtualbox, на виртуалку поставить openwrt, и там поднять ВПН сервер, виртуалка небольшого размера, будет себе работать в фоне и не будет мешать Стоковая. Миниатюры
0 |
4352 / 1682 / 336 Регистрация: 23.06.2009 Сообщений: 5,960 |
|
25.07.2023, 13:32 |
|
приведите пример статей где так написано
0 |
4352 / 1682 / 336 Регистрация: 23.06.2009 Сообщений: 5,960 |
|
25.07.2023, 16:37 |
|
все правильно, все как я и написал, или ВПН сервер на роутере (на основном шлюзе), или если на другом ПК в сети, то нужно прописывать на каждом ПК маршрут. на виндовс 7 нет средств работы с НАТ, а при вашей схеме это необходимо, иначе работать не будет.
0 |
2 / 2 / 0 Регистрация: 07.05.2013 Сообщений: 155 |
|
25.07.2023, 20:37 [ТС] |
|
Сообщение от .None все правильно, все как я и написал, или ВПН сервер на роутере (на основном шлюзе), или если на другом ПК в сети, то нужно прописывать на каждом ПК маршрут. на виндовс 7 нет средств работы с НАТ, а при вашей схеме это необходимо, иначе работать не будет. У меня в 192.168.1.0 там находятся ПК, мосты Ubiquiti (за которыми другие ПК), ip видеонаблюдение, получается что на всех этих устройствах надо прописать маршрут? У нас все ПК с win 7 pro, значит на них да же не получается и с маршрутом из-за NAT? Или сделать как Вы говорите Сообщение от .None проще всего в вашем случае, установить virtualbox, на виртуалку поставить openwrt, и там поднять ВПН сервер, виртуалка небольшого размера, будет себе работать в фоне и не будет мешать Тогда с помощью этой виртуальной машины все будет работать и не надо будет на остальных устройствах прописывать маршруты?
0 |
4352 / 1682 / 336 Регистрация: 23.06.2009 Сообщений: 5,960 |
|
25.07.2023, 22:30 |
|
Сообщение от LastSoldier Тогда с помощью этой виртуальной машины все будет работать и не надо будет на остальных устройствах прописывать маршруты? абсолютно верно, но повозится придется с настройкой немного, т.к. сама openwrt изначально настроена на работу в качестве маршрутизатора, нужно будет очистить все настройки, настроить openvpn сервер и сделать src nat, чтобы src адрес пакетов от ВПН клиентов маскировался под адрес openwrt в локальной сети.
0 |
2 / 2 / 0 Регистрация: 07.05.2013 Сообщений: 155 |
|
25.07.2023, 23:35 [ТС] |
|
Сообщение от .None абсолютно верно, но повозится придется с настройкой немного, т.к. сама openwrt изначально настроена на работу в качестве маршрутизатора, нужно будет очистить все настройки, настроить openvpn сервер и сделать src nat, чтобы src адрес пакетов от ВПН клиентов маскировался под адрес openwrt в локальной сети. С этим вариантом все понятно, а если мне надо будет видеть еще сеть за клиентом OpenVpn, т.е. чтобы сеть 192.168.1.0 на работе, видела домашнюю сеть 192.168.10.0, мне надо еще и на клиенте то же ставить виртуалску с openwrt?
0 |
4352 / 1682 / 336 Регистрация: 23.06.2009 Сообщений: 5,960 |
|
26.07.2023, 09:13 |
|
Сообщение от LastSoldier а если мне надо будет видеть еще сеть за клиентом OpenVpn тогда нужно приобрести оборудование, которое подходит для решения подобных задач, к примеру mikrotik для двух сторон а не пытаться накостылить используя маршрутизаторы квартирного исполнения.
0 |
2 / 2 / 0 Регистрация: 07.05.2013 Сообщений: 155 |
|
26.07.2023, 11:57 [ТС] |
|
Сообщение от .None тогда нужно приобрести оборудование, которое подходит для решения подобных задач, к примеру mikrotik для двух сторон а не пытаться накостылить используя маршрутизаторы квартирного исполнения. Дома стоит Mikrotik crs328-24p-4s-rm
0 |
4352 / 1682 / 336 Регистрация: 23.06.2009 Сообщений: 5,960 |
|
26.07.2023, 12:57 |
|
Сообщение от LastSoldier crs328 это не роутер, это коммутатор, вычислительной мощности процессора не хватит для обработки шифрования, в итоге вы получите деградацию работы сети вплоть до полного отказа. все эти устройства (дир 620 — квартирный маршрутизатор и crs328 — коммутатор) не предназначены для решения вашего вопроса, фактически по объединению сетей через ВПН в одну сторону как в первоначальной задаче по описанному выше алгоритму все будет работать без перенастройки сетей и на вашем оборудовании.
0 |
2 / 2 / 0 Регистрация: 07.05.2013 Сообщений: 155 |
|
26.07.2023, 13:14 [ТС] |
|
Сообщение от .None это не роутер, это коммутатор, вычислительной мощности процессора не хватит для обработки шифрования, в итоге вы получите деградацию работы сети вплоть до полного отказа. все эти устройства (дир 620 — квартирный маршрутизатор и crs328 — коммутатор) не предназначены для решения вашего вопроса, фактически по объединению сетей через ВПН в одну сторону как в первоначальной задаче по описанному выше алгоритму все будет работать без перенастройки сетей и на вашем оборудовании. По одному варианту надо будет поставить на сервер virtualbox и на виртуалку установить openwrt, тогда получится без замены оборудования, а по другому брать другое оборудование (роутеры) для этих задач.
0 |
OpenVPN проброс моста или видимость сети за сервером.
☑
0
Event_Now
10.05.18
✎
09:41
Здравствуйте знатоки.
Разбираюсь тут с OpenVPN и возникла проблема с доступом в локальную сеть за сервером с установленным OpenVPN.
Судя по мануалам и той информации, что нашёл в интернете, для меня больше всего подходит подключение типа мост (bridge).
Итак, имеется сервер Windows server 2012 R2, две локальных сети размещённых в разных городах.
Подсеть офиса №1 имеет адресацию 192.168.94.х
Подсеть офиса №2 имеет адресацию 192.168.115.х
Задача, настроить мост между офисами.
Настройки фаерволов и проброс портов, корректны. Классическое соединение с DHCP, через подсеть 10.10.10.x работает без проблем, пакеты и ping до сервера проходят, но сеть за сервером OpenVPN не видна.
Если кто уже настраивал подобную схему, прошу откликнуться.
1
Event_Now
10.05.18
✎
09:58
Вот как я пробую на данный момент.
Конфиг сервера:
proto tcp4-server
port 30000
dev tap
dev-node oVPN
tls-server
tls-auth «C:\\OpenVPN\\easy-rsa\\keys\\ta.key» 0
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
ca «C:\\OpenVPN\\easy-rsa\\keys\\ca.crt»
cert «C:\\OpenVPN\\easy-rsa\\keys\\SrvVPN.crt»
key «C:\\OpenVPN\\easy-rsa\\keys\\SrvVPN.key»
dh «C:\\OpenVPN\\easy-rsa\\keys\\dh4096.pem»
server-bridge 192.168.94.199 255.255.255.0 192.168.94.200 192.168.94.210
client-to-client
keepalive 10 120
cipher AES-128-CBC
comp-lzo
persist-key
persist-tun
client-config-dir «C:\\OpenVPN\\config»
verb 3
route-delay 5
route-method exe
2
Event_Now
10.05.18
✎
10:03
Ну и конфиг клиента:
remote [тут адрес сервера]
client
port 30000
proto tcp4-client
dev tap
tls-client
tls-auth «C:\\Program Files\\OpenVPN\\config\\ta.key» 1
remote-cert-tls server
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
ca «C:\\Program Files\\OpenVPN\\config\\ca.crt»
cert «C:\\Program Files\\OpenVPN\\config\\ClientVPN.crt»
key «C:\\Program Files\\OpenVPN\\config\\ClientVPN.key»
cipher AES-128-CBC
comp-lzo
persist-key
persist-tun
verb 3
mute 20
3
Event_Now
10.05.18
✎
10:08
А теперь суть проблемы.
Соединение устанавливается, сервер с OpenVPN пингуется, доступ есть. А вот к серверам с другими адресами, как и к любой рабочей станции и/или сетевым устройствам, доступа нет.
Знает кто, как это победить? Ну или выскажите собственные мысли по этому поводу.
4
eRik
10.05.18
✎
10:15
А маршрутизацию кто настраивать будет, Пушкин?
5
Exec
10.05.18
✎
10:16
(0) У меня без моста реализовано.
Мой конфиг серва:
===
port 2033
proto tcp4
dev tun0
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh4096.pem
server 10.192.18.0 255.255.255.0
push «route 10.192.18.0 255.255.255.0»
push «route 192.168.18.0 255.255.255.0»
client-config-dir /etc/openvpn/ccd
auth SHA256
cipher AES-256-CBC
keepalive 30 180
max-clients 30
user root
group wheel
persist-key
persist-tun
mssfix 0
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 3
===
push — отдаст нужные маршруты клиентам.
Если надо каждому клиенту отдельный маршрут, то в файле клиента на сервере указать:
push «route 192.168.1.232 255.255.255.255»
push «route 192.168.1.233 255.255.255.255»
push «route 192.168.3.0 255.255.255.0»
Соответственно, помимо указанных в конфиге сервера подсеток — этому клиенту отдадуться еще три маршрута дополнительно.
А т.к тебе еще надо при установке связи прописать на сервере маршрут к удалённой сети — дописываются еще такие строчки:
iroute «192.168.50.0 255.255.255.0»
iroute «10.10.15.20 255.255.255.255»
После установления соединения с этим клиентом — ему уходят роуты push, и одновременно на сервере появляется маршрут в дальнюю сеть 192.168.50.0/24 и к одиночному серверу за той же удалённой сетью 10.10.15.20/32
6
Event_Now
10.05.18
✎
10:22
(4) — Да, наверно его позову. Не могли бы вы более конкретно описать, где их добавлять, в файл конфигурации сервера?
Вы уж извините, был бы я таким умным как вы, то не стал бы создавать данную тему.
7
Event_Now
10.05.18
✎
10:25
(5) -Спасибо за ответ, сейчас попробую. По результату отпишусь.
p.s. Я так понимаю, у вас OpenVPN на линухе крутится. Забавно, что в сети полно инструкций по линуксу на данную тему, а вот про windows очень мало.
8
Exec
10.05.18
✎
10:28
(7) да, центось. На винде по идее то же самое, только у клиента на win 8 и выше не забывай запускать всё от админа, что клиента, что сервер, иначе не будет доступа для изменения таблицы маршрутизации, а так же на стороне клиента прописать в конфиг дополнительно две строчки:
==
route-method exe
route-delay 2
===
p.s: ну и шлюзование на винде-сервере должно быть включено, чтобы она в качестве роутера выступала
9
arsik
гуру
10.05.18
✎
10:30
(8) В новой версии уже все есть. Отдельная служба запускается, которая рулит маршрутами и прочим. Сейчас админские права для запуска перезапуска ненужны боле.
10
Event_Now
10.05.18
✎
10:37
(9) — Я использую openvpn 2.4.6-I602 (она последняя).
Простите, как видим из моего примера, новая версия «рулит маршрутами» не особо. Ну или я опять пропустил галочку в настройках.
Можете подсказать, где всё это глянуть?
11
arsik
гуру
10.05.18
✎
10:40
(10) Тут разбираться надо. Покажи маршруты на
1) Сервере опенвпн
2) Клиенте опенвпн
3) на компе за сервером
4) На компе за клиентом
12
Event_Now
10.05.18
✎
10:42
(5) — Сервер ругается на iroute, мол нет такой команды. Дальше не стартует.
13
Event_Now
10.05.18
✎
10:47
(11) — Сервер
IPv4 таблица маршрута
===========================================================================
Активные маршруты:
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
0.0.0.0 0.0.0.0 192.168.94.1 192.168.94.7 276
10.10.0.0 255.255.255.0 10.10.0.2 10.10.0.1 21
10.10.0.0 255.255.255.252 On-link 10.10.0.1 276
10.10.0.1 255.255.255.255 On-link 10.10.0.1 276
10.10.0.3 255.255.255.255 On-link 10.10.0.1 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.94.0 255.255.255.0 On-link 192.168.94.7 276
192.168.94.7 255.255.255.255 On-link 192.168.94.7 276
192.168.94.255 255.255.255.255 On-link 192.168.94.7 276
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 10.10.0.1 276
224.0.0.0 240.0.0.0 On-link 192.168.94.7 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 10.10.0.1 276
255.255.255.255 255.255.255.255 On-link 192.168.94.7 276
14
Event_Now
10.05.18
✎
10:50
(11) — Клиент (внешний ПК)
IPv4 таблица маршрута
===========================================================================
Активные маршруты:
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
0.0.0.0 0.0.0.0 192.168.1.14 192.168.1.52 35
0.0.0.0 0.0.0.0 25.0.0.1 e 9256
10.10.0.0 255.255.255.0 10.10.0.5 10.10.0.6 291
10.10.0.4 255.255.255.252 On-link 10.10.0.6 291
10.10.0.6 255.255.255.255 On-link 10.10.0.6 291
10.10.0.7 255.255.255.255 On-link 10.10.0.6 291
127.0.0.0 255.0.0.0 On-link 127.0.0.1 331
127.0.0.1 255.255.255.255 On-link 127.0.0.1 331
127.255.255.255 255.255.255.255 On-link 127.0.0.1 331
192.168.94.0 255.255.255.0 10.10.0.5 10.10.0.6 291
192.168.1.0 255.255.255.0 On-link 192.168.1.52 291
192.168.1.52 255.255.255.255 On-link 192.168.1.52 291
192.168.1.255 255.255.255.255 On-link 192.168.1.52 291
192.168.56.0 255.255.255.0 On-link 192.168.56.1 281
192.168.56.1 255.255.255.255 On-link 192.168.56.1 281
192.168.56.255 255.255.255.255 On-link 192.168.56.1 281
224.0.0.0 240.0.0.0 On-link 127.0.0.1 331
224.0.0.0 240.0.0.0 On-link 192.168.56.1 281
224.0.0.0 240.0.0.0 On-link 192.168.1.52 291
224.0.0.0 240.0.0.0 On-link e 9256
224.0.0.0 240.0.0.0 On-link 10.10.0.6 291
255.255.255.255 255.255.255.255 On-link 127.0.0.1 331
255.255.255.255 255.255.255.255 On-link 192.168.56.1 281
255.255.255.255 255.255.255.255 On-link 192.168.1.52 291
255.255.255.255 255.255.255.255 On-link e 9256
255.255.255.255 255.255.255.255 On-link 10.10.0.6 291
15
arsik
гуру
10.05.18
✎
10:51
Самое простое — на сервере включить маршрутизацию и включить NAT из опенвпн интерфейса во внутреннюю сеть.
16
Event_Now
10.05.18
✎
10:52
(15) — И потом на всех машинах прописывать шлюзом этот сервер. Не, не вариант.
17
Event_Now
10.05.18
✎
10:53
(11) — Судя по строке (192.168.94.0 255.255.255.0 10.10.0.5 10.10.0.6 291 ) Маршрут приходит.
18
arsik
гуру
10.05.18
✎
10:54
(16) Как раз нет. НАТ же. Все пакеты во внутреннюю сеть пойдут как бы от сервера.
19
Event_Now
10.05.18
✎
10:59
(18) — Ладно, попробуем данную зверушку. Сразу вопрос, как реализовать?
p.s. Судя по FAQ Community Software, проблема в том, что не происходит маршрутизация между виртуальным и физическим интерфейсами в локальную сеть.
Текст:
The clients will negotiate a DHCP lease through the tunnel, meaning that both VPN clients and local machines will receive their IP addresses from the DHCP server address pool. The one complexity about this configuration is that you need to modify your DHCP server configuration to differentiate between local clients and VPN clients. The reason for this is that you must not pass out a default gateway to VPN clients. See the Win32 install notes for an example.
20
eRik
10.05.18
✎
11:06
Судя по таблице маршрутов, ни сервер, ни клиент openvpn не являются шлюзами в своих сетях. А значит нужно на шлюзах дописать вручную маршруты в чужую сеть на свой узел openvpn.
Или да, придется делать НАТ.
21
Event_Now
10.05.18
✎
11:26
(20) — Так, ну давай сперва попробуем NAP, а потом уже пущу в ход «тяжелую артиллерию». (полезу прописывать маршруты на шлюзе)
Сразу вопрос, как развернуть NAP в OpenVPN?
22
Event_Now
10.05.18
✎
11:28
(20)- Очипятолся два раза. (NAP = NAT)
23
Exec
10.05.18
✎
11:34
Штатно — средствами винды (rras в win-server)
Так же можно попробовать обычным расшариванием сетевого подключения, но не уверен что сработает
24
arsik
гуру
10.05.18
✎
11:35
Если есть доступ к маршрутизатору, то проще тогда маршруты на нем добавить.
25
eRik
10.05.18
✎
11:45
(21) Как раз таки НАТ и является тяжелой артиллерией. Проще маршрут на шлюзе дописать, ну или на рандомных клиентах (если их немного и трогать настройки шлюза нет возможности), которым нужен доступ в чужую подсеть.
26
eRik
10.05.18
✎
11:54
Хотя, что-то я погорячился с НАТом — он тут вообще не при делах. Ибо исходящие запросы с рандомного компа в чужую сеть все-равно будут уходить на шлюз, и НАТ тут не поможет. Разве что в другую сторону, но там и без него все нормально будет.
В общем, добавлять маршрут на шлюз или на каждый комп, которых будет работать с чужой сетью.
27
Event_Now
10.05.18
✎
12:07
(22) — Спасибо за рекомендацию.
28
Event_Now
10.05.18
✎
12:12
(26) — Вот и я подумал, причём тут NAT? Ладно, проверю сейчас, светится ли адрес сервака на шлюзе и куда пакеты направляются, а там дальше будет видно.
Вообще, идея с DHCP на OpenVPN и пробросом маршрутов только для нужных адресов, мне импонирует больше, т.к. она более гибкая и подконтрольная. Жаль, что нет особо времени разобраться, т.к. сроки горят. (нужно вчера, как обычно)
Спасибо за наводку (на пиво), пойду прописывать маршруты.
По завершению, отпишусь о результатах.
29
Сияющий в темноте
10.05.18
✎
13:50
С клиента,когда пакет идет в чужую сеть,то выбирается адаптер с меньшей метрикой,то есть ли на клиента добавлять маршрут,который можно брать с dhcp сервера,или все пакеты пойдут в шлюз по умолчанию,и ловить их там
30
Провинциальный 1сник
10.05.18
✎
13:53
Я не понимаю логику ТС. Нужен мост, а подсети разные. Нафига тогда козе баян? Мост на то и мост, что это по сути объединение двух локалок патч-кордом.
31
Event_Now
11.05.18
✎
10:24
(29) — Маршруты идут в любом случае через шлюз, VPN сервер им и является. По логике, маршрутизацию должен сам VPN сервер раздавать клиентам и пускать их только туда, куда им разрешено. (Но это в идеале)
Я с OpenVPN не работал до данного момента, пользовался Kerio VPN, но он платный. А контора, что запросила создать им VPN мост, за софт платить не хочет. Вот и пытаюсь слепить из того, что имеется в наличии.
32
Event_Now
11.05.18
✎
10:26
(30) — С вашей логикой, я вижу лучше не спорить. )))))))) *facepalm*
33
Event_Now
11.05.18
✎
11:27
Итак.
Решение задачи.
—
Конфиг сервера:
proto tcp4-server
port 30000
dev tun
tls-server
tls-auth «C:\\OpenVPN\\easy-rsa\\keys\\ta.key» 0
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
ca «C:\\OpenVPN\\easy-rsa\\keys\\ca.crt»
cert «C:\\OpenVPN\\easy-rsa\\keys\\SrvVPN.crt»
key «C:\\OpenVPN\\easy-rsa\\keys\\SrvVPN.key»
dh «C:\\OpenVPN\\easy-rsa\\keys\\dh4096.pem»
server 10.10.0.0 255.255.255.0
push «route 10.10.0.0 255.255.255.0»
push «route 192.168.94.0 255.255.255.0»
client-to-client
keepalive 10 120
cipher AES-128-CBC
comp-lzo
persist-key
persist-tun
client-config-dir «C:\\OpenVPN\\config»
verb 3
route-delay 5
route-method exe
—
Конфиг клиента:
remote [тут адрес сервера]
client
port 30000
proto tcp4-client
dev tun
tls-client
tls-auth «C:\\Program Files\\OpenVPN\\config\\ta.key» 1
remote-cert-tls server
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
ca «C:\\Program Files\\OpenVPN\\config\\ca.crt»
cert «C:\\Program Files\\OpenVPN\\config\\ClientVPN.crt»
key «C:\\Program Files\\OpenVPN\\config\\ClientVPN.key»
cipher AES-128-CBC
comp-lzo
persist-key
persist-tun
verb 3
mute 20
route-delay 5
route-method exe
После этого, заходим в свойства физического адаптера и на закладке «Доступ», ставим галочку напротив «Разрешить другим поль…», а в списке «Подключение домашней сети», выбираем наш виртуальный адаптер OpenVPN.
—
Вот собственно и всё.
p.s. Всем спасибо за участие, всех вам благ и быстрых решений ваших задач.
Тема закрыта.
34
arsik
гуру
11.05.18
✎
11:31
Короче ты все таки НАТ сделал. Ну хозяин барин.
35
Event_Now
11.05.18
✎
11:35
(34) — Тут у меня пара человек постоянно мотаются по разным офисам и хз какие там адреса у сеток. Дабы исключить проблему с адресацией, я сам с собой посовещался и принял решение об использовании NAT конфигурации.
36
arsik
гуру
11.05.18
✎
11:56
(35) А при чем тут какая сетка за клиентом? У тебя же трафик будет идти от виртуального интерфейса опенвпн (10.10.0.0 255.255.255.0)
37
arsik
гуру
11.05.18
✎
11:57
+ (36) Тебе в офисе на основном маршрутизаторе нужно было добавить маршрут 10.10.0.0 255.255.255.0 до сервера опенвпн и все.
38
Йохохо
11.05.18
✎
12:00
(35) чтобы такое исключить надо выбрать хитрую подсеть, а не натить, 172.29.251.0 рекомендую
39
Event_Now
11.05.18
✎
12:10
(37) + (38) — Ребята, спасибо за комментарии, но давайте не будем плодить их, т.к. когда появится человек с подобным вопросом как у меня, то ему будет сложно найти решение задачи и придётся опять поднимать текущую тему.
40
Йохохо
11.05.18
✎
12:11
(39) НАТ не поможет при совпадении подсетей, так норм?
41
arsik
гуру
11.05.18
✎
12:13
(40) Маршрутизация тоже не поможет. Только NETMAP — но как на винде нетмап сделать это большой вопрос.
42
Йохохо
11.05.18
✎
12:14
(41) да пока непонятно какой вопрос у ТС остался) нат лучше тем, что порты клиента останутся закрыты, для домашних ноутов это +
43
Провинциальный 1сник
12.05.18
✎
19:30
(33) «dev tun » и мост как-то слабо сочетаются в итоге.