OpenVPN server on Ubuntu 16.10 для ОБЪЕДИНЕНИЯ клиентов в ПОДСЕТИ
linux openvpn server    2017-03-22 16:18:59    70    0    0
murphy   linux openvpn server

Привет!

Потребовалось мне недавно поднять OPVN на хостинге, для объединения сетей. Много всякиой литературы перечитал я, но так и не нашел  подходящего решения (то, которое мне понравиться).

Захотелось сделать что-то свое :)

Далее будет пошаговое описание создания на своем сервере (со внешним IP) сервера, для объединени подсетей. 

Для объединения решил использовать bridge режим openvpn, поэтому: СЛЕДИТЕ ЗА БЕЗОПАСНОСТЬЮ! Клиенты могут выставлять и свои ИП!! (а следовательно подсети могут пересекаться). 

Для удобства, все оповещения о подключении/отключении отправляются на Telegram бота

 

Пошаговый процесс установки:

  1. ВСЕ ДЕЙСТВИЯ ДЕЛАЕМ ОТ ROOT!
  2. Ставим OpenVPN и easy-rsa:
    apt-get install openvpn easy-rsa iptables bridge-utils python-configobj python-requests nano
  3. Перейдем в директорию OpenVPN и сделаем шаблонную директорию
    cd /etc/openvpn
    make-cadir easy-rsa
  4. Правим файл vars с основными настройками:
    cd easy-rsa
     nano vars

  5. Ищем основные переменные, и заменяем их своими:
    export KEY_COUNTRY="RU"
    export KEY_PROVINCE="Samara"
    export KEY_CITY="Samara"
    export KEY_ORG="MySuper"
    export KEY_EMAIL="admin@example.com"
    export KEY_OU="IT"
    export KEY_NAME="ovpnserver"
  6. Проверяем, что мы еще в сертификатах и готовы создавать корень:
    source vars
    видим:
    NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
    все отлично :)
  7. Избавляемся от всего старого:
    ./clean-all
  8. Генерим корневые сертификаты:
    ./build-ca
    просто нажимая несколько раз <enter>
    Generating a 2048 bit RSA private key
    ............+++
    .............+++
    writing new private key to 'ca.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [RU]:
    State or Province Name (full name) [SAMARA]:
    Locality Name (eg, city) [Samara]:
    Organization Name (eg, company) [MySuper]:
    Organizational Unit Name (eg, section) [OIT]:
    Common Name (eg, your name or your server's hostname) [MySuper CA]:
    Name [ovpnserver]:
    Email Address [admin@example.com]:
  9. Создаем серверный сертификат:
    ./build-key-server ovpnserver
    Что-то ввиде:

    Generating a 2048 bit RSA private key
    ...............................................................................+++
    .......+++
    writing new private key to 'ovpnserver.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [RU]:
    State or Province Name (full name) [SAMARA]:
    Locality Name (eg, city) [Samara]:
    Organization Name (eg, company) [MySuper]:
    Organizational Unit Name (eg, section) [OIT]:
    Common Name (eg, your name or your server's hostname) [ovpnserver]:
    Name [ovpnserver]:
    Email Address [admin@example.com]:

    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
    Check that the request matches the signature
    Signature ok
    The Subject's Distinguished Name is as follows
    countryName :PRINTABLE:'RU'
    stateOrProvinceName :PRINTABLE:'SAMARA'
    localityName :PRINTABLE:'Samara'
    organizationName :PRINTABLE:'MySuper'
    organizationalUnitName:PRINTABLE:'OIT'
    commonName :PRINTABLE:'ovpnserver'
    name :PRINTABLE:'ovpnserver'
    emailAddress :IA5STRING:'admin@example.com'
    Certificate is to be certified until Mar 20 05:43:50 2027 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

  10. Генерируем ключи Диффи-Хеллмана:
    ./build-dh
  11. Генерируем подпись (для усиления способности сервера проверять целостность TSL):
    openvpn --genkey --secret keys/ta.key
  12. Сгенерим сертификаты для клиентов данного сервера (можно один на всех):
    ./build-key client1
    нажимаем <enter>  процессе:

    Generating a 2048 bit RSA private key
    ........................................................+++
    ..............................................+++
    writing new private key to 'client1.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [RU]:
    State or Province Name (full name) [SAMARA]:
    Locality Name (eg, city) [Samara]:
    Organization Name (eg, company) [MySuper]:
    Organizational Unit Name (eg, section) [OIT]:
    Common Name (eg, your name or your server's hostname) [client1]:
    Name [ovpnserver]:
    Email Address [admin@example.com]:

    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
    Check that the request matches the signature
    Signature ok
    The Subject's Distinguished Name is as follows
    countryName :PRINTABLE:'RU'
    stateOrProvinceName :PRINTABLE:'SAMARA'
    localityName :PRINTABLE:'Samara'
    organizationName :PRINTABLE:'MySuper'
    organizationalUnitName:PRINTABLE:'OIT'
    commonName :PRINTABLE:'client1'
    name :PRINTABLE:'ovpnserver'
    emailAddress :IA5STRING:'admin@example.com'
    Certificate is to be certified until Mar 20 05:50:56 2027 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


  13. Так как у меня используется своя конфигурация, то качаем мои настройки и правим по себя:ovpn_scripts.tgz
  14. Мои скрипты работают с виртуальным интерфейсом tap0, поэтому нужно в файл /etc/network/interfaces добавить его инициализацию:

    auto tap0
        iface tap0 inet static
        address 10.10.10.1
        netmask 255.255.255.0

  15. Запускаем сервер:
    systemctl start openvpn@cloud

  16. Убедимся, что сервер успешно запустился:
    systemctl status openvpn@cloud

  17. Добавляем автоматический запуск:
    systemctl enable openvpn@cloud

  18. Настраиваем клиентов и радуемся ;) (в качестве клиентов у меня с 10ок микротиков, поэтому описание их настройки приводить не буду :)

 

 

 

 


 

Основные замечания по настройкам:

  • Все настройки хранятся в 2х файлах: cloud.conf и clients.settings
  • Клиенты (в файле clients.conf) разделены на подсети! Им выдаются бесклассовые маски, которые включают себя (в данному случае) по 16 клиентов, которые могут общаться друг-с-другом.
  • Следующие настройки определяют сервер:
    network = 10.10.10. # Первые три числа сети
    max_net_len = 16 # Размер сегмента, варианты 8 (6 клиентов), 16 - 14 клиентов, 32-30клиентов
  • ip_ext = x.x.x.x внешний адрес ovpn сервера
  • [port-forward] - секция для проброса ip адресов в сеть
  • Скрипты используют python2.7
  • Демон openvpn запускается от root, но так проще править iptables, если это не нужно - используйте socat
  • У меня отключена проверка сертификатов! Потому как мне это не нужно, у себя вы можете ее включить и тогда придется закидывать клиентам сертификат client1.
  • _

 

 

Дополнительные настройки:

  • включаем IP маршрутизацию в файле /etc/sysctl.conf :
    net.ipv4.ip_forward=1
  • Если провайдер использует виртуализацию OpenVZ, то необходимо узнать о возможности включения tun/tap устройств у службы поддержки
  • _

Pre: Создание swap в файле

Next: Как дети финансовую систему по полочкам разложили

70
Sign in to leave a comment.
No Leanote account? Sign up now.
0 comments
Table of content