Двойной VPN в один клик. Как легко разделить IP-адрес точки входа и выхода



    TL;DR В статье описывается самый простой способ настроить VPN-сервер, у которого IP-адрес для подключения VPN-клиентов отличается от IP-адреса, с которого клиенты выходят в интернет.

    Используете VPN для защиты приватности в интернете и арендуете для этого свой личный сервер? При этом вы единственный клиент, который подключается к этому серверу во всем мире? Так ли сложно найти ваш реальный IP-адрес, как вам кажется? С вступлением в силу пакета Яровой, это становится намного проще.

    Double VPN — популярная тема, вокруг которой много спекуляций. Часто этим термином называют совершенно разные технологии, но почти всегда это означает разнесенные на уровне IP-адресов точки подключения и выхода в интернет. Мы рассмотрим самый простой способ настройки VPN-сервера в таком режиме, который не требует дополнительной настройки на серверной стороне и позволяет получить максимальную скорость и самые низкие задержки.

    Модель угроз


    Для того, чтобы от чего-то защищаться, нужно четко понимать модель угроз. Мы не будем рассуждать о новых законах, требующих от провайдеров хранить весь трафик клиентов, но совершенно точно можно сказать, что данные о подключениях, т.н. Netflow, хранить достаточно просто, и это давно и успешно делается. То есть факт подключения условного IP-адреса 1.1.1.1 к адресу 2.2.2.2 в определенное время суток записывается.

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

    Чтобы повысить уровень приватности при использовании VPN, необходимо разделить точку подключения и точку выхода в интернет на уровне IP. На картинке выше наш пользователь находится за забором под пристальным вниманием Ирины Яровой. Все подключения, проходящие через забор, Ирина строго запоминает. Пользователь, как порядочный гражданин, подключается к адресу good.citizen.vpn, при этом назад он возвращается уже с адреса super.cool.guy.vpn. В итоге для Ирины эти два подключения выглядят не связанными между собой.

    Какие бывают двойные VPN


    Под названием «двойной» VPN часто понимают разные вещи, но почти всегда это значит разнесенные территориально или на сетевом уровне узлы подключения и выхода в интернет. Иногда это просто маркетинговый трюк VPN-провайдеров, который не значит абсолютно ничего, такие услуги могут называться «тройным» и «четверным» VPN.

    Мы разберём самые типовые схемы, которые применяют на практике.

    VPN между серверами


    Самый распространенный способ. В таком режиме клиент устанавливает VPN-подключение к только первому серверу. На первом сервере настроен тоннель ко второму, и весь трафик от клиента уходит ко второму серверу, и так далее. Промежуточных серверов может быть несколько. При этом тоннель между серверами может быть установлен по любому другому протоколу, отличному от протокола, по которому подключен клиент, например IPsec, или вообще без шифрования, вроде GRE или IPIP. В таком режиме все промежуточные сервера может быть видно в трассировке маршрута. Проверить, как именно подключены между собой промежуточные сервера на стороне клиента нет возможности, поэтому можно только доверять провайдеру.

    На всём пути следования трафика минимальный MTU (Maximum transmission unit) остаётся равным значению самого первого тоннеля, и каждый промежуточный сервер имеет доступ к расшифрованному трафику клиента.



    VPN через прокси


    Тоже достаточно распространённый способ. Часто используется для маскирования VPN-трафика под другой протокол, например в Китае. Такой способ удобнее цепочки из проксей, потому что с помощью VPN легко маршрутизировать весь системный трафик в тоннель. Существуют также инструменты для перехватывания системных вызовов программ и перенаправления их в прокси: ProxyCap, Proxifier, но они менее стабильны, так как иногда пропускают запросы и они уходят мимо прокси или работают некорректно с некоторыми программами.

    В этом режиме прокси-сервер не видно в трассировке маршрута.



    VPN внутри VPN


    Самый параноидальный и медленный способ: все тоннели поднимаются на стороне клиента, при этом каждый внутри другого. Такой способ требует хитрой настройки маршрутов на стороне клиента и запуска всех VPN-клиентов в нужном порядке. Это плохо сказывается на задержках и производительности, зато промежуточные сервера не имеют доступа к открытому трафику клиента. Все накладные расходы по инкапсуляции суммируются, и максимальный размер пакета (MTU), доступный в итоге клиенту, уменьшается в зависимости от числа тоннелей. Промежуточные сервера не видны в трассировке маршрутов.



    Настройка VDS


    Самый лёгкий способ настроить VPN с разделёнными точками входа и выхода — подключить несколько IP-адресов на один виртуальный сервер. Этот способ позволяет получить максимальную скорость и минимальные задержки, так как по сути трафик терминируется на одном сервере. У нас, в Vdsina.ru вы можете это сделать самостоятельно из панели управления. В то время как IPv4 везде кончаются, мы выдаем дополнительные IP-адреса даже на серверах за 60 рублей!

    Разберем поэтапно настройку сервера.

    Выбираем сервер


    Заказываем VDS с подходящим тарифом, в нужном датацентре. Учитывая нашу задачу, выберем датацентр подальше, в Нидерландах ;)



    Подключаем дополнительный IP-адрес


    После покупки дополнительного IP-адреса его нужно настроить по инструкции.



    Для наглядности назначим PTR-запись на IP. Это доменное имя, которое будет видно при обратном преобразовании IP-адреса в домен. Это может быть любое значение, в том числе несуществующий домен.

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

    xxx.xxx.38.220 — super.cool.guy.vpn # внешний адрес (точка выхода)
    xxx.xxx.39.154 — good.citizen.vpn # адрес подключения (точка входа)
    



    Проверка двух IP


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

    Для этого проще всего из консоли использовать сервис ifconfig.co. При запросе через curl он возвращает IP-адрес, с которого был сделан запрос.

    $ curl ifconfig.co
    xxx.xxx.38.220
    

    По последним цифрам видно, наш внешний адрес действительно соответствует точке выхода. Попробуем проверить корректность работы второго IP в качестве точки входа. Для этого просто используем встроенную в SSH функцию SOCKS-прокси.

    Команды выполняются на клиенте:

    ssh -D 9999 root@good.citizen.vpn
    
    # в новом окне
    curl -x socks5h://127.0.0.1:9999 ifconfig.co
    super.cool.guy.vpn
    

    Первая команда устанавливает SSH-сессию с адресом good.citizen.vpn и одновременно активирует SOCKS-прокси внутри этой сессии, который доступен на локальном порту. Вторая делает обычный HTTP-запрос через этот прокси.
    Важно помнить, что в наших примерах для запросов используются выдуманные доменные имена. Они будут отображаться только при PTR-резолве, и полноценный запрос к ним сделать не получится. Поэтому на данном этапе обращаться к серверу нужно через IP-адрес.

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



    IPsec IKEv2 — современный протокол VPN, поддерживаемый почти всеми операционными системами из коробки. Он используется как протокол по-умолчанию в Windows, macOS и iOS. При этом не требует установки стороннего ПО и работает в большинстве случаев быстрее OpenVPN. На хабре уже были статьи по настройке сервера IKEv2, но все они описывают использование самоподписанных сертификатов, и неудобны тем, что требуют установить корневой сертификат на стороне VPN-клиента.

    Мы же разберем пример настройки сервера с использованием доверенного сертификата от Let's Encrypt. Это позволяет не устанавливать клиенту посторонние корневые сертификаты, а выдать только логин и пароль.

    Подготовка сервера


    Мы будем использовать сервер на базе Ubuntu 18.04, но инструкция также подходит для большинства современных дистрибутивов.

    Обновляем систему и устанавливаем нужные пакеты

    apt update && apt upgrade
    
    apt install certbot strongswan libstrongswan-extra-plugins
    

    Выпуск сертификата


    Для выпуска доверенного сертификата вам потребуется направить реальный домен на IP-адрес точки входа. Мы не будем рассматривать этот пункт подробно, так как он выходит за рамки статьи. В качестве примера мы будем использовать вымышленный домен good.citizen.vpn

    Если у вас на сервере уже есть есть веб-сервер, используйте подходящий способ выпуска сертификата через certbot или другой клиент для Let's Encrypt. В данном примере предполагается, что порт HTTP (80) ничем не занят.

    certbot certonly --standalone --agree-tos -d good.citizen.vpn
    

    Ответив на вопросы мастера? мы получим подписанный сертификат и ключ

    # find /etc/letsencrypt/live/good.citizen.vpn/
    
    /etc/letsencrypt/live/good.citizen.vpn/
    /etc/letsencrypt/live/good.citizen.vpn/fullchain.pem
    /etc/letsencrypt/live/good.citizen.vpn/README
    /etc/letsencrypt/live/good.citizen.vpn/cert.pem
    /etc/letsencrypt/live/good.citizen.vpn/privkey.pem
    /etc/letsencrypt/live/good.citizen.vpn/chain.pem
    

    Для проверки подлинности IKEv2 сервера используются те же X.509-сертификаты, что и для
    HTTPS. Чтобы Strongswan смог использовать эти сертификаты, их нужно скопировать в папку /etc/ipsec.d.

    Вот как должны быть расположены сертификаты:

    cp /etc/letsencrypt/live/good.citizen.vpn/cert.pem /etc/ipsec.d/certs/
    cp /etc/letsencrypt/live/good.citizen.vpn/privkey.pem /etc/ipsec.d/private/
    cp /etc/letsencrypt/live/good.citizen.vpn/chain.pem /etc/ipsec.d/cacerts/
    

    Так как сертификаты letsencrypt перевыпускаются часто, делать это вручную неудобно. Поэтому автоматизируем этот процесс с помощью хука для certbot.

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

    Создадим файл /etc/letsencrypt/renewal-hooks/deploy/renew-copy.sh и сделаем его исполняемым.

    #!/bin/sh
    
    set -e
    
    for domain in $RENEWED_DOMAINS; do
            case $domain in
            good.citizen.vpn)
                    daemon_cert_root=/etc/ipsec.d/
    
                    # Make sure the certificate and private key files are
                    # never world readable, even just for an instant while
                    # we're copying them into daemon_cert_root.
                    umask 077
    
                    cp "$RENEWED_LINEAGE/cert.pem" "$daemon_cert_root/certs/"
                    cp "$RENEWED_LINEAGE/chain.pem" "$daemon_cert_root/cacerts/"
                    cp "$RENEWED_LINEAGE/privkey.pem" "$daemon_cert_root/private/"
    
                     # Reread certificates
                    /usr/sbin/ipsec reload
                    /usr/sbin/ipsec purgecerts
                    /usr/sbin/ipsec rereadall
                    ;;
            esac
    done
    

    Теперь после каждого перевыпуска сертификата скрипт будет копировать новые файлы в папки strongswan-а и посылать команду демону перечитать сертификаты.

    Настройка Strongswan


    Добавим конфиг strongswan /etc/ipsec.conf

    config setup
    
        #  Разрешить несколько подключений с одного аккаунта
        uniqueids=no
    
        # Increase debug level
        # charondebug = ike 3, cfg 3
    
    conn %default
    
        # Универсальный набор шифров для большинства платформ
        ike=aes256-sha256-modp1024,aes256-sha256-modp2048
    
        # Таймауты "мёртвых" подключений
        dpdaction=clear
        dpddelay=35s
        dpdtimeout=2000s
    
        keyexchange=ikev2
        auto=add
        rekey=no
        reauth=no
        fragmentation=yes
        #compress=yes
    
        # left - local (server) side
        leftcert=cert.pem # Имя файла сертификата в папке /etc/ipsec.d/certs/
        leftsendcert=always
        # Маршруты отправляемые клиенту
        leftsubnet=0.0.0.0/0
    
        # right - remote (client) side
        eap_identity=%identity
        # Диапазон внутренних IP-адресов назначаемых VPN-клиентам
        rightsourceip=10.0.1.0/24
        rightdns=8.8.8.8,1.1.1.1
    
     # Windows and BlackBerry clients usually goes here
    conn ikev2-mschapv2
        rightauth=eap-mschapv2
    
    # Apple clients usually goes here
    conn ikev2-mschapv2-apple
        rightauth=eap-mschapv2
        leftid=good.citizen.vpn
    

    Логины и пароли VPN-клиентов задаются в файле /etc/ipsec.secrets

    В этом файле также нужно указать имя приватного ключа, который мы ранее копировали из папки letsencrypt:

    # Имя файла приватного ключа в папке /etc/ipsec.d/private/
    : RSA privkey.pem
    
    # Пользователи VPN
    # имя : EAP "Пароль"
    IrinaYarovaya : EAP "PleaseLoveMe123"
    Mizooleena : EAP "IwannaLoveToo3332"
    

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

    $ systemctl restart strongswan
    
    $ ipsec statusall
    Virtual IP pools (size/online/offline):
      10.0.1.0/24: 254/0/0
    Listening IP addresses:
     xxx.xxx.38.220
    Connections:
    ikev2-mschapv2:  %any...%any  IKEv2, dpddelay=35s
    ikev2-mschapv2:   local:  [CN=good.citizen.vpn] uses public key authentication
    ikev2-mschapv2:    cert:  "CN=good.citizen.vpn"
    ikev2-mschapv2:   remote: uses EAP_MSCHAPV2 authentication with EAP identity '%any'
    ikev2-mschapv2:   child:  0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear
    ikev2-mschapv2-apple:  %any...%any  IKEv2, dpddelay=35s
    ikev2-mschapv2-apple:   local:  [good.citizen.vpn] uses public key authentication
    ikev2-mschapv2-apple:    cert:  "CN=good.citizen.vpn"
    ikev2-mschapv2-apple:   remote: uses EAP_MSCHAPV2 authentication with EAP identity '%any'
    ikev2-mschapv2-apple:   child:  0.0.0.0/0 === dynamic TUNNEL, dpdaction=clear
    

    Можно видеть, что конфиг успешно активирован и сертификат подключен. На данном этапе уже можно подключаться к VPN-серверу, но он будет без доступа к интернету. Чтобы выпустить клиентов в интернет, нужно включить форвардинг и настроить NAT.

    Настройка NAT


    Активируем форвардинг пакетов:

    echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
    sysctl -p
    

    Включаем NAT. Важно иметь в виду, что это просто пример минимальной конфигурации iptables. Настройте остальные правила в зависимости от ваших потребностей.

    ethName0 — замените на свое имя интерфейса
    10.0.1.0/24 — диапазон IP-адресов который будет выдаваться VPN-клиентам. Мы задавали его в /etc/ipsec.conf
    111.111.111.111 — IP-адрес точки выхода, в нашем примере это адрес super.cool.guy.vpn

    iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o ethName0 -j SNAT --to-source 111.111.111.111
    

    Отладка


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

    В случае проблем с подключением можно смотреть лог в реальном времени:

    journalctl -f -u strongswan
    

    Автозапуск при загрузке


    Если всё успешно, можно добавить strongswan в автозапуск при загрузке:

    systemctl enable strongswan
    

    Сохранение правил iptables


    Чтобы сохранить правила iptables после перезагрузки, существует специальный пакет iptables-persistent. Важно помнить, что он сохранит текущий набор правил и добавит его в автозагрузку.

    apt install iptables-persistent 
    

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


    Настройка на стороне клиентов выполняется крайне просто — достаточно сообщить клиенту адрес сервера, логин и пароль. Для macOS и iOS можно создать профили автоконфигурации, которые достаточно будет активировать в два клика.

    Настройка Windows
    В новых версиях Windows IKEv2 настраивается в простом мастере, который можно вызвать из меню подключения к WiFi.



    Windows не устанавливает маршрут по-умолчанию для такого соединения, поэтому установим его вручную. В свойствах VPN подключения заходим в свойства TCP/IPv4 --> дополнительно и устанавливаем галочку «Использовать шлюз в удаленной сети»


    кликабельно

    Настройка macOS
    В macOS поддерживается IKEv2 начиная с версии 10.11 (El Capitan). Создание подключения происходит через меню настроек сети.

    image

    Добавлем новое подключение. В качестве имени подключения задаем любое произвольное имя.

    image

    Для проверки подлинности сертификата, нужно указать доменное имя. При этом в поле «Server Address» можно указать IP-адрес сервера, а домен только в «Remote ID», тогда для подключения не будет выполняться DNS-резолв, и оно будет происходить чуть быстрее.

    image

    Логин и пароль пользователя указываем из файла /etc/ipsec.secrets

    image

    Настройка iOS
    Настройку iOS можно выполнить вручную через мастер, но намного удобнее использовать профиль автоконфигурации mobileconfig.

    Ручная настройка по смыслу аналогична десктопной macOS:

    Настройки -> VPN -> Добавить конфигурацию VPN

    Профиль автоконфигурации для устройств Apple

    Профили автоконфигурации .mobileconfig представляют из себя XML-файл с настройками, которые могут настраивать что угодно: от SSL-сертификатов до VPN-подключений.

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

    Пример конфига для подключения к нашему IKEv2-серверу.
    Для настройки файла под свою конфигурацию, достаточно отредактировать несколько параметров в этом шаблоне:

    AuthName — имя пользователя из файла /etc/ipsec.secrets
    AuthPassword — пароль пользователя /etc/ipsec.secrets
    RemoteAddress — домен или IP-адрес сервера
    RemoteIdentifier — домен, на который выпущен сертификат

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>PayloadContent</key>
        <array>
            <dict>
                <key>IKEv2</key>
                <dict>
    
                    <!-- Username and password from ipsec.secrets -->
                    <key>AuthName</key>
                    <string>IrinaYarovaya</string>
                    <key>AuthPassword</key>
                    <string>PleaseLoveMe123</string>
    
                    <!-- Hostname or IP address of VPN server.
                     Chosing IP address instead of DNS name can avoid issues with client DNS resolvers and speed up connection process. -->
                    <key>RemoteAddress</key>
                    <string>123.123.123.123</string>
    
                    <!-- leftid in ipsec.conf -->
                    <key>RemoteIdentifier</key>
                    <string>good.citizen.vpn</string>
    
                    <key>AuthenticationMethod</key>
                    <string>Certificate</string>
                    <key>ChildSecurityAssociationParameters</key>
                    <dict>
    
                    <!-- in ipsec.conf this proposal is: ike=aes256-sha256-modp2048 -->
                        <key>DiffieHellmanGroup</key>
                        <integer>14</integer>
                        <key>EncryptionAlgorithm</key>
                        <string>AES-256</string>
                        <key>IntegrityAlgorithm</key>
                        <string>SHA2-256</string>
                        <key>LifeTimeInMinutes</key>
                        <integer>1440</integer>
                    </dict>
                    <key>DeadPeerDetectionRate</key>
    
                    <!--
                        None (Disable)
                        Low (keepalive sent every 30 minutes)
                        Medium (keepalive sent every 10 minutes)
                        High (keepalive sent every 1 minute)
                    -->
                    <string>High</string>
                    <key>ExtendedAuthEnabled</key>
                    <true/>
                    <key>IKESecurityAssociationParameters</key>
                    <dict>
                        <key>DiffieHellmanGroup</key>
                        <integer>14</integer>
                        <key>EncryptionAlgorithm</key>
                        <string>AES-256</string>
                        <key>IntegrityAlgorithm</key>
                        <string>SHA2-256</string>
                        <key>LifeTimeInMinutes</key>
                        <integer>1440</integer>
                    </dict>
    
                    <!--
                    Always On OnDemand Rule
                    Cen be disabled in connection preferences by "On Demand" checkbox
                    http://www.v2ex.com/t/137653
                    https://developer.apple.com/library/mac/featuredarticles/iPhoneConfigurationProfileRef/Introduction/Introduction.html
                    https://github.com/iphoting/ovpnmcgen.rb
                    -->
                    <key>OnDemandEnabled</key>
                        <integer>1</integer>
                        <key>OnDemandRules</key>
                        <array>
                            <dict>
                                <key>Action</key>
                                <string>Connect</string>
                            </dict>
                        </array>
                </dict>
                <key>IPv4</key>
                <dict>
                    <key>OverridePrimary</key>
                    <integer>1</integer>
                </dict>
                <key>PayloadDescription</key>
                <string>Configures VPN settings</string>
                <key>PayloadDisplayName</key>
                <string>VPN</string>
                <key>PayloadIdentifier</key>
                <string>com.apple.vpn.managed.96C1C38F-D4D6-472E-BA90-9117ED8896B5</string>
                <key>PayloadType</key>
                <string>com.apple.vpn.managed</string>
                <key>PayloadUUID</key>
                <string>96C1C38F-D4D6-472E-BA90-9117ED8896B5</string>
                <key>PayloadVersion</key>
                <integer>1</integer>
    
                <!-- VPN connection name in Network Preferences -->
                <key>UserDefinedName</key>
                <string>London VPN</string>
                <key>VPNType</key>
                <string>IKEv2</string>
            </dict>
        </array>
    
        <!-- Set the name to whatever you like, it is used in the profile list on the device -->
        <key>PayloadDisplayName</key>
        <string>My Super IKEv2 VPN</string>
    
        <!-- A reverse-DNS style identifier (com.example.myprofile, for example) that identifies the profile. This string is used to determine whether a new profile should replace an existing one or should be added. -->
        <key>PayloadIdentifier</key>
        <string>vpn.googd.citizen</string>
    
        <!-- A globally unique identifier, use uuidgen on Linux/Mac OS X to generate it -->
        <key>PayloadUUID</key>
        <string>F3FAD91C-019C-4A79-87A1-CF334C583339</string>
        <key>PayloadType</key>
        <string>Configuration</string>
        <key>PayloadVersion</key>
        <integer>1</integer>
    </dict>
    </plist>
    

    Настройка Android
    К сожалению Android единственная из популярных операционных систем, которая до сих пор не имеет встроенной поддержки IKEv2. Для подключения можно использовать официальный клиент Strongswan из PlayMarket

    Итог


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

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



    VDSina.ru — хостинг серверов
    Серверы в Москве и Амстердаме

    Комментарии 59

      0
      IP-адреса точек входа и выхода находятся в разных подсетях

      А находятся ли они в разных BGP AS?
      Если они в одной принадлежащей ДЦ, то поиск может быть успешным.
      Берём внешний, определяем в какой автономке, получаем список префиксов этой автономки, ищем по закромам гражданки Яровой. С большой вероятностью находим, так как таких хитрых пользователей, ходящих в инет через датацентры, не особо много.
        0

        В диапазонах этих AS наверняка будут подняты десятки серверов к которым будут подключаться разные пользователи внутри страны. В итоге в логах netflow будет сильно больше одного IP адреса из этой сети.


        Представьте себя на месте лица, запрашивающего такую информацию. Допустим вы делаете запрос на выгрузку всех коннектов, допустим, /23 сети. Получаете сотню лог netflow с сотней ip-адресов. Что дальше? Конечно это возможно, просто масштаб работы на несколько порядков увеличивается.

          0
          Это вызовет проблему аналитики?
          Представьте себе аналитику случайных позиций курсора, в момент чтения материала со страницы поиска + поисковые запросы с этой «печенькой» + аналитику выбора количество анализируемых данных в теле запроса, это позиционирование и выбор пунктуации, скорость набора текста и т.д.
          Вызывает ли это проблемы в анализе? Нет не вызывает, что уж тут проанализировать перечень обращений к ДНС, или подменить сам ДНС, получая ДНС запросы напрямую от пользователя.
          Столь простой анализ совсем не проблема, для выявления пользователя…
        +2
        Хм, интересно читать статьи подобного рода от ОРИ
          0
          Дык VDSina для того их и пишет, чтобы собирать побольше компромата и отдавать его тов. майору.
          0
          А насколько strongSwan нагружает сервер? Самый дешёвый VPS потянет?
            +1

            Прелесть strongswan в том, что он использует ipsec ядра и при прочих равных меньше нагружает систему чем тот же openvpn. Самого дешевого сервера вполне хватает, но зависит от числа пользователей, разумеется.

              0
              у меня обслуживает 60 друзей на самом дешёвом тарифе у Hetzner.de + прокси для телеграма бонусом крутится.

              Ставьте скриптом отсюда — github.com/jawj/IKEv2-setup
                0

                Вау, спасибо! Благодаря вашей ссылке я узнал про сервис https://sslip.io
                Это именно то, что я давно хотел и уже собирался сам делать.
                Теперь можно сделать полноценный docker контейнер который будет разворачиваться полностью сам без доменного имени.

                  0

                  решений на докере уже вагон, практика показывает, что нативное лучше

                  0
                  Еще github.com/StreisandEffect/streisand могу порекомендовать.
                  Давно использую, обилие протоколов радует.
                0
                Существуют также инструменты для перехватывания системных вызовов программ и перенаправления их в прокси: ProxyCap, Proxifier, но они менее стабильны, так как иногда пропускают запросы и они уходят мимо прокси или работают некорректно с некоторыми программами.

                Можно подробнее об этом? Я пользуюсь Proxifier чтобы засунуть программу java в SOCKS и вроде бы все работает корректно. В каких случаях могут быть проблемы?


                Кстати, в macOS есть возможность указать SOCKS прокси глобально для всей системы и вот тут точно некоторые запросы могут уходить мимо прокси. Вроде графические программы работают через прокси, но какие-то системные запросы могут пройти мимо.

                  0

                  Я сам сталкивался с тем, что при редактировании правил в Proxifier, коннекты могут идти мимо существующих правил. Еще он иногда вылетает и программы начинают так же работать напрямую. Для каких-то маленьких задач, где правила не изменяются, он достаточо неплох, но для всей системы мне не понравилось.

                  0
                  Шикарная иллюстрация. Есть вопрос — как прикрутить к strongSwan авторизацию через AD?
                    0

                    У strongswan есть плагин для RADIUS, нельзя сделать прослойку между RADIUS и AD?

                      0
                      Можно в теории, но хочется как можно проще. У меня немного необычная задача — нужно организовать поднятие VPN-туннелей в зависимости от принадлежности к группе AD. Например, членство в группе Developers должно поднимать туннель до 10.1.1.4.
                        0
                        Как вариант — посмотреть в сторону SoftEther VPN.
                        github.com/SoftEtherVPN/SoftEtherVPN
                        Умеет из коробки L2TP (поверх IPSec и без него), PPTP, OpenVPN UDP/TCP, свой протокол SoftEther.
                        Есть сервер под Linux и Windows. Управление как через нативное Windows-приложение, так и через CLI (при этом сервер может быть на Linux, а управление осуществляется из Windows). При установке на подключенный к домену AD Windows может авторизовывать пользователей по каталогу AD. При установке на Linux — может авторизовывать через RADIUS. Если есть контроллер домена AD на Windows (не Samba/FreeIPA), там же можно развернуть родной RADIUS (роль сервера политики сети). К сожалению, не умеет работать с внешними группами безопасности (отчасти решается при авторизации через RADIUS — т.к. сервер RADIUS будет решать (на основе настроенной вами политики), кого допускать до сервера VPN, а кого нет). Группы надо создавать на самом SoftEther. Есть встроенный фильтр (ACL) — можно обозначить, какие группы пользователей на какие адреса и по каким протоколам/портам могут ходить. Есть встроенный Virtual NAT с DHCP-сервером, есть push static route для всех поддерживаемых вариантов VPN.
                          0
                          Благодарю) посмотрю обязательно. Этот вариант потенциально проще, чем StrongSwan?
                            0
                            Все относительно. Лично для меня — пожалуй, да, так как в моих кейсах решает сразу все вопросы по организации пользовательского VPN (road warriors) и настраивается достаточно интуитивно.
                          +2
                          Я у себя использую StrongSwan + NPAS + AD
                          Для групп в strongswan есть rightgroups (docs) но я не пробовал если честно (могу затестить и отписаться)
                          В принципе ничего сложного там нет (Больше проблем с мобильными девайсами)
                            0

                            Спасибо. Если поделишься конфигами — буду благодарен. Мне не нужны мобильные особо.

                              0
                              Да без проблем, могу завтра скинуть.
                              Настройки для strongswan (Centos 7)
                                0

                                Выкладывайте уж для всех.

                                  +1
                                    0
                                    Очень благодарен) Больше, чем на +1 карму не подниму, но все равно спасибо.
                                    Можно я совсем обнаглею и предложу написать пост на тему?) Инвайт подарил.
                                      0
                                      Спасибо за подарок, можно конечно написать. Но не могу сказать что это будет прям завтра. Скорее всего на выходных.
                                        0
                                        Было бы очень круто) Расскажешь заодно более подробно про архитектуру решения. Это многим было бы очень актуально.
                                          0
                                          Тык-тык)
                        +3
                        У DigitalOcean есть бесплатная опция floating ip, дополнительный IP который внутри одного датацентра можно направить на любой сервер.
                        Этот адрес можно использовать для подключения, а точкой выхода будет адрес сервера.
                          0

                          А лучше бы наоборот...

                            0

                            Знает ли кто-нибудь, как сделать тоже самое в Google Cloud Platform?

                              0

                              На сколько я помню, Google Compute Engine позволяет добавлять IP адреса на виртуалку так же как и amazon aws.

                            0
                            Спасибо за отличную статью!
                            Подскажите пожалуйста, в ближайшее время на серваках в амстердаме появятся места?
                              0
                              Вам спасибо :)
                              через неделю будут
                              +1
                              Было би интересно, такое же, но с использованием WireGuard
                                –2

                                Цитата valdikss, сам про wireguard ничего не знаю:


                                На текущий момент развития, Wireguard — просто туннель, как GRE или IPIP, который не имеет функциональность передачи настроек клиенту (IP-адрес, маршруты, DNS-сервер, различные опции). Туннель настраивается с обеих сторон, и любые изменения конфигурации (маршрутов, например) будут требовать изменения с обеих сторон. Это совершенно непрактично.
                                Wireguard не предназначен для VPN-сервисов, и в текущем его виде может быть использован только для создания приватных туннелей.
                                Вы как-то иначе представляете настройку? Почему вам очень нужен Wireguard?
                                  +2
                                  Непрактично для коммерческих сервисов, где действительно с этим проблема. Хотя даже уже сейчас уже есть образцы решения этих проблем — тот же NordVPN уже предлагает WG своим клиентам.

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

                                  Кроме того, скорость. Нет, СКОРОСТЬ. Условный Xiaomi MiR 3G за две тыщи вытягивает тунеллить более 200 мегабит, и это можно дополнительно улучшить ценой потери длины ключа.

                                  Иными словами, если не рентить сервис друзьям и знакомым, это более чем вменяемый кейс без недостатков IKE и OpenVPN.
                                0
                                В сетевых технологиях я профан, подскажите, ради интереса — если Я--вая контролирует абсолютно весь входящий и исходящий трафик в РФ, а VPN сервера находятся за контролируемой границей — насколько реально выявить адреса, 1 — на который приходит запрос изнутри контролируемой зоны, и затем 2 — который в течение N секунд отправляет запрос в контролируемую зону (если пользователь через такой VPN сервер работает с ресурсом внутри страны).

                                Как я понимаю, правило достаточно простое, и перелопатив кучу данных за достаточный период времени, мы можем выявить такую пару адресов.
                                  0

                                  То что вы описываете вполне возможно, тут я ответил подробнее. В реальности это предполагает очень сложную работу которую будут делать только в случае, если вы являетесь очень важным объектом для компетентных структур и никаких други способов у них нет. В этом случае намного проще затребовать все данные у хостера или дружественного государства.

                                    +1
                                    Если некто из-за double vpn выгрузил на youtube ролик размером в 1GB
                                    И в это же время (с точностью до секунд) у одного из клиентов good.citizen.vpn была активной сессия с исходящим траффиком около 1GB
                                    То эти 2 события могут быть обьединены.
                                      0
                                      То есть, надо грузить сразу несколько роликов на тот же или другой сервер.
                                        +3

                                        Ну, это легко обойти. Выгружаете ролик на свой VPS, затем, через час-два, выгружаете на видеохостинг, но уже с VPS. Корелляции по времени нет. Более того, при загрузке на VPS ролик можно сжать и разделить на части, а на сервевр распаковать — вот и по размеру никаких совпадений.

                                      0
                                      А ещё можно поставить дома и на сервере Yggdrasil, и подключаться по VPN через него.
                                        0
                                        На скорость это как повлияет?
                                          0
                                          Немного снизит, а насколько зависит от того, какой маршрут выберете.
                                        +1
                                        Имея массив метаданных для всех исходящих и входящих пакетов в масштабах страны, несложно ассоциировать good.citizen.vpn и super.cool.guy.vpn путем сопоставления времени и размера пакета. Вопрос лишь в рациональном хранилище и эффективной реализации простого алгоритма. Если оба источник и назначение «за забором» — тру анонимности с помощью впн типа «кащеевы яйца» не достигнуть.
                                          –2
                                          Мне вот интересно, что нет нигде простого как грабли метода:
                                          1) купил виртуалку с публичным айпи где-нибудь в условной Гаване
                                          2) настроил ssh по ключику с Dynamic Forward на порт, к примеру, 8383 (на винде можно Git Bash или Cygwin'ом)
                                          3) открыл любимый браузер Firefox\Waterfox\еще-какой-нибудь-фокс (там проще настроить) и в настройках прокси указываешь 127.0.0.1:8383 — и другие галочки вроде проксирования DNS по вкусу
                                          Все. Зачем VPN-то? Весь ваш траффик будет гулять как обычно, а один (или несколько) нужных браузеров будут показывать чудный внешний мир мимо всяких DPI и прочей мерзоты.
                                            0
                                            — разные IP входа-выхода, размышления о нескольких серверах…
                                            — сертификаты, подписываемые LE, а не свой CA (easy-rsa, модифицированный ValdikSS позволяет так же создавать практически одной командой)
                                            Серьезно?
                                              +1
                                              сертификаты, подписываемые LE, а не свой CA
                                              Серьезно?

                                              Чем по-вашему это угрожает? Вы опасаетесь, что ваш домен появится в логах certificate transparency или что? Можно использовать анонимный поддомен от sslip.io.
                                              К тому же, сертификат вам нужен только для точки входа, для выхода не нужен сертификат.


                                              Никакой дополнительной безопасности от собственного PKI вы не получите, а вот неудобств целую гору:


                                              • Попробуйте добавить в windows свой CA для ipsec, это очень приятный квест, который я не пожелаю никому проходить.
                                              • Держать в системной ключнице самоподписанные сертификаты я считаю плохой практикой, потому что это создает пользовательскую привычку, что непонятные CA в системе это норма. В итоге, со временем, из-за мусора из непонятных сертификатов можно не заметить там что-то постороннее.
                                              • Если вы используете аутентификацию по сертификату, то заблокировать пользователя это тоже непростая задача. Управлять листами отозванных сертификатов куда сложнее чем закомментировать одну строчку в ipsec.secrets

                                              Ну и банально, скинуть пользователю логин-пароль намного легче чем инструкции по накручиванию сертификатов в системе.

                                              0
                                              Мне понадобилось установить libcharon-extra-plugins, чтобы лебедь заработал
                                                0

                                                Это указано в статье. В остальном все получилось?

                                                  0
                                                  ну в Debian видимо надо отдельно поставить, а так да, работает. Пока не установил этот пакет, не авторизовался.
                                                0
                                                А что в этой схеме и у Strongswan вообще с обфускацией?
                                                  0

                                                  Ничего, будет видно что это ipsec трафик.

                                                    0
                                                    А в Китае, например, заблочат? Я использую ShadowSocks с плагином обфускации, вот и думаю — есть ли смысл заменить его на StrongSwan?
                                                      0
                                                      А в Китае, например, заблочат?

                                                      Обычно блочат. На сколько мне известно, shadowsocks тоже не панацея, потому что в Китае любые неопознанные соединения, через которые идет достаточно много трафика, шейпят так, чо ими потом нельзя пользоваться.

                                                        0
                                                        SS тем хорош, что его можно натравить только на нужные apps в андроид, будет бегать один телеграм, например. Ну или телега + facebook. Трафика там 0, обфускация есть, блочить не должны.
                                                          0
                                                          Не обязательно, чтобы через соединения шло много трафика :) В Китае также используют «Active probing» для любых неопознанных (шифрованных) соединений. Говоря простым языком — по адресу и порту назначения пытаются обратиться по какому-либо протоколу для анонимизации, например native Tor, obfs 2/3, VPN. И если ответ приходит в контексте протокола — блочат.
                                                          image

                                                          Более подробно можно почитать в whitepaper'e — Examining How the Great FirewallDiscovers Hidden Circumvention Servers
                                                          0
                                                          Нет никакого смысла заменять носки на лебедя, тем более без обфускации, тем более в Китае.

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

                                                    Самое читаемое