OpenVPN на Ubuntu Server 14.04 - Geek-Speak

OpenVPN на Ubuntu Server 14.04

Главная Форумы SOFTWARE System settings OpenVPN на Ubuntu Server 14.04

Помечено: , , , ,

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

      Главное условия построения защищенной сети – наличие белого IP адреса (он же статический). Уточнить или купить его можно у вашего текущего провайдера, обычно стоит не много, и облагается ежемесячной абонентской платой.

      Для развертывании сервера будет достаточно 40Гб пространства на жестком диске, 4 процессорных ядра (если вы используете виртуальную машину) 4Гб ОЗУ, 1 сетевой адаптер.

      После установки Ubuntu Server сразу зайдем в настройки сетевого адаптера и пропишем статический IP адрес внутренней сети нашего сервера. Все сетевые настройки находятся в файле /etc/network/interfaces, поэтому откроем любым текстовым редактором и пропишем интерфейсы желаемый IP адрес:
      sudo nano /etc/network/interfaces
      Я использую редактор nano, для своего сервера я буду использовать IP адрес 192.168.1.115, конфиг интерфейсов будет выглядеть следующим образом:

      # This file describes the network interfaces available on your system
      # and how to activate them. For more information, see interfaces(5).
      
      # The loopback network interface
      auto lo
      iface lo inet loopback
      
      # The primary network interface
      auto eth0
      iface eth0 inet static
              address 192.168.1.115 - внутренний IP адрес OpenVPN сервера
              netmask 255.255.255.0 - используемая маска
              gateway 192.168.1.1 - шлюз сети
              dns-nameservers 8.8.8.8 - тут будут DNS сервера Вашего провайдера

      перезагружаем сервер
      sudo reboot
      после чего убеждаемся, что интернет на нашем сервере до сих пор есть и продолжаем развертку. Зайдем под Root пользователем для удобства.
      sudo -i
      После чего установим пакет OpenVPN
      apt-get install openvpn
      Защита соединения в OpenVPN в данном случае строится на использовании сертификатов и ключей для сервера и для клиентов. Для их генерации в пакете OpenVPN имеются специальные скрипты, расположенные в /usr/share/doc/openvpn/examples/easy-rsa/2.0 Перед началом работы скопируем их, чтобы не изменять оригиналы.Для 14.04 LTS, с лета 2013 года easy-rsa не входит в OpenVPN и команда указанная выше не сработает(не найдет easy-rsa), тогда делаем следующее:
      apt-get install easy-rsa

      mkdir /etc/openvpn/easy-rsa
      cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa/2.0

      Переходим в созданную директорию, где и займёмся генерацией ключей и сертификатов
      cd /etc/openvpn/easy-rsa/2.0
      Редактируем файл переменных
      nano vars
      Файл vars отвечает за автоматическое заполнение полей при создании сертификатов, т.е. если Вам нужно будет с генерировать 100+ сертификатов, при этом Вы не хотите тратить время на заполнение всех полей, которые будут типичными для всех сертификатов, то они будут автоматически подобраны из этого файла.

      # Почти в самом низу файла, заполняем информацию о сертификатах по умолчанию (ваши значения).
      export KEY_COUNTRY="RU" - Ваше местоположение
      export KEY_PROVINCE="Amur Region" - Ваш регион, по идее то же самое, что и предыдущее поле
      export KEY_CITY="Blagoveschensk" - Ваш город
      export KEY_ORG="Organization" - Ваша организация сокращенно
      export KEY_EMAIL="vash@email.tut" - Ваш электронный адрес почты
      export KEY_OU="MyOrganizationalUnit" - Ваша организация
      # PKCS11 я не использовал, поэтому оставил без изменений. Кто шарит нафига эта штука, напишите ниже в теме.
      export PKCS11_MODULE_PATH=changeme
      export PKCS11_PIN=1234
      
      #Добавить строчку
      export KEY_ALTNAMES="MyOpenVPN"

      После чего сохраняем файл и выходим из редактора.копируем конфиг openssl
      cp openssl-1.0.0.cnf openssl.cnf
      Загружаем переменные
      source ./vars
      Очищаем от старых сертификатов и ключей папку keys и создаем серийный и индексные файлы для новых ключей
      ./clean-all
      Создаем сертификат. По умолчанию поля будут заполняться данными, введенными ранее в vars, поэтому можно ничего не менять.
      ./build-ca
      Создаем ключ сервера
      ./build-key-server server
      В конце соглашаемся с запросом на подпись и добавление сертификата в базу.
      Создаем ключ Диффи-Хеллмана
      ./build-dh
      Cоздаем ключ для tls-аутификации
      openvpn --genkey --secret keys/ta.key
      Перемещаем сертификаты
      cp -r /etc/openvpn/easy-rsa/2.0/keys/ /etc/openvpn/
      Создание файла конфигурации сервера
      Копируем архив конфигураций сервера в папку с нашим Openvpn, после чего переходим в директорию с нашей впн, распаковываем конфиг для дальнейшего редактирования:

      cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
      cd /etc/openvpn
      gunzip -d /etc/openvpn/server.conf.gz

      nano /etc/openvpn/server.conf
      копируем туда следующее:

      # Порт по которому будет работать ваша сеть, этот порт должен быть открыт на вашем шлюзе
      port 443
      # Протокол может быть UDP или TCP, я выбрал 1-й вариант.
      proto udp
      # Если вы выберите протокол TCP, здесь должно быть устройство tap. Однако, это вариант я не проверял, поэтому ищите $
      dev tun
      
      # Указываем где искать ключи
      ca /etc/openvpn/keys/ca.crt
      cert /etc/openvpn/keys/server.crt
      key /etc/openvpn/keys/server.key  # This file should be kept secret
      dh /etc/openvpn/keys/dh2048.pem
      
      # Задаем IP и маску виртуальной сети. Произвольно, но если не уверены лучше делайте как показано здесь
      server 10.0.1.0 255.255.255.0
      
      topology subnet
      
      # Указыем, где хранятся файлы с настройками IP-адресов клиентов (создадим ниже)
      client-config-dir /etc/openvpn/ccd
      
      # Запоминать динамически выданные адреса для VPN-клиентов и при последующих подключениях назначать те же значения.
      ifconfig-pool-persist ipp.txt
      
      # Указываем сети, в которые нужно идти через туннель (сеть-клиента) это возможные адреса удаленных клиентов.
      route 192.168.0.0 255.255.255.0
      route 192.168.1.0 255.255.255.0
      route 102.168.100.0 255.255.255.0
      
      # Включаем TLS
      tls-server
      tls-auth /etc/openvpn/keys/ta.key 0
      tls-timeout 120
      auth SHA1 # по-умолчанию. Можно ещё MD5.
      cipher BF-CBC
      
      # Если нужно, чтобы клиенты видели друг друга раскомментируйте
      client-to-client
      
      keepalive 10 120
      
      # Сжатие трафика
      comp-lzo
      
      # Максимум клиентов
      max-clients 250
      
      user nobody
      group nogroup
      
      # Не перечитывать ключи, не закрывать и переоткрывать TUN\TAP устройство, после получения SIGUSR1 или ping-restart
      persist-key
      persist-tun
      
      status openvpn-status.log
      log /var/log/openvpn.log
      # Детальность логирования
      verb 9
      # Защита от повторов (максимум 20 одинаковых сообщений подряд)
      mute 20
      
      # Файл отозванных сертификатов. Разремить, когда такие сертификаты появятся.
      crl-verify /etc/openvpn/easy-rsa/2.0/keys/crl.pem

      Создадим директорию для клиентских конфигов
      mkdir /etc/openvpn/ccd
      Можно запускать наш сервер OpenVPN
      service openvpn restart
      Смотрим список интерфейсов
      ifconfig
      Если среди прочих видим

      tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
                inet addr:10.0.1.1  P-t-P:10.0.1.1  Mask:255.255.255.255
                UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:100
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

      значит VPN-сервер завелся. Если нет, то смотрим лог
      tail -f /var/log/openvpn.log

      Создание ключей и сертификатов
      Переходим в созданную директорию, где и замёмся генерацией ключей и сертификатов
      cd /etc/openvpn/easy-rsa/2.0
      Загружаем переменные
      source vars
      Создаем ключ клиента
      ./build-key client
      Если хотим защитить ключ паролем, то генерируем его другой командой
      ./build-key-pass client
      В этом случае при запуске соединения нужно будет каждый раз вводить пароль на ключ.
      Присвоение статических адресов клиентам
      Если Вы хотите присвоить каждому клиенту свой IP адрес, либо у вас много рользователей и нужно использовать 240+ IP адресов в одной защищенной сети, нужно создать папку ccd в директории с openvpn сервером
      mkdir /etc/openvpn/ccd
      После чего создать там файл с именем клиента для которого вы собираетесь использовать статический IP адрес, допустим это будет client1.
      cd /etc/openvpn/ccd
      touch /etc/openvpn/ccd/client1
      После чего открываем файл
      nano /etc/openvpn/ccd/client1
      и редактируем его

      ifconfig-push 10.0.1.186 255.255.255.0 - Желаемый статический IP адрес и маска сети клиента
      push «route 10.0.1.0 255.255.255.0» - Сеть сервера
      push «route 192.168.0.0 255.255.255.0» - Локальная сеть в которой находится клиент
      push «route 192.168.1.0 255.255.255.0» - Локальная сеть в которой находится клиент

      если локальная сеть клиента меняется не так часто, то можно оставлять одну строчку, но мне лениво менять файлы клиентов, поэтому я прописал обе сети на будущее ))))

      Создание файла конфигурации клиента
      Конфигурация клиента мало чем отличается от сервера, оно и понятно, но есть не большие изменения:

      remote 192.168.1.115 443 - IP адрес сервера, если клиент находится не в той же сети, что и сервер тут должен быть указан белый IP адрес, это то саме условие о котором говорилось ранее.
      client
      dev tun
      proto udp
      resolv-retry infinite # this is necessary for DynDNS
      nobind
      cipher BF-CBC
      user nobody
      group nogroup
      persist-key
      persist-tun
      dh C:\\OpenVPN\\ssl\\dh2048.pem
      ca C:\\OpenVPN\\ssl\\ca.crt
      cert C:\\OpenVPN\\ssl\\client1.crt
      key C:\\OpenVPN\\ssl\\client1.key
      tls-client
      tls-auth C:\\OpenVPN\\ssl\\ta.key 1
      auth SHA1 # по-умолчанию. Можно MD5
      comp-lzo
      verb 4
      mute 20
      #redirect-gateway
      #show-net-up

      На этом настройки закончены, если нужно подключиться с windows то Вам нужно будет скачать клиент Openvpn с офф. сайта, конфиг клиента выше написан под windows, т.к. это ос наиболее популярна, но конфиг легко адаптируется и под другие ОС.

      #153
      E-tec
      Хранитель

        Имеется Ubuntu server 14.04.5 на последнем ядре используется в качестве openvpn сервера, стоит это все дело на Hyper-v сервере соответственно, недавно понял, что openvpn сервер немного умирает когда к нему коннектица 250+ пользователей, на момент установки ubuntu я не рассчитывал, что придется подключать такое кол-во пользователей. Проблема заключается в том, что если в параметрах виртуальной машины добавлять ядра на ubuntu, она отлично загружается, но в итоге не видит интернет (т.е. не пингуется ни один хостинг), если вернуть все обратно, то все отлично работает.


        В: как добавить в ubuntu server ядер, чтоб оно еще и работало нормально? =)
        О: Решение оказалось, как ни странно, под носом, использовалось ядро GNU/Linux 3.13.0-76-generic i686, которое не хотело работать после “апгрейда” железа, командой:
        sudo apt-get install --install-recommends linux-generic-lts-xenial
        Ставим последнее стабильное ядро для 14.04.5 (оно же GNU/Linux 4.4.0-38-generic i686), и спокойно меняем параметры виртуального железа в Hyper-v, после чего все завелось и работает отлично!

        Команды для отзыва сертификата:

        cd /etc/openvpn/easy-rsa/2.0
        source ./vars
        ./revoke-full client

        После ввода команд увидите сообщение:


        последняя строчка говорит о том, что сертификат не прошел проверку, и больше не сможет подключаться к серверу

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