Главная › Форумы › SOFTWARE › System settings › Настраиваем Openvpn сервер на OpenWRT
- В этой теме 0 ответов, 1 участник, последнее обновление 1 год, 2 месяца назад сделано E-tec.
-
АвторСообщения
-
29.08.2023 в 15:15 #2446
Перед тем как начать — зачем это надо? Вот несколько сценариев использования:
- Пользователь хочет безопасно соединиться с OpenWrt маршрутизатором. На данный момент пользователь уже может получить доступ к OpenWrt маршрутизатору, но через внешнюю сеть, такую как Интернет. Конечным результатом станет прямое частное соединение между OpenVPN клиентом и сервером. В основном это будет выглядеть так, будто OpenVPN клиент находится в подсети маршрутизатора(но не в той подсети, которая является для маршрутизатора внешней).
- В моем случае — оптимизация виртуальных машин =) Позволит избавиться от отдельного vds, что в свою очередь уменьшит требования по ресурсам к основному серверу
Следует отметить, что TAP это не синоним сетевого моста, тем не менее TAP адаптер нужен для сетевого моста, в то же время рекомендуется использовать TUN, если не нужен сетевой мост. Для простоты мы будем использовать эти термины как взаимозаменяемые, так как сравнение терминов “сервер” и “сервер-мост” может привести к путанице. TUN будет использоваться для обозначения традиционного сервера, в то время как TAP будет относиться к “серверу-мосту”.
Можно настраивать OpenVPN на OpenWrt удалённо. Однако рекомендуется делать это локально, так как это упростит поиск и устранение неисправностей.
TUN сервер расходует меньше ресурсов и только отсылает трафик, предназначенный только для клиента. В то время, как TAP сервер менее эффективный и отсылает клиентам широковещательный трафик.
TUN сервер может использовать ту же подсеть, что и сервер DHCP, если это требуется, однако рекомендуется выделять диапазон IP-адресов для TUN сервера за пределами диапазона DHCP, иначе могут возникнуть IP конфликты (один IP-адрес будет использоваться как DHCP, так и TUN сервером для двух разных клиентов).
Для TUN сервера легче настроить безопасность, так как его клиенты могут находиться в отдельной подсети, которая может легко контролироваться межсетевым экраном. Благодаря тому, что клиентам в данном режиме не отсылается широковещательная информация, злоумышленник не сможет получить доступ к большому объёму данных.
Сервер TAP объединяет клиентов в сеть более бесшовной образом, это может упростить процесс настройки различных сетевых приложений. Обратите внимание на то, что независимо от выбранного метода, создание правил межсетевого экрана имеет более важное значение безопасности, чем выбор между TUN и TAP сервером.
ВНИМАНИЕ! При использовании TAP сервера рекомендуется изменить маску подсети на отличную от 192.168.0.XXX или 192.168.1.XXX. Они очень распространены и приведут к конфликтам в маршрутизации. Это обычно может быть достигнуто путём изменения IP-адреса OpenWrt/OpenVPN маршрутизатора к чему-то наподобие 192.168.7.1
Для развертывания сервера OpenVPN я буду использовать OpenWRT 22.03.5, как установить OpenWRT на ПК или виртуальную машину смотри ТУТ. Все команды выполняются в терминале, т.к. LuCI «криво» отображает настройки в графическом интерфейсе.
Настройка сервера OpenVPN на OpenWRT
Первым делом нужно обновить список пакетов, и установить необходимые пакеты для развертывания сервера:
opkg update opkg install openvpn-openssl openvpn-easy-rsa
После успешной установки генерируем необходимые сертификаты для работы сервера и подключения клиентов:
easyrsa init-pki nopass easyrsa build-ca easyrsa gen-dh easyrsa build-server-full openwrt-ovpn-server nopass easyrsa build-client-full client-1 nopass
ВНИМАНИЕ! При генерации CA ключа openwrt попросит ввести пароль, он нужен будет при каждой генерации нового сертификата, если не хотите вводить пароль каждый раз добавьте в конце nopass!
Вышеприведённые команды создадут сертификат сервера с именем openwrt-ovpn-server и сертификат клиента с именем client-1.
Путь сохранения сертификатов и ключей по умолчанию /root/pki, либо /etc/easy-rsa/pki.
Вы можете создать несколько клиентских сертификатов, запустив easyrsa build-client-full несколько раз и указав разные имена.
Вы можете создать новый набор сертификатов, запустив clean-all и те же команды снова, что и выше, чтоб перегенерировать ВЕСЬ пакет сертификатов.
Копируем сертификаты в папку установки openvpn, для этого я создал отдельно папку, для хранения сертификатов сервера. Так же сразу создаем папки для логов и файлов ccd.:
# mkdir /etc/openvpn/keys # mkdir /etc/openvpn/logs # mkdir /etc/openvpn/ccd
После чего копируем в папку keys сертификаты сервера:
cp /root/pki/ca.crt /root/pki/private/openwrt-ovpn-server.* /root/pki/issued/openwrt-ovpn-server.* /root/pki/dh.pem /etc/openvpn/keys
Ключи сервера есть, создаем файл конфиг server.conf:
# touch /etc/openvpn/server.conf
После чего открываем его:
# nano /etc/openvpn/server.conf
Заполняем параметры:
port 777 # Порт по которому будет работать сервер МЕНЯЕМ НА СВОЙ proto tcp4 # Протокол может быть udp, либо tcp, если есть необходимость в этом в моем случае TCP через IPv4 dev tap # Тип подключения tap, либо tun #=============================Сертификаты сервера==================================// ca /etc/openvpn/keys/ca.crt key /etc/openvpn/keys/openwrt-ovpn-server.key cert /etc/openvpn/keys/openwrt-ovpn-server.crt dh /etc/openvpn/keys/dh.pem #==================================================================================// server 10.8.0.0 255.255.255.0 # подсеть для туннеля, может быть любой topology subnet # Позволяет использовать все IP адреса в сети Openvpn используемые в файлах ccd client-to-client # позволяет клиентам openvpn подключаться друг к другу keepalive 10 120 max-clients 20 # Максимальное количество подключений к серверу client-config-dir /etc/openvpn/ccd # директория с индивидуальными настройками клиентов status /etc/openvpn/logs/openvpn-status.log # Статус подключения клиентов к серверу log-append /etc/openvpn/logs/openvpn.log # Логи OpenVPN сервера verb 3 # Качество логирования сервера mute 20 auth-nocache tun-mtu 1500 cipher AES-256-GCM # Шифрование
Добавляем службу Openvpn в автозапуск, и запускаем ее:
# /etc/init.d/openvpn enable # /etc/init.d/openvpn start
Проверяем запустился сервер или нет. Можно проверить в iconfig где увидите новый интерфейс, либо смотрим логи в папке /etc/openvpn/logs и исправляем. Если все в порядке идем настравивать интерфейс и фаерволл.
Создайте VPN интерфейс (с именем vpn):
# uci set network.vpn=interface # uci set network.vpn.ifname=tap0 # uci set network.vpn.proto=none # uci set network.vpn.auto=1
Разрешите входящие клиентские соединения, для этого откройте порт на сервере (В МОЕМ ПРИМЕРЕ ЭТО TCP 777) в вашем межсетевом экране:
# uci set firewall.Allow_OpenVPN_Inbound=rule # uci set firewall.Allow_OpenVPN_Inbound.target=ACCEPT # uci set firewall.Allow_OpenVPN_Inbound.src=* # uci set firewall.Allow_OpenVPN_Inbound.proto=tcp # uci set firewall.Allow_OpenVPN_Inbound.dest_port=777
Вносим изменения и перезагружаем сеть с фаерволлом:
# uci commit network # /etc/init.d/network reload # uci commit firewall # /etc/init.d/firewall reload
Чтоб проверить изменения, подключаемся к web интерфейсу LuCI, Вы должны увидеть следующее:
Сеть — Интерфейсы:
Межсетевой экран — Правила для трафика
Межсетевой экран — Общие настройки
Настройка индивидуальных параметров клиента через файлы ccd. Создадим файл с названием сертификата, кому хотим выделить персональные настройки, в каталоге сервера /etc/openvpn/ccd. Я для примера создам для нашего клиента client-1:
# touch /etc/openvpn/ccd/client-1
откроем файл любым удобным Вам редактором:
# nano /etc/openvpn/ccd/client-1
Заполним файл следующими параметрами:
ifconfig-push 10.2.0.10 255.255.255.0 # Желаемый статический IP адрес и маска клиента в тунеле iroute 192.168.0.0 255.255.255.0 # Локальная сеть клиента push "route 10.59.0.0 255.255.255.0 192.168.0.5 1" # Передать клиенту роут в сеть сервера, может быть абсолютно любой, экспериментируйте =), либо удалите или закомментируйте параметр
P.S. Роут прописывается по аналогии, как это делается в windows, т.е. ip и маска сети, куда нужно идти и шлюза за которым эта сеть находится. 1″ — это метрика, ставьте под свои нужды, либо пишите без нее
На этом настройка сервера завершена, идем настраивать клиентские ПК. Чтоб скопировать сертификаты клиентов мне потребовался отдельный ПК у которого есть доступ по smb протоколу, можно настроить так же smb на openwrt или использовать ftp чтоб скачать, но мне было быстрее так, решайте сами кому как удобнее)))) После чего скопировал ключи на пк через scp, а потом уже на пк где установлен openvpn клиент:
scp /root/pki/ca.crt /root/pki/private/client-1.* /root/pki/issued/client-1.* root@CLIENT_IP_ADDRESS:/etc/openvpn
Настройка клиента для windows
В зависимости от того куда вы установили клиент openvpn пути могут быть следующими: C:\OpenVPN либо C:\Users\ИМЯ_ПОЛЬЗОВАТЕЛЯ\OpenVPN. Переходим в папку OpenVPN создаем в ней папку ssl или keys, в которую надо будет скопировать сертификаты клиента client-1.crt, client.key и ca.crt.
Далее идем в папку …\OpenVPN\config создаем текстовый документ (блокнот) и копируем туда следующее:
remote geek-speak.ru 777 # IP и порт сервера, вместо домена geek-speak.ru вписываем СВОЙ ВНЕШНИЙ IP* client # Авторизоваться как клиент dev tap # Тип подключения tap, либо tun proto tcp # Протокол может быть udp, либо tcp, в зависимости какой использует сервер #========================Сертификаты для подключения================================// ca C:\\OpenVPN\\ssl\\ca.crt cert C:\\OpenVPN\\ssl\\client-1.crt key C:\\OpenVPN\\ssl\\client-1.key #===================================================================================// remote-cert-tls server auth-nocache cipher AES-256-GCM tun-mtu 1500 verb 4 mute 20 float
* Что такое ВНЕШНИЙ IP, он же СТАТИЧЕСКИЙ
Сохраняем документ и переименовываем его в client.ovpn
После чего запускаем с рабочего стола программу «OpenVPN GUI» от имени администратора. Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:
Либо включаем автозапуск при старте системы в службах windows:
Если при соединении видим ошибку идем в папку с логами ..\OpenVPN\log смотрим причину.
Настройка для Linux
Если клиент так же на linux как и сервер, устанавливаем клиента из репозитория свей системы:
Debian и ее производные:# apt update # apt install openvpn
red hat и ее производные:
# yum install epel-release # yum install openvpn
Создаем необходимые папки:
# mkdir /etc/openvpn/logs # mkdir /etc/openvpn/keys
После чего копируем в каталог /etc/openvpn/client ключи и сертификаты клиента. В корне openvpn создаем конфиг файл для подключения:
# touch /etc/openvpn/client.conf
Открываем его любым удобным вам редактором я использую «nano»:
# nano /etc/openvpn/client.conf
Заполняем его:
remote geek-speak.ru 777 # IP и порт сервера client # Авторизоваться как клиент dev tap # Тип подключения tap, либо tun proto tcp # Протокол может быть udp, либо tcp, в зависимости какой использует сервер #========================Сертификаты для подключения================================// ca /etc/openvpn/client/ca.crt cert /etc/openvpn/client/client-1.crt key /etc/openvpn/client/client-1.key #===================================================================================// remote-cert-tls server auth-nocache cipher AES-256-GCM tun-mtu 1500 verb 4 mute 20 float
После чего запускаем клиент.
Debian и ее производные:# service start openvpn@client # service enable openvpn@client
red hat и ее производные:
# systemctl start openvpn@client # systemctl enable openvpn@client
Чтоб проверить вводим команду ifconfig так же увидим новый адаптер, либо через проверку статуса, или же смотрим сразу логи.
На этом настройка завершена!
СМОТРИТЕ ТАК ЖЕ ТЕМЫ:
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.