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


Проблема текущих VPN решений в том, что их тяжело правильно настроить, дорого обслуживать, а так же в них полно legacy кода сомнительного качества.


Несколько лет назад канадский специалист по информационной безопасности Jason A. Donenfeld решил, что хватит это терпеть, и начал работу над WireGuard. Сейчас WireGuard готовится к включению в состав ядра Linux, он даже получил похвалы от Линуса Торвальдса и в американском сенате.


Заявленные преимущества WireGuard над другими VPN решениями:


  • Простой в использовании.
  • Использует современную криптографию: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF и т.д.
  • Компактный читаемый код, проще исследовать на уязвимости.
  • Высокая производительность.
  • Четкая и проработанная спецификация.

Неужели найдена серебрянная пуля? OpenVPN и IPSec пора закапывать? Я решил с этим разобраться, а заодно сделал скрипт для автоматической установки личного VPN сервера.


Принципы работы


Принципы работы можно описать примерно так:


  • Создается WireGuard интерфейс, ему назначается приватный ключ и IP адрес. Загружаются настройки других пиров: их публичные ключи, IP адреса и т.д.
  • Все IP пакеты, приходящие на WireGuard интерфейс инкапсулируются в UDP и безопасно доставляются другим пирам.
  • Клиенты задают публичный IP адрес сервера в настройках. Сервер автоматически узнает внешние адреса клиентов, когда от них приходят корректно аутентифицированные данные.
  • Сервер может менять публичный IP адрес не прерывая работы. При этом он отошлет оповещение подключенным клиентам и они обновят свою конфигурацию на лету.
  • Используется концепт маршрутизации Cryptokey Routing. WireGuard принимает и отправляет пакеты на основании публичного ключа пира. Когда сервер расшифровывает корректно аутентифицированный пакет, проверяется его src поле. Если оно соответствует с конфигурацией allowed-ips аутентифицированного пира, то пакет принимается интерфейсом WireGuard. При отправке исходящего пакета происходит соответственная процедура: берется dst поле пакета и на основании его выбирается соответсвующий пир, пакет подписывается своим ключом, шифруется ключом пира и отправляется на remote endpoint.

Вся основная логика WireGuard занимает менее 4 тысяч строк кода, тогда как OpenVPN и IPSec имеют сотни тысяч строк. Для поддержки современных криптоалгоритмов предлагается включить в состав ядра Linux новый криптографический API Zinc. В данный момент идет обсуждение, насколько это удачная идея.


Производительность


Максимальное преимущество в производительности (по сравнению с OpenVPN и IPSec) будет заметно на Linux системах, так как там WireGuard реализован в виде модуля ядра. Кроме этого поддерживаются macOS, Android, iOS, FreeBSD и OpenBSD, но в них WireGuard выполняется в userspace со всеми вытекающими последствиями для производительности. Поддержку Windows обещают добавить в ближайшем будущем.


Результаты бенчмарков с официального сайта:



Мой опыт использования


Я не эксперт по настройке VPN. Однажды настраивал OpenVPN ручками и это было очень муторно, а IPSec даже и не пытался. Слишком много решений нужно принимать, очень легко выстрелить себе в ногу. Поэтому я всегда пользовался готовыми скриптами для настройки сервера.


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


Процесс установки детально описан на официальном сайте, отдельно хочется отметить отличную поддержку OpenWRT.


Генерируются ключи шифрования утилитой wg:


SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )

Далее, нужно создать серверный конфиг /etc/wireguard/wg0.conf со следующим содержанием:


[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32

и поднять туннель скриптом wg-quick:


sudo wg-quick up /etc/wireguard/wg0.conf

В системах с systemd вместо этого можно использовать sudo systemctl start wg-quick@wg0.service.


На клиентской машине, создать конфиг /etc/wireguard/wg0.conf:


[Interface]
PrivateKey = $CLIENT_PRIVKEY
Address = 10.9.0.2/24
[Peer]
PublicKey = $SERVER_PUBKEY
AllowedIPs = 0.0.0.0/0
Endpoint = 1.2.3.4:51820 # Внешний IP сервера
PersistentKeepalive = 25 

И точно так же поднять туннель:


sudo wg-quick up /etc/wireguard/wg0.conf

Осталось настроить NAT на сервере, чтобы клиенты могли выходить в Интерет, и все готово!


Такую простоту использования и компактность кодовой базы удалось достичь за счет отказа от функционала дистрибьюции ключей. Здесь нет сложной системы сертификатов и всего этого корпоративного ужаса, короткие ключи шифрования распространяются примерно как SSH ключи. Но в связи с этим возникает проблема: WireGuard будет не так просто внедрять в некоторых уже существующих сетях.


Из недостатков стоит отметить, что WireGuard не заработает через HTTP proxy, поскольку в качестве транспорта есть только протокол UDP. Возникает вопрос, возможно ли будет обфусцировать протокол? Конечно, это не прямая задача VPN, но для OpenVPN, например, существуют способы маскировки под HTTPS, что помогает жителям тоталитарных стран полноценно пользоваться Интернетом.


Выводы


Подводя итог, это очень интересный и перспективный проект, можно уже сейчас использовать его на личных серверах. Какой профит? Высокая производительность на Linux системах, простота настройки и поддержки, компактная и читабельная кодовая база. Однако, бросаться переводить комплексную инфраструктуру на WireGuard еще рано, стоит подождать включение в состав ядра Linux.


Для экономии своего (и вашего) времени я разработал автоматический установщик WireGuard. С его помощью можно поднять личный VPN для себя и своих знакомых даже ничего в этом не понимая.

Комментарии (55)


  1. evitaly
    10.12.2018 18:24

    Главная проблема каждого «еще одного VPN» — отсутствие поддержки в большинстве ОС без стороннего софта, а не пропускная способность. У того же IPSec с этим намного лучше.


    1. almuerto
      10.12.2018 18:40
      +1

      У ipsec гораздо хуже с простотой настройки, все эти фаза 1, фаза 2, потом еще поверх может быть l2tp, ike, сертификаты, psk. У openvpn начинаются проблемы при большой нагрузки по трафику, la сильно растет, т.к. userspace. Дополнительное удобство wireguard, что единожды поднятый интерфейс не пропадает из системы, даже если потеряна связь со всеми пирами.


      1. YourChief
        11.12.2018 00:38

        Главная проблема WireGuard в качестве VPN в том, что это не VPN. Это просто шифрованный тунель. Ближайшим аналогом того, что предоставляет wireguard, является вручную созданная Security Association средствами ядра Linux (например так).

        У ipsec гораздо хуже с простотой настройки, все эти фаза 1, фаза 2, потом еще поверх может быть l2tp, ike, сертификаты, psk.

        Фаза 1, фаза 2 — это состояния протокола IKE, которые конечного пользователя не затрагивают. PSK — один из режимов аутентификации IKE, как и сертификаты. L2TP — просто один из видов полезной нагрузки, которая может быть инкапсулирована в IPsec, сейчас нет смысла настраивать VPN в таком режиме. Однако, это большой плюс самого IPsec — он, помимо тунельного, может работать и в транспортном режиме, в отличие от wireguard.
        По поводу простоты конфигурации — сервер конфигурируется один раз и есть масса готовых рецептов и скриптов развёртывания VPN-серверов. Что же касается клиента:

        • Wireguard работает на данный момент нативно только на линуксе. IKEv2 работает на Linux, Mac 10.11+, Windows 7+, Android 4+, iOS 9+.
        • Для IKEv2 можно авторизовываться по логину и паролю, либо по сертификатам. Для Wireguard будьте добры вбить ключи.
        • IKEv2 есть во всех вышеупомянутых системах, для Wireguard даже на линуксе нужно собирать модуль.
        • Нормальные VPN-демоны назначают адреса и протокол позволяет протолкнуть IP-конфигурацию соединения. В Wireguard будьте добры вбить вручную, так как это просто туннель.

        Кроме этого, IPsec поддерживает массу протоколов шифрования и обмена ключами, и клиент может выбрать оптимальный для себя при согласовании соединения. В случае с Wireguard доступен только один набор криптопримитивов, и возможностей для его расширения не имеется. Кстати говоря, при желании, для IPsec доступны и постквантовые алгоритмы. Для Wireguard — нет.

        Дополнительное удобство wireguard, что единожды поднятый интерфейс не пропадает из системы, даже если потеряна связь со всеми пирами.

        IPsec на линуксе вообще не поднимает интерфейса, если работает нативно. Если нужно, чтобы какой-то адрес висел постоянно, чтобы на него можно было заранее жестко забиндить какой-то демон, то можно поднять его на lo или dummy-интерфейсе.

        Возникает вопрос, возможно ли будет обфусцировать протокол?

        Noise protocol как раз для этого и используется в Wireguard. Однако, как верно заметили в комментах, сейчас уже в пору маскироваться под валидный HTTPS-трафик.

        В итоге, несмотря на все восторги в адрес Wireguard, пока это даже близко не то же самое, что IKEv2.


        1. TheDarkKRONOS
          11.12.2018 06:40

          Wireguard работает на данный момент нативно только на линуксе. IKEv2 работает на Linux, Mac 10.11+, Windows 7+, Android 4+, iOS 9+.

          Wireguard уже есть на Android + под Windows есть Tunsafe (там тоже открытый исходный код).


          1. YourChief
            11.12.2018 11:36

            Он там работает нативно? То есть я получу обещанную скорость, выше чем у IPsec?


            1. nezorflame
              11.12.2018 16:39

              На Android — да, при условии наличия модуля в ядре.
              На XDA уже масса ядер с модулем внутри.


      1. rub_ak
        11.12.2018 12:23

        У openvpn начинаются проблемы при большой нагрузки по трафику

        А можно поподробней? В чем трафик измеряется хотя бы?


        1. turbotankist
          12.12.2018 11:15

          настраивал впн между дроплетами в диджиталоушен потом тестировал пропускную способность с iperf
          нативно ~ 1,9Гб/c
          openvpn ~ 100Mб/c
          wireguard ~500-600Mб/c


  1. inkvizitor68sl
    10.12.2018 18:42
    -3

    Ситуация сейчас такова, что пора уже сделать VPN, который целиком и полностью работает через https. Не мимикрирует под него, а действительно делает GET/POST по https в качестве транспорта при включении определенных настроек.
    Да, медленно. Но пора.


    1. stavinsky
      10.12.2018 19:56

      типа такого?
      github.com/unbit/vpn-ws


      1. inkvizitor68sl
        10.12.2018 20:00

        Выглядит замороченно для конечного потребителя, но примерно такое я и имел в виду, да.


        1. scruff
          11.12.2018 17:44

          Зато ставится чуть ли не в 2 с пполвиной клика. Такой, в идеале, и должна быть установка типичных базововых сервисов, вроде почты, VPN, проксей. Основной трабл — CRL, как уже говорилось.


      1. scruff
        11.12.2018 11:21

        Агаа, Ну-Ну… Использовал этот гит-репозторий, весьма годная штука… была… пока через месяц после установки не протух CRL, а продакшн-клиентов уже было за сотню! Притом автор сего решения даже не соизволил об этом упомянуть, никак от слова вообще!!! Не говоря уже о решении этой траблы. Имхую, что цель такого сервака ни разу не продакшн, а сервак-однодневка — проработать месяц на одном VPS-хостинге, затем протухнуть/выпилиться и подняться «с нуля» на другом. Продлить CRL у меня получилось только на следующие 30 дней. Последующее продление так и не заработало. Скрипт CRL-обновления ругался на какие-то кривые атрибуты в СА. Проблема еще в том, что конкретно по CRL-проблеме на openVPN-е гугл знает не много. Пришлось заколхозить всё это дело скриптом в cron-е, по «откату» системного времени каждую ночь. До такой стыдобы я еще не скатывался. Надеюсь этот костыль выпилить в ближайшее время. Вторая трабла — все VPN-клиенты за-NAT-ченные, что тоже крайне неудобно для eterprise-структур, т.е. из LAN-ки клиента никак не достать. И поменять NAT на routing вообще никак и судя по всему, OpenVPN тупо не умеет раутить клиентов. Хотя тот же самый MS ISA умел это дело переключать одной галочкой. Третий трабл — около-нулевая секьюрность — *.ovpn-ключ-настройка на клиентах OpenVPN храниться в явном виде в папочке профиля фраерка и спикрасть его, имея доступ к ПК — как два байта отослать. Единственный плюс решения — работает даже через параноидально-защищенные фаерволлы, где хоть как-то разрешен TCP:443.


        1. inkvizitor68sl
          11.12.2018 17:13

          > OpenVPN тупо не умеет раутить клиентов
          Вообще-то умеет.


          1. scruff
            11.12.2018 17:35

            поделитесь маном, пожалуйста. Желательно реально рабочим, а не кусочным.


            1. inkvizitor68sl
              11.12.2018 18:07

              Маном к чему? К openvpn? Родной неплохо написан.
              Для роутинга в openvpn (в разных направлениях) есть как минимум 3 параметра:
              1) push-route (который на клиенте заворачивает маршруты в vpn)
              2) iroute (для роутинга клиентов внутри vpn-сети)
              3) client-to-client, который позволит клиентам общаться между собой (через vpn-сервер, но всё же).

              Выбирайте любой подходящий для вашего случая.
              А писать готовые рецепты на все возможные случаи для монстра, подобного openvpn — неблагодарная работа.


        1. site6893
          11.12.2018 23:46

          > *.ovpn-ключ-настройка на клиентах OpenVPN
          > храниться в явном виде в папочке профиля фраерка

          єє, так зашифруй сертификаты для VPN доступа, никто не заставляєт их хранить в открытом виде рядом с конфигами OpenVPN.


          1. scruff
            12.12.2018 06:12

            Мэээ, так подскажи, как шифровать. Понятно, что шифровать файловую систему нет особого смысла нет — сел за «залогиненную» учетку пользователя и слил *.ovpn. В идеале была бы технология как в винде — свое хранилище сертификатов и клей к ним, где можно ставить либо пароль на ключ либо метку «неэкспортируемый.»


            1. YourChief
              12.12.2018 18:08

              Так на ключ в текстовом формате как раз и можно ставить пароль (на деле он шифруется ключом, выведенным из пароля).


              1. scruff
                12.12.2018 20:02

                Где можно наглядно посмотреть?


                1. YourChief
                  12.12.2018 20:14

                  Если Вы генерируете сертификаты и ключи с помощью easy-rsa 2 из комплекта OpenVPN, то скрипт ./build-key-pass как раз такой и генерирует. А вообще средствами openssl это генерится например так:

                  openssl genrsa -aes256 2048 > mykey.pem


                  1. scruff
                    13.12.2018 06:00

                    Скрипт генерации *.ovpn файла такой:

                    #! /bin/bash
                    # Script to automate creating new OpenVPN clients
                    #
                    # H Cooper — 05/02/11
                    # Y Frolov — 08/06/16 — bundle config added (unified format)
                    # Usage: newclient.sh <common-name>

                    echo «Script to generate unified config for Windows App»
                    echo «sage: newclient.sh <common-name>»

                    # Set vars
                    OPENVPN_DIR=/etc/openvpn
                    OPENVPN_RSA_DIR=/etc/openvpn/easy-rsa
                    OPENVPN_KEYS=$OPENVPN_RSA_DIR/keys
                    BUNDLE_DIR=/etc/openvpn/bundles

                    # Either read the CN from! or prompt for it
                    if [ -z "!" ]
                    then echo -n «Enter new client common name (CN): „
                    read -e CN
                    else
                    CN=$1
                    fi

                    # Ensure CN isn't blank
                    if [ -z “$CN» ]
                    then echo «You must provide a CN.»
                    exit
                    fi

                    # Check the CN doesn't already exist
                    if [ -f $OPENVPN_KEYS/$CN.crt ]
                    then echo «Error: certificate with the CN $CN alread exists!»
                    echo " $OPENVPN_KEYS/$CN.crt"
                    exit
                    fi

                    # Establish the default variables
                    export EASY_RSA="/etc/openvpn/easy-rsa"
                    export OPENSSL=«openssl»
                    export PKCS11TOOL=«pkcs11-tool»
                    export GREP=«grep»
                    export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
                    export KEY_DIR="$EASY_RSA/keys"
                    export PKCS11_MODULE_PATH=«dummy»
                    export PKCS11_PIN=«dummy»
                    export KEY_SIZE=2048
                    export CA_EXPIRE=3650
                    export KEY_EXPIRE=1825
                    export KEY_COUNTRY=«US»
                    export KEY_PROVINCE=«CA»
                    export KEY_CITY=«xxxxxxxx»
                    export KEY_ORG=«xxxxxxxxxx»
                    export KEY_EMAIL=«xxxxxxx»
                    export KEY_OU=«RG»
                    export KEY_NAME=«EasyRSA»

                    # Copied from build-key script (to ensure it works!)
                    export EASY_RSA="${EASY_RSA:-.}"
                    "$EASY_RSA/pkitool" --batch $CN

                    # Add all certs to unified client config file

                    # Default config for client
                    cp $OPENVPN_DIR/client.ovpn $BUNDLE_DIR/$CN.ovpn

                    # CA
                    echo "" >> $BUNDLE_DIR/$CN.ovpn
                    cat $OPENVPN_KEYS/ca.crt >> $BUNDLE_DIR/$CN.ovpn
                    echo "" >> $BUNDLE_DIR/$CN.ovpn

                    # Client cert
                    echo "" >> $BUNDLE_DIR/$CN.ovpn
                    cat $OPENVPN_KEYS/$CN.crt >> $BUNDLE_DIR/$CN.ovpn
                    echo "" >> $BUNDLE_DIR/$CN.ovpn

                    # Client key
                    echo "" >> $BUNDLE_DIR/$CN.ovpn
                    cat $OPENVPN_KEYS/$CN.key >> $BUNDLE_DIR/$CN.ovpn
                    echo "" >> $BUNDLE_DIR/$CN.ovpn

                    if openvpn --version | grep 2.3; then
                    # ta tls auth OpenVPN 2.3.x
                    echo «key-direction 1» >> $BUNDLE_DIR/$CN.ovpn
                    echo "<tls-auth>" >> $BUNDLE_DIR/$CN.ovpn
                    cat $OPENVPN_KEYS/ta.key >> $BUNDLE_DIR/$CN.ovpn
                    echo "</tls-auth>" >> $BUNDLE_DIR/$CN.ovpn
                    else
                    # ta tls crypt OpenVPN 2.4.x
                    echo "<tls-crypt>" >> $BUNDLE_DIR/$CN.ovpn
                    cat $OPENVPN_KEYS/ta.key >> $BUNDLE_DIR/$CN.ovpn
                    echo "</tls-crypt>" >> $BUNDLE_DIR/$CN.ovpn
                    fi

                    # DH key
                    echo "" >> $BUNDLE_DIR/$CN.ovpn
                    cat $OPENVPN_KEYS/dh.pem >> $BUNDLE_DIR/$CN.ovpn
                    echo "" >> $BUNDLE_DIR/$CN.ovpn

                    #echo ""
                    echo «COMPLETE! Copy the new unified config from here: /etc/openvpn/bundles/$CN.ovpn»

                    Где здесь можно еще пароль прикрутить?


                1. site6893
                  13.12.2018 03:50

                  ну как-то так видимо:
                  openssl pkcs12 -export -in temp.pem -out encrypted_key.p12

                  а в конфиге опенвпна прописывается как обычно
                  pkcs12 encrypted_key.p12

                  Ничего сложного ;-)


            1. site6893
              13.12.2018 03:59

              надеюсь вы понимаете что вот эта метка «неэкспортируемый.», это чисто софтверная примочка, а сами ключи всеравно хранятся на жестком диске, а не в каком-то специальном хранилище которое они никогда не покидают.


              1. scruff
                13.12.2018 05:48

                Всё лучше, чем хранить ключ в открытом виде. Буду рад если скинете пруф, что эта галочка бесполезная. На может и ЖД хранятся, но явно не в открытом виде.


    1. ValdikSS
      10.12.2018 21:29

      Cisco Anyconnect, если не ошибаюсь, может так работать. Для Shadowsocks есть обфусцирующие плагины, которые могут эмулировать POST-запрос. Obfsproxy тоже так может работать.


      1. homecreate
        11.12.2018 13:37

        А также свободный аналог Anyconnect — openconnect/ocserv


    1. YourChief
      11.12.2018 00:43

      Зря заминусовали. Сейчас в странах Среднего Востока с цензурой уже почти весь нераспознанный трафик просто обрезают и всё. Поэтому где-то как-то можно пропустить шифрованный трафик только внутри валидного HTTPS-соединения.


    1. namikiri
      11.12.2018 16:57
      +1

      Есть ещё вот такой интересный инструмент.


      1. inkvizitor68sl
        11.12.2018 17:16

        о, вот это уже серьёзно выглядит)
        Закинул в todo-ник на потестить.


  1. vinew
    10.12.2018 18:49
    -1

    Как с поддержкой радиуса, назначения ip клиентам, работа на 443 порту по tcp, доступ с мобильных, разные сети для разных учетных записей?


    1. YourChief
      11.12.2018 00:52

      Никак, это просто туннель. По сути ближайший аналог того, что и сейчас доступно средствами IPsec через команду ip xfrm. Примеры.


  1. dartraiden
    10.12.2018 19:38
    +1

    Кроме этого поддерживаются… Android… но в них WireGuard выполняется в userspace со всеми вытекающими последствиями для производительности.

    Если вендор наложил патчи на ядро (или есть возможность установки кастомного ядра), то будет выполняться на уровне ядра.


  1. surefire
    10.12.2018 20:03
    +1

    В системах с systemd вместо этого можно использовать sudo systemctl start wg-quick@wg0.service.

    В системах с относительно свежим systemd ?237 можно использовать встроенную в systemd?networkd поддержку wireguard. С использованием юнитов .netdev и .network


  1. DeniSix
    10.12.2018 20:18

    Для Windows доступен «альтернативный» клиент TunSafe.
    Им занимается автор ?Torrent, OpenTTD и ScummVM: Ludvig Strigeus


  1. saipr
    10.12.2018 22:18
    -1

    Однажды настраивал OpenVPN ручками и это было очень муторно

    Есть и GUI.


    Использует современную криптографию: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF и т.д.

    Можно надеяться, что под "и т.д." скрывается российская криптография.


    1. VJean
      11.12.2018 06:57

      Вам не надоело в каждой статье, где хоть как-то обсуждается VPN, рекламировать свой сайт?


  1. EndUser
    10.12.2018 22:20

    WireGuard, с моей точки зрения, вообще идеален для пользователя

    Генерируются ключи шифрования утилитой wg

    создать серверный конфиг /etc/wireguard/wg0.conf

    поднять туннель скриптом wg-quick

    Но самое интересное
    sudo wg-quick up /etc/wireguard/wg0.conf

    Я сравниваю два подчёркнутых слова и чего-то не понимаю 8-)


    1. notorca
      10.12.2018 22:31
      +2

      Пользователя из группы wheel.


  1. Whuthering
    11.12.2018 09:23
    +1

    Самой главной задачей любого туннеля или vpn, претендующих на "будущее", должна являться полная неотличимосиь со стороны DPI от повсеместно используемых "безобидных" протоколов типа HTTPS. Иначе нет смысла: каким бы стойким не было шифрования е и быстрыми алгоритмы, вы не сможете этим воспользоваться, когда государство тупо заблокирует ваш трафик как подозрительный


    1. stavinsky
      11.12.2018 09:40

      Боюсь скоро государство захочет поставить централизованный вайлдкард сертификат и будет пытаться чекать весь https трафик и не спасет нас мимикрирование под известные протоколы…


      1. Vilgelm
        11.12.2018 17:18

        Туннель внутри туннеля? В теории ведь VPN можно сделать из картинок с котиками. Да, это будет крайне медленно, неудобно и требовательно к ресурсам, но DPI и принудительный корневой сертификат не помогут.


    1. Areso
      11.12.2018 10:23

      Или не государство. Некоторые провайдеры и операторы тоже этим балуются, исключительно в силу того, что «могут».


      1. OnYourLips
        11.12.2018 13:09

        Если вы подсовываете левый сертификат, то браузер просто не будет отображать сайт.


        1. Areso
          11.12.2018 13:12
          +2

          Они не будут менять сертификат. Они порежут трафик с VPN/WireGuard/etc и успокоятся. К примеру, Yota местами так и делает.


    1. rub_ak
      11.12.2018 12:26

      Хватит уже путать «VPN», с шпионскими или анонимными сетями и прочими прокси для обхода блокировок.


      1. Whuthering
        11.12.2018 13:32

        VPN-технологии, такие как OpenVPN, SoftEther, Cisco AnyVPN и т.д. используются в том числе и для этого, поэтому никакой путаницы тут нет.
        А вот регулирующие органы, кстати, наоборот могут перепутать, и занести ваш добропорядочный VPN для доступа в какую-нибудь корп. сеть тоже в блок-лист, если вы добровольно не впишетесь в белые списки и не дадите кому надо реквизиты доступа или не поставите роскомнадзоровские фильтры/ревизоры. Поэтому там маскировка под какой-нибудь HTTPS лишней тоже не будет.


    1. tyderh
      11.12.2018 16:43

      Будущее интернета, а не чебурнета некоторых нефтебанановых республик.


  1. whyme
    11.12.2018 15:50
    +1

    Здесь нет сложной системы сертификатов и всего этого корпоративного ужаса, короткие ключи шифрования распространяются примерно как SSH ключи.
    Сертификаты защищают от MITM атак и не относяться только к корпоративному сегменту. Без них у вас не будет другого выхода, кроме как передавать ключи по другим каналам связи, что неудобно для обычных пользователей. А если хотите передать безопасно и не в открытом виде, то это будет или передача при личной встрече или что-то с шифрованием и с теми же сертифкитами. Для vpn это, по моему, минус.

    Да и «ужас» бывает не всегда, использую сертификаты letsencrypt для ipsec, вся настройка — это указать путь к сертификату на сервере, на клиенты сертификат ставить не надо.


    1. YourChief
      11.12.2018 15:57

      А у Вас есть клиенты на Windows? Там вроде как особые требования к сертификатам и к значению маршрутов: wiki.strongswan.org/projects/strongswan/wiki/Win7CertReq


  1. Prototik
    11.12.2018 16:16
    +2

    Прошу заметить, что помимо описанного в статье wg-quick, wireguard интерфейсы умеет создавать systemd-networkd (с какой-то там версии, уточните в документации):

    # cat /etc/systemd/network/15-vpn.netdev
    [NetDev]
    Name=vpn
    Kind=wireguard
    
    [WireGuard]
    PrivateKey = SOME_PRIVATE_KEY
    ListenPort = 51820
    
    [WireGuardPeer]
    PublicKey = SOME_PUBLIC_KEY
    PresharedKey = SOME_PSK_KEY
    AllowedIPs = 172.16.0.0/12
    Endpoint = 1.2.3.4:1234
    


    Если у вас сервер на systemd — не используйте wg-quick, это очень… Странная штука.


  1. rogoz
    11.12.2018 16:29

    Такую простоту использования и компактность кодовой базы удалось достичь за счет отказа от функционала дистрибьюции ключей. Здесь нет сложной системы сертификатов и всего этого корпоративного ужаса, короткие ключи шифрования распространяются примерно как SSH ключи. Но в связи с этим возникает проблема: WireGuard будет не так просто внедрять в некоторых уже существующих сетях.

    openvpn.net/community-resources/static-key-mini-howto


  1. selenite
    12.12.2018 18:36

    А как правильно прописывать маршруты через интерфейс wg на андроиде, если есть рут, и есть необходимость задавать их вручную? (Android использует iproute2 и несколько таблиц маршрутизации)


  1. Zettabyte
    13.12.2018 06:07

    Вы упомянули высокую производительность и даже результаты бенчмарков, а могли бы вы добавить что-нибудь насчёт системных требований?
    Полагаю, что наиболее важным параметром будет объём оперативной памяти.

    Т.е. VPS'а с какими параметрами будет достаточно для УайрГарда?
    А то у них на сайт только kernel requirements есть.


  1. DeriArt
    13.12.2018 11:35

    Подскажите, вот установил wireguard на сервер (все норм), подключаюсь с винды через tunsafe и все вроде хорошо конектится, вот только инет на компе остается прежним (с айпишником моего провайдера, а не сервера) :) Если знаете как это решить напишите пожалуйста, буду вам очень-очень благодарен!