Настраиваем Openvpn сервер на OpenWRT - Geek-Speak

Настраиваем Openvpn сервер на OpenWRT

Главная Форумы SOFTWARE System settings Настраиваем Openvpn сервер на OpenWRT

Просмотр 1 сообщения - с 1 по 1 (всего 1)
  • Автор
    Сообщения
  • #2446
    E-tec
    Хранитель

      Перед тем как начать – зачем это надо? Вот несколько сценариев использования:

      • Пользователь хочет безопасно соединиться с 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 так же увидим новый адаптер, либо через проверку статуса, или же смотрим сразу логи.

      На этом настройка завершена!

      СМОТРИТЕ ТАК ЖЕ ТЕМЫ:

    Просмотр 1 сообщения - с 1 по 1 (всего 1)
    • Для ответа в этой теме необходимо авторизоваться.
    Авторизация
    *
    *
    Регистрация
    *
    *
    *
    Пароль не введен
    *
    Генерация пароля