Настройка аутентификации в сети L2TP с помощью Рутокен ЭЦП 2.0 и Рутокен PKI


    Проблематика


    Ещё совсем недавно многие не знали, как это — работать из дома. Пандемия резко изменила ситуацию в мире, все начали адаптироваться к сложившимся обстоятельствам, а именно к тому, что выходить из дома стало просто небезопасно. И многим пришлось быстро организовывать работу из дома для своих сотрудников.


    Однако отсутствие грамотного подхода в выборе решений для удалённой работы может привести к необратимым потерям. Пароли пользователей могут быть украдены, а это даст возможность злоумышленнику бесконтрольно подключаться к сети и ИТ-ресурсам предприятия.


    Именно поэтому сейчас выросла потребность в создании надёжных корпоративных VPN сетей. Я расскажу вам о надёжной, безопасной и простой в использовании VPN сети.


    Она работает по схеме IPsec/L2TP, использующей для аутентификации клиентов неизвлекаемые ключи и сертификаты, хранящиеся на токенах, а также передает данные по сети в зашифрованном виде.


    В качестве демонстрационных стендов для настройки использовались сервер с CentOS 7 (адрес: centos.vpn.server.ad) и клиент с Ubuntu 20.04, а также клиент с Windows 10.


    Описание системы


    VPN будет работать по схеме IPSec + L2TP + PPP. Протокол Point-to-Point Protocol (PPP) работает на канальном уровне модели OSI и обеспечивает аутентификацию пользователя и шифрование передаваемых данных. Его данные инкапсулируются в данные протокола L2TP, который собственно обеспечивает создание соединения в VPN сети, но не обеспечивает аутентификацию и шифрование.


    Данные L2TP инкапсулируются в протокол IPSec, который тоже обеспечивает аутентификацию и шифрование, но в отличие от протокола PPP аутентификация и шифрование происходит на уровне устройств, а не на уровне пользователей.


    Данная особенность позволяет обеспечить аутентификацию пользователей только с определённых устройств. Мы же будем использовать протокол IPSec как данное и позволим производить аутентификацию пользователей с любого устройства.



    Аутентификация пользователя с помощью смарт-карт будет производиться на уровне протокола PPP с помощью протокола EAP-TLS.


    Более подробную информации о работе данной схемы можно найти в этой статье.


    Почему данная схема отвечает всем трём требованиям хорошей VPN сети


    1. Надёжность данной схемы проверена временем. Она используется для развёртывания VPN сетей с 2000 года.
    2. Безопасную аутентификацию пользователя обеспечивает протокол PPP. Стандартная реализация протокола PPP разработанная Paul Mackerras не обеспечивает достаточного уровня безопасности, т.к. для аутентификации в лучшем случае случае используется аутентификация с помощью логина и пароля. Все мы знаем, что логин-пароль можно подсмотреть, подобрать или украсть. Тем не менее уже давно разработчик Jan Just Keijser в своей реализации данного протокола исправил этот момент и добавил возможность использования для аутентификации протоколы, основанные на асимметричном шифровании, такой как EAP-TLS. Кроме того, он добавил возможность использования смарт-карт для аутентификации, что сделало данную систему более безопасной.
      В настоящий момент ведутся активные переговоры для слияния этих двух проектов и можно быть уверенными в том, что рано или поздно это всё равно произойдёт. Так, например, в репозиториях Fedora уже давно лежит пропатченная версия PPP, использующая для аутентификации безопасные протоколы.
    3. Ещё совсем недавно данную сеть могли использовать только пользователи Windows, но наши коллеги из МГУ Василий Шоков и Александр Смирнов нашли старый проект L2TP клиента для Linux и доработали его. Совместными усилиями мы исправили множество багов и недочетов в работе клиента, упростили установку и настройку системы, даже при сборке из исходников. Наиболее существенными из них являются:
      • Исправлены проблемы совместимости старого клиента с интерфейсом новых версий openssl и qt.
      • Удалена передача pppd PIN-кода токена через временный файл.
      • Исправлен некорректный запуск программы запроса пароля через графический интерфейс. Это было сделано за счет установки корректного окружения для xl2tpd сервиса.
      • Сборка демона L2tpIpsecVpn теперь осуществляется совместно со сборкой самого клиента, что облегчает процесс сборки и настройки.
      • Для удобства разработки подключена система Azure Pipelines для тестирования корректности сборки.
      • Добавлена возможность принудительно понижать security level в контексте openssl. Это полезно для корректной поддержки новых операционных систем, где стандартный security level установлен на 2, с VPN сетями, в которых используются сертификаты, не удовлетворяющие требованиям безопасности данного уровня. Данная опция будет полезна для работы с уже существующими старыми VPN сетями.

    Исправленную версию можно найти в данном репозитории.


    Данный клиент поддерживает использование смарт-карт для аутентификации, а также максимально скрывает все тяготы и невзгоды настройки данной схемы под Linux, делая настройку клиента максимально простой и быстрой.


    Конечно, для удобной связи PPP и GUI клиента не обошлось и без дополнительных правок каждого из проектов, но тем не менее их удалось минимизировать и свести к минимуму:



    Теперь можно приступить к настройке.


    Настройка сервера


    Установим все необходимые пакеты.


    Установка strongswan (IPsec)


    В первую очередь, настроим firewall для работы ipsec


    sudo firewall-cmd --permanent --add-port=1701/{tcp,udp}
    sudo firewall-cmd --permanent --add-service=ipsec
    sudo firewall-cmd --reload

    Затем приступим к установке


    sudo yum install epel-release ipsec-tools dnf
    sudo dnf install strongswan

    После установки необходимо задать конфигурацию для strongswan (одну из реализаций IPSec). Для этого отредактируем файл /etc/strongswan/ipsec.conf :


    config setup
        nat_traversal=yes
        virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
        oe=off
        protostack=netkey 
    
    conn L2TP-PSK-NAT
        rightsubnet=vhost:%priv
        also=L2TP-PSK-noNAT
    
    conn L2TP-PSK-noNAT
        authby=secret
        pfs=no
        auto=add
        keyingtries=3
        rekey=no
        ikelifetime=8h
        keylife=1h
        type=transport
        left=%any
        leftprotoport=udp/1701
        right=%any
        rightprotoport=udp/%any
        ike=aes128-sha1-modp1536,aes128-sha1-modp1024,aes128-md5-modp1536,aes128-md5-modp1024,3des-sha1-modp1536,3des-sha1-modp1024,3des-md5-modp1536,3des-md5-modp1024
        esp=aes128-sha1-modp1536,aes128-sha1-modp1024,aes128-md5-modp1536,aes128-md5-modp1024,3des-sha1-modp1536,3des-sha1-modp1024,3des-md5-modp1536,3des-md5-modp1024

    Также зададим общий пароль для входа. Общий пароль должен быть известен всем участникам сети для аутентификации. Данный способ и является заведомо ненадёжным, т.к. данный пароль с лёгкостью может стать известным личностям, которым мы не хотим предоставлять доступ к сети.
    Тем не менее, даже этот факт не повлияет на безопасность организации сети, т.к. основное шифрование данных и аутентификация пользователей осуществляется протоколом PPP. Но справедливости ради стоит заметить, что strongswan поддерживает более безопасные технологии для аутентификации, например, с помощью приватных ключей. Так же в strongswan имеется возможность обеспечить аутентификацию с помощью смарт-карт, но пока поддерживается ограниченный круг устройств и поэтому аутентификация с помощью токенов и смарт-карт Рутокен пока затруднительна. Зададим общий пароль через файл /etc/strongswan/ipsec.secrets:


    # ipsec.secrets - strongSwan IPsec secrets file
    %any %any : PSK "SECRET_PASSPHRASE"

    Перезапустим strongswan:


    sudo systemctl enable strongswan
    sudo systemctl restart strongswan

    Установка xl2tp


    sudo dnf install xl2tpd

    Сконфигурируем его через файл /etc/xl2tpd/xl2tpd.conf:


    [global]
    force userspace = yes
    listen-addr = 0.0.0.0
    ipsec saref = yes
    
    [lns default]
    exclusive = no
    ; определяет статический адрес сервера в виртуальной сети
    local ip = 100.10.10.1
    ; задает диапазон виртуальных адресов
    ip range = 100.10.10.1-100.10.10.254
    assign ip = yes
    refuse pap = yes
    require authentication = yes
    ; данную опцию можно отключить после успешной настройки сети
    ppp debug = yes
    length bit = yes
    pppoptfile = /etc/ppp/options.xl2tpd
    ; указывает адрес сервера в сети
    name = centos.vpn.server.ad

    Перезапустим сервис:


    sudo systemctl enable xl2tpd
    sudo systemctl restart xl2tpd

    Настройка PPP


    Желательно поставить последнюю версию pppd. Для этого выполним следующую последовательность команд:


    sudo yum install git make gcc openssl-devel
    git clone "https://github.com/jjkeijser/ppp"
    cd ppp
    ./configure --prefix /usr
    make -j4
    sudo make install

    Впишите в файл /etc/ppp/options.xl2tpd следующее (если там присутствуют какие-то значения, то их можно удалить):


    ipcp-accept-local
    ipcp-accept-remote
    ms-dns 8.8.8.8
    ms-dns 1.1.1.1
    
    noccp
    auth
    crtscts
    idle 1800
    mtu 1410
    mru 1410
    nodefaultroute
    debug
    lock
    proxyarp
    connect-delay 5000

    Выписываем корневой сертификат и сертификат сервера:


    #директория с сертификатами пользователей, УЦ и сервера
    sudo mkdir /etc/ppp/certs
    #директория с закрытыми ключами сервера и УЦ
    sudo mkdir /etc/ppp/keys
    #запрещаем любой доступ к этой дирректории кроме администатора
    sudo chmod 0600 /etc/ppp/keys/
    
    #генерируем ключ и выписываем сертификат УЦ
    sudo openssl genrsa -out /etc/ppp/keys/ca.pem 2048
    sudo openssl req -key /etc/ppp/keys/ca.pem -new -x509 -out /etc/ppp/certs/ca.pem -subj "/C=RU/CN=L2TP CA"
    
    #генерируем ключ и выписываем сертификат сервера
    sudo openssl genrsa -out /etc/ppp/keys/server.pem 2048
    sudo openssl req -new -out server.req -key /etc/ppp/keys/server.pem -subj "/C=RU/CN=centos.vpn.server.ad"
    sudo openssl x509 -req -in server.req -CAkey /etc/ppp/keys/ca.pem -CA /etc/ppp/certs/ca.pem -out /etc/ppp/certs/server.pem -CAcreateserial

    Таким образом, мы закончили с основной настройкой сервера. Остальная часть конфигурации сервера связана с добавлением новых клиентов.


    Добавление нового клиента


    Чтобы добавить нового клиента в сеть, необходимо записать его сертификат в список доверенных для данного клиента.


    Если пользователь хочет стать участником VPN сети, он создаёт ключевую пару и заявку на сертификат для данного клиента. Если пользователь доверенный, то данную заявку можно подписать, а получившийся сертификат записать в директорию сертификатов:


    sudo openssl x509 -req -in client.req -CAkey /etc/ppp/keys/ca.pem -CA /etc/ppp/certs/ca.pem -out /etc/ppp/certs/client.pem -CAcreateserial

    Добавим строчку в файл /etc/ppp/eaptls-server для сопоставления имени клиента и его сертификата:


    "client" * /etc/ppp/certs/client.pem /etc/ppp/certs/server.pem /etc/ppp/certs/ca.pem /etc/ppp/keys/server.pem *

    NOTE
    Чтобы не запутаться, лучше чтобы: Common Name, имя файла с сертификатом и имя пользователя были уникальными.


    Также стоит проверить, что в других файлах аутентификации нигде не фигурирует имя пользователя, которого мы добавляем, иначе возникнут проблемы со способом аутентификации пользователя.




    Этот же сертификат необходимо отправить пользователю обратно.


    Генерация ключевой пары и сертификата


    Для успешной аутентификации клиенту необходимо:


    1. сгенерировать ключевую пару;
    2. иметь корневой сертификат УЦ;
    3. иметь сертификат для своей ключевой пары, подписанный корневым УЦ.

    для клиента на Linux


    Для начала сгенерируем ключевую пару на токене и создадим заявку на сертификат:


    #идентификатор ключа (параметр --id) можно заменить на любой другой.
    pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45
    
    openssl
    OpenSSL> engine dynamic -pre SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:librtpkcs11ecp.so
    ...
    OpenSSL> req -engine pkcs11 -new -key 45 -keyform engine -out client.req -subj "/C=RU/CN=client"

    Появившуюся заявку client.req отправьте в УЦ. После того как вы получите сертификат для своей ключевой пары, запишите его на токен с тем же id, что и у ключа:


    pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -l -y cert -w ./client.pem --id  45

    для клиентов Windows и Linux (более универсальный способ)


    Данный способ является более универсальным, т.к. позволяет сгенерировать ключ и сертификат, который будет успешно распознаваться у пользователей Windows и Linux, но он требует наличие машины на Windows для проведения процедуры генерации ключей.


    Перед генерацией запросов и импортом сертификатов необходимо добавить корневой сертификат VPN сети в список доверенных. Для этого откроем его и в открывшемся окне выберем опцию "Установить сертификат":



    В открывшемся окне выберем установку сертификата для локального пользователя:



    Установим сертификат в хранилище доверенных корневых сертификатов УЦ:



    После всех этих действий соглашаемся со всеми дальнейшими пунктами. Теперь система настроена.


    Создадим файл cert.tmp со следующим содержимым:


    [NewRequest]
    Subject = "CN=client"
    KeyLength = 2048
    KeySpec = "AT_KEYEXCHANGE" 
    ProviderName = "Microsoft Base Smart Card Crypto Provider"
    KeyUsage = "CERT_KEY_ENCIPHERMENT_KEY_USAGE"
    KeyUsageProperty = "NCRYPT_ALLOW_DECRYPT_FLAG"
    RequestType = PKCS10
    SMIME = FALSE

    После этого сгенерируем ключевую пару и создадим заявку на сертификат. Для этого откроем powershell и введём следующую команду:


    certreq.exe -new -pin $PIN .\cert.tmp .\client.req

    Отправьте созданную заявку client.req в ваш УЦ и дождитесь получения сертификата client.pem. Его можно записать на токен и добавить в хранилище сертификатов Windows с помощью следующей команды:


    certreq.exe -accept .\client.pem

    Стоит заметить, что аналогичные действия можно воспроизвести с помощью графического интерфейса программы mmc, но данный способ является более времязатратным и менее программируемым.


    Настройка клиента Ubuntu


    NOTE
    Настройка клиента на Linux в данный момент является достаточно длительной по времени, т.к. требует сборки отдельных программ из исходников. Мы постараемся в ближайшее время добиться, чтобы все изменения попали в официальные репозитории.




    Для обеспечения подключения на уровне IPSec к серверу — используется пакет strongswan и демон xl2tp. Для упрощения подключения к сети с помощью смарт-карт – будем использовать пакет l2tp-ipsec-vpn, обеспечивающий графическую оболочку для упрощенной настройки подключения.


    Начнём сборку элементов поэтапно, но перед этим установим все необходимые пакеты для непосредственной работы VPN:


    sudo apt-get install xl2tpd strongswan libp11-3

    Установка ПО для работы с токенами


    Установите последнюю версию библиотеки librtpkcs11ecp.so с сайта, также библиотеки для работы со смарт-картами:


    sudo apt-get install pcscd pcsc-tools opensc libengine-pkcs11-openssl

    Подключите Рутокен и проверьте, что он распознается системой:


    pkcs11-tool --module /usr/lib/librtpkcs11ecp.so  -O -l

    Установка пропатченного ppp


    sudo apt-get -y install git make gcc libssl-dev
    git clone "https://github.com/jjkeijser/ppp"
    cd ppp
    ./configure --prefix /usr
    make -j4
    sudo make install

    Установка клиента L2tpIpsecVpn


    В данный момент клиента тоже нужно собирать из исходников. Делается это с помощью следующей последовательности команд:


    sudo apt-get -y install git qt5-qmake qt5-default build-essential libctemplate-dev libltdl-dev
    git clone "https://github.com/Sander80/l2tp-ipsec-vpn"
    cd l2tp-ipsec-vpn
    make -j4
    sudo make install

    Настройка клиента L2tpIpsecVpn


    Запускаем установленный клиент:



    После запуска у вас должен открыться апплет L2tpIpsecVPN. Нажмём на него правой кнопкой мыши и произведём настройку соединения:



    Для работы с токенами, в первую очередь, укажем путь opensc движка OpenSSL и PKCS#11 библиотеки. Для этого откройте вкладку "Preferences" для настройки параметров openssl:


    .


    Закроем окно настроек OpenSSL и перейдём к настройке сети. Добавим новую сеть, нажав на клавишу Add… в панели настроек и введите имя сети:



    После этого данная сеть станет доступна в панели настроек. Дважды кликнем правой кнопкой мыши по новой сети, чтобы настроить её. На первой вкладке необходимо произвести настройки IPsec. Зададим адрес сервера и общий ключ:



    После этого переходим на вкладку настройки PPP и укажем там имя пользователя, под которым мы хотим зайти в сеть:



    После этого откроем вкладку Properties и укажем путь до ключа, сертификата клиента и УЦ:


    Закроем данную вкладку и выполним финальную настройку, для этого откроем вкладку "IP settings" и поставим галочку напротив опции "Obtain DNS server address automatically":



    Данная опция позволит клиенту получать от сервера личный IP-адрес внутри сети.


    После всех настроек закроем все вкладки и перезагрузим клиент:



    Подключение к сети


    После настроек можно произвести подключение к сети. Для этого откроем вкладку апплета и выберем сеть, к которой мы хотим подключиться:



    В процессе установки соединения клиент попросит ввести нас PIN-код Рутокен:



    Если в статус-баре появится оповещение о том, что соединение успешно установлено, значит, настройка была произведена успешно:



    В противном случае стоит разобраться, почему соединение не было установлено. Для этого стоит посмотреть лог программы, выбрав в апплете команду "Connection information":



    Настройка клиента Windows


    Настройка клиента в Windows осуществляется гораздо проще, чем в Linux, т.к. весь необходимый софт уже встроен в систему.


    Настройка системы


    Установим все необходимые драйверы для работы с Рутокенами скачав их c оф. сайта.


    Импорт корневого сертификата для аутентификации


    Скачаем корневой сертификат сервера и установим в систему. Для этого откроем его и в открывшемся окне выберем опцию "Установить сертификат":



    В открывшемся окне выберем установку сертификата для локального пользователя. Если хочется, чтобы сертификат был доступен всем пользователям на компьютере, то тогда следует выбрать установку сертификата на локальный компьютер:



    Установим сертификат в хранилище доверенных корневых сертификатов УЦ:



    После всех этих действий соглашаемся со всеми дальнейшими пунктами. Теперь система настроена.


    Настройка VPN соединения


    Для настройки VPN соединения перейдите в панель управления и выберите пункт для создания нового соединения.



    Во всплывшем окне выберите опцию создания соединения для подключения к рабочему месту:



    В следующем окне выберете подключение по VPN:



    и введите данные VPN соединения, а также укажите опцию для использования смарт-карты:



    На этом настройка не закончена. Осталось указать общий ключ для протокола IPsec, для этого перейдём на вкладку “Настройки сетевых подключений” и затем перейдём на вкладку “Свойства для данного соединения”:



    В открывшемся окне перейдём на вкладку "Безопасность", укажем в качестве типа сети "Сеть L2TP/IPsec" и выберем "Дополнительные параметры":



    В открывшемся окне укажем общий ключ IPsec:


    Подключение


    После завершения настройки можно попробовать подключиться к сети:



    В процессе подключения от нас потребуют ввести PIN-код токена:



    Мы с вами настроили безопасную VPN сеть и убедились в том, что это несложно.


    Благодарности


    Хотелось бы ещё раз поблагодарить наших коллег Василия Шокова и Александра Смирнова за совместно проделанную работу для упрощения создания VPN соединений для клиентов Linux.

    Comments 14

      +1

      Это не выглядит как простая настройка.


      Вот так выглядит простая настройка:


      [Interface]
      Address = 100.64.99.3
      DNS = 100.64.99.3
      PrivateKey = KeYbase64=
      MTU = 1390
      
      [Peer]
      PublicKey = ip8KrHKYrAx8l54p1QB6kg1P66GSRR1azbjpbO4Z8Cs=
      Endpoint = 8.2.6.83:24021
      AllowedIPs = 100.64.99.0/24
      PersistentKeepalive = 15
        0

        Настройка клиента через один конфигурационный файл в целом возможна (по сути, это и происходит внутри графического клиента), но Вы не учитываете вот что:


        1. Представленная утилита для Linux, помимо настройки, дает возможность быстро подключаться к этой сети одним кликом мыши.
        2. Настройка через конфигурационный файл, хоть и является самым быстрым способом, требует некоторых навыков работы с системой. Неопытным пользователям, которым необходимо настроить подключение, удобнее будет использовать для настройки именно графический интерфейс.
        3. Настройка в целом занимает не более двух минут и должна производиться всего один раз, так что настройка за одну минуту или две – не так принципиальна.
        4. Если Вы хотите все настроить через конфигурационные файлы, то сделать это можно. Для этого нужно подправить /etc/ipsec.conf, /etc/xl2tp/xl2tp.conf и /etc/ppp/conn_name.conf. Но, опять-таки, настройка через GUI может избавить Вас от потенциальных проблем с теми же самыми опечатками
          +1

          Я не про конфиг. Я про использование всякого антиквариата типа ppp, вместо shiny new wireguard. У NM у него есть плагин:


            +1
            В статье речь идет об организации vpn для компании. Wireguard крайне проблемно использовать для таких целей. Нет никаких централизованных возможностей по управлению клиентами, например если потребуется сменить маршруты или DNS и т.д. Вся проблематика использования его в enterprise секторе хорошо описана в этой статье
              0

              Там сплошная ахинея. Особенно про скорость, просто умилительно читать было. Авторы сами-то сравнивали скорость или нет?


              Насчёт управления пользователями и маршрутами. А в чём проблема с AllowedIPs? Тривиальная плейбука, в т.ч. и для пачки пользователей. С DNS вообще тривиально — указываете IP пира внутри туннеля и всё.

                0
                Накатывать конфигурацию wireguard на все устройства удаленных сотрудников ансиблом, выглядит так себе решением. Где гарантии что плейбук успешно выполнится? Половина удаленных сотрудников может быть не в сети, да и в целом они могут быть разбросаны по всему миру, за натом, и устройства могут быть разными: телефон, планшет, пк, лаптоп. Может быть возможно использовать реальную систему управления конфигурациями, например puppet, salt, chef, но даже с ними будет очень много трудностей.

                Также, для каждого сотрудника придется описывать в этой системе уникальный ip адрес вручную. DHCP вроде в wireguard не прикрутить (может я и ошибаюсь, но вроде адрес настраивается на клиентской стороне, и автоматом он его никак получить не может). А если сотрудников > 1000? (Ну конечно всегда можно накостылить скрипт, который генерит готовый yaml с ip адресами сотрудников для ansible/puppet/salt/chef)

                А что делать если в организации разрешено использовать домашние устройства для работы? Тоже на них накатывать плейбуки ansible? Или агентов puppet, salt, chef?

                В целом мне кажется это идея выглядит менее надежной, чем просто использовать штатные решения для VPN, которые все это поддерживают из коробки.

                Статье два года и там сплошная ахинея

                Слабая аргументация на мой взгляд. У вас есть опровержения аргументов из этой статьи? В статье довольно неплохо все расписано.

                А в чём проблема с AllowedIPs? Тривиальная плейбука, в т.ч. и для пачки пользователей. С DNS вообще тривиально — указываете IP пира внутри туннеля и всё.

                Это все настройки на клиентской стороне. А как я указал выше, их крайне проблемно централизованно накатывать на кучу устройств удаленных сотрудников. И в отличии от решений VPN где это все из коробки, вам придется все это реализовывать самому, а потом поддерживать. И все это для каждого вида ОС и устройства сотрудника. Предполагаю трудно будет накатить плейбук на телефон =)
                  0

                  Я не понимаю, зачем в wg использовать dhcp. Выдаёте каждому пользователю адрес. Навсегда. Больше этот адрес до скончания жизни вселенной не испольузете. Первая же /64 сеть обеспечит вас бесконечным с практической точки зрения числом адресов.


                  Вам в любой конфигурации придётся управлять пользователями — и "костылить" описание инфраструктуры всё равно придётся. (Хотя, конечно, есть вариант потыкать мышкой и быть уверенным, что всё правильно — без тестов, без стейджинга, этакие тёплые ламповые 90ые).


                  Насчёт опровержения… Увы, да, я не тестировал wg на 10G, потому что у меня дома гигабит. Но гигабит он выедает в потолок, нагружая одно ядро примерно в 60-70% (и то не понятно, то ли это сетевуха такая фиговая, то ли это сам wg). В статье могут много обсуждать, какой он медленный, но у меня рядом openvpn, который едва-едва три сотни делает при 100% CPU.

                    0
                    Вам в любой конфигурации придётся управлять пользователями — и «костылить» описание инфраструктуры всё равно придётся


                    Пользователю достаточно подключиться к VPN, и он получит все сетевые настройки от сервера. В случае с wireguard вы так и не описали, каким образом вы поддерживаете сетевые настройки кучи устройств удаленных сотрудников. Я подробно расписал, почему это сделать крайне затруднительно с указанным подходом.

                    Если вы это реализовали с помощью ansible, и реально поддерживаете конфигурацию wireguard на телефонах, лаптопах, пк, планшетах удаленных сотрудников в разных частях света, напишите об этом статью, я думаю она будет крайне познавательной и интересной.

                    Вам в любой конфигурации придётся управлять пользователями — и «костылить» описание инфраструктуры всё равно придётся. (Хотя, конечно, есть вариант потыкать мышкой и быть уверенным, что всё правильно — без тестов, без стейджинга, этакие тёплые ламповые 90ые).

                    Не очень понял мысль про стейджинг и ламповые девяностые. Речь идет про устройства сотрудников. Где и что тыкать мышкой не совсем понял вас. Серверная инфраструктура под IaC это стандарт, но я никогда не видел, чтобы IaC пытались использовать для конфигурирования устройств удаленных сотрудников, особенно в условиях, когда им разрешено работать из собственных устройств. Если в это реализовали, очень прошу напишите об этом. Мне действительно интересно.

                    Насчёт опровержения… Увы, да, я не тестировал wg на 10G, потому что у меня дома гигабит. Но гигабит он выедает в потолок, нагружая одно ядро примерно в 60-70% (и то не понятно, то ли это сетевуха такая фиговая, то ли это сам wg). В статье могут много обсуждать, какой он медленный, но у меня рядом openvpn, который едва-едва три сотни делает при 100% CPU.


                    Вообще моя изначальная мысль была не о скорости, а о централизации и готовности wireguard к enterprise. На моя взгляд, решения на основе ipsec или anyconnect cisco гораздо лучше подходят.

                    А насчет скорости, тут нужно тестить, а такие заявления это просто субъективный опыт. На мой субъективный взгляд openvpn медленнее чем wireguard, но я его никогда толком не тюнил под скорости, ну и надо упомянуть в какой конфигурации все это тестили. И если уж сравнивать скорость, то делать как положено со всеми подробностями, тоже тянет на отдельную статью.

              0

              Я не разбираюсь в wireguard, поэтому задам вопрос без подвоха. Можно ли с его использованием сделать так, чтобы пользователь Windows мог настроить соединение без установки дополнительного софта, и в результате получил доступ к рабочей сети? При этом еще крайне желательна авторизация по смарт-картам (логины на 400 пользователей это бескотрольная передача аккаунтов)

                0

                Без дополнительного софта — нет. Хотя это зависит от того, считать ли WSL2 частью винды или нет.

                  0
                  Понятно, спасибо. Хоть я сам в восторге от WS2, для простых пользователей это перебор, тем более, что официально версия Windows с WS2 еще далеко не везде раскаталась. Плюс у нас многие по-прежнему подключаются из-под Windows 7, а кто-то недавно подключился из-под Windows XP, хотя мы ее как поддерживаемую не числим.

                  Тем не менее, запишу себе wireguard в список технологий, которые стоит обдумать.
                    0
                    Это ж отдельная виртуальная машина с Убунтой, какая она часть винды?
              0
              Это вопрос подхода. Пишу как человек, который как раз и допиливал эту гуишную утилиту.
              Тут ситуация какая была. Мы активно используем этот l2tp ipsec vpn, куча пользователей, написана подробная инструкция под Windows именно в стиле «прокликай так и сяк», чтобы любой пользователь мог это настроить.

              А дальше возникает вопрос. А если у кого-то Линукс (у меня тоже). Может ли не профи в Линуксе взять и настроить соединение. Даже будучи программистом я могу понятия не иметь какие конфиги править, чтобы соединение завелось. Если мне нужно настроить VPN, я сначала попробую настроить NetworkManager… и потом пойму, что он не поддерживает смарт-карты.

              Отсюда и возникла и задача дописать гуи. При этом я лично, возможно, и мог бы эти конфиги дописать, хотя не сказал бы, что конфиги ppp и сопутствующие ip-up и прочие просто устроены. А вот дать совет править конфиги кому-либо еще я вообще не факт, что смогу.

              Короче, эта гуи-утилита это Windows-way настроить соединение под Линуксом, через прокликивание пунктов меню. Для кого-то именно это проще.

              При этом с разработчиками смарт-карт я никак не связан, просто так повелось, что мы их используем в своей рабочей инфраструктуре.

              Но, возможно, автор статьи как сотрудник компании производящей смарт-карты ответит лучше.
              0
              Добавление на август 2020.
              В системе будет стоять свой pppd
              Из репозитория ставится другой
              Один может лежать по адресу /usr/sbin/pppd
              Другой по /usr/local/sbin/pppd
              Проверяйте, какой pppd запускается!
              (но снести системный нельзя, поскольку с ним слетает xl2tp, без которого все это не работает)

              Only users with full accounts can post comments. Log in, please.