Как держать 20 тысяч VPN клиентов на серверах за $5

    Месяц назад мы с друзьями сделали бесплатный сервис для обхода блокировок сайтов в Украине Zaborona.Help. За это время сервис стал довольно популярным, аудитория выросла до 20 000 пользователей. Число одновременных подключений в пиковые часы — ≈6 000 клиентов.

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

    В статье описываются тонкости настройки OpenVPN для большого числа клиентов, на дешевых VPS.

    • Как выбрать подходящий хостинг. Отличительные черты плохого хостинга. История о том, как мы долго искали и нашли хостинг в России.
    • Почему IPv6 — хорошо. Правильная настройка IPv6-адресов для VPN-клиентов.
    • Изменение конфигурации OpenVPN на лету, без перезапуска сервера и отключения клиентов.
    • Балансировка нагрузки между серверами и процессами OpenVPN
    • Тонкая настройка Linux для большого числа подключений
    • Особенности кривых операционных систем и роутеров пользователей

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

    Хостинг


    Поначалу мы использовали несколько серверов в Европе у провайдеров Scaleway, Linode, DigitalOcean. Это были самые дешевые VPS, за $3-5. Сразу же пользователи начали жаловаться, что из-за европейских IP-адресов Яндекс.Музыка и музыка VK.com недоступна. Мы начали искать подходящий хостинг в СНГ.

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

    Отличительные черты убогого хостинга


    • Использование термина VDS вместо VPS. Хоть в самой аббревиатуре нет ничего страшного, это своего рода черная метка, которая практически гарантирует низкий уровень сервиса и интерфейс панели управления из 90-х годов.

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

    • Интерфейс панели управления BillManager
      Интерфейс панели управления BillManager — отличительная черта устаревшего хостинга

    • Непонимание принципов IPv6. Многие хостеры выделяют один IPv6-адрес и требуют плату за каждый дополнительный. Сеть /64 будет стоить квинтиллионы долларов.

    • Виртуализация OpenVZ.Большинство коммерческих VPS-провайдеров OpenVZ используют интерфейс venet, и панели, которые не позволяют назначать подсеть IPv6-адресов на отдельный контейнер, а только по одному отдельному адресу (/128) на интерфейс. Такие адреса нельзя нормально раздавать клиентам VPN.

    Попробовав несколько хостингов, мы почти отчаялись. Казалось, что в России просто не существует нормального хостинг-провайдера для наших нужд. Я разослал письмо всем хостерам, которых смог найти на сайтах-агрегаторах хостинга, в котором описал наши требования, и попросил бесплатно предоставить нам площадку в обмен на рекламу на нашем сайте.

    Наши требования к VPS-серверам


    • Виртуализация XEN или KVM. OpenVZ в большинстве случаев не позволяет нормально управлять IPv6-адресами, имеет ограничения на настройку переменных ядра (sysctl). Для некоторых нужд OpenVZ вполне пригоден, но не для большого и высоконагруженного VPN-сервера.

    • Мощный серверный процессор. Некоторые провайдеры, вроде Scaleway, предлагают бюджетные VPS-серверы на маломощных процессорах ARM или Intel Atom. Бывают даже серверы на процессорах VIA. На таких системах OpenVPN работает медленно, но не из-за шифрования, как можно было бы предположить. Модуль tun, который используется OpenVPN для создания сетевого интерфейса, не оптимизирован под высокие нагрузки: он принимает или отдает только один пакет за системный вызов, из-за чего происходит большое количество переключений контекста между режимом ядра и пользователя. Чем медленнее частота памяти и дешевле процессор, тем медленнее происходит переключение. Кроме того, в коде OpenVPN используются системные вызовы recv и send, оперирующие единичными сетевыми пакетами, из-за чего отправка зашифрованных пакетов тоже происходит не самым оптимальным образом. Поэтому для нормальной работы OpenVPN важно иметь быстрый процессор и память.

    • Безлимитный трафик и хорошие каналы. Пользователи потребляют много медиа-контента в социальных сетях, трафик расходуется очень быстро. Тарифы с низкой квотой трафика (1ТБ) расходуются за сутки.

    • Отдельная маршрутизируемая сеть IPv6 необходима для прямого выделения реальных адресов клиентам. Большинство хостеров даже не понимают, что это значит, и просто назначают на сетевом интерфейсе гипервизора требуемую подсеть, а не создают запись в таблице маршрутизации через существующую (или через link-local-адрес). Это не позволяет без костылей назначить выданный диапазон на сетевой интерфейс VPN и выдавать IPv6-адреса напрямую клиентам: гипервизор хостера отправит NDP-запрос (аналог ARP для IPv6) виртуальной машине, виртуалка не найдет у себя этот адрес, не ответит на запрос, и ничего не заработает. Существуют NDP-прокси, которые позволяют обойти эту проблему, но это неудобно, и из-за этого может создаваться дополнительная нагрузка на гипервизор и маршрутизаторы хостера.

    На наш запрос откликнулось около десятка компаний, но почти все из них имели признаки убогого хостинга и не подходили. В результате мы-таки нашли ЕДИНСТВЕННОГО хостинг-провайдера, удовлетворяющего всем нашим нуждам.

    Это звучит странно, но я готов аргументированно доказать в комментариях, что 99% отечественных хостеров — фуфло, недотягивающее до уровня Европы. Особенно буду рад пообщаться с представителями крупных компаний, вроде МастерХост, REG.ru, 1GB.ru, Timeweb.

    Как мы подружились с Veesp.com


    Настоящим открытием для нас стал хостер Veesp.com с датацентром в Санкт-Петербурге. Это единственный хостер, который знал как правильно готовить IPv6. На каждый VPS сервер выделяется сеть /64 и по запросу /56.

    У них есть две линейки тарифов VPS. Мы используем тариф «Storage 1», с безлимитным трафиком. Сервера на этом тарифе имеют процессор Intel Xeon X5650. Также есть линейка тарифов «Compute», с SSD диском, мощным процессором Intel Xeon E5v4 и памятью DDR4.

    Линейка тарифов Compute VPS провайдера Veesp.com
    Линейка тарифов Compute VPS провайдера Veesp.com

    Панель управления сравнима по удобству с DigitalOcean. Есть даже оплата через Bitcoin!

    На текущий момент мы полностью переехали на площадку Veesp.com и используем шесть серверов Storage 1 для OpenVPN. Музыка в VK и Яндексе снова работает, пользователи довольны.

    IPv6


    Я очень люблю IPv6. Он позволяет избавиться от кучи ненужных сущностей, вроде NAT и проброса портов. Для VPN он удобен тем, что каждый клиент ходит в интернет со своим реальным IP-адресом. К сожалению, многие хостинг-провайдеры и системные администраторы противятся и недолюбливают этот протокол, из-за этого его неправильно настраивают и используют.

    Самая распространенная ошибка — выдавать один IPv6-адрес на сервер.
    Сайт slash64.net посвященный этому заблуждению.

    Почему нужно выделять минимум /64 на каждый конечный узел


    • Для простоты. Согласно RFC 6177, сеть /64 является рекомендуемым блоком для всех конечных узлов, будь то домашний интернет или хостинг. Это 2⁶⁴, или восемнадцать квинтиллионов IP-адресов. Такой подход избавит от путаницы и угадывания, как именно настроена сеть на каждом отдельном узле.

    • Меньшее потребление памяти на маршрутизаторах. Сетевому администратору достаточно маршрутизировать на ваш одну большую подсеть, а не несколько мелких.

    • Не ломает протокол автоконфигурации SLAAC. Если вы, вдруг, захотите сделать полноценную локальную сеть (L2) поверх интернета, в ней будет корректно работать IPv6.

    • По логике Email-провайдеров, крупных сайтов вроде Google и Facebook, один клиент — одна /64 сеть. Поэтому, если хостер выдает разным клиентам адреса из одного диапазона /64, вас могут заблокировать за действия, которые совершили соседи по диапазону.

    • IPv6-адреса не должны продаваться поштучно. Это глупость, потому что минимальный рекомендованный блок /64, который должен выдаваться бесплатно, будет стоить квинтиллионы денег, даже если цена за один IP-адрес будет один рубль.

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

    Существует два распространенных варианта раздачи маршрутизируемах сетей.

    Первый вариант: одна /64 на сетевом интерфейсе, и /56, маршрутизируемая через первую /64. Вы можете побить /56 так, как вам хочется, либо же назначить всю /56 на интерфейс VPN.

    Второй вариант: одна или несколько /64 (или больше), маршрутизирутизируемая через link-local-адрес.

    У большинства хостеров выделенную сеть нужно заказывать отдельно. Veesp.com выдает блок /56 на каждый сервер бесплатно. К сожалению, даже продвинутые хостеры, вроде DigitalOcean, не предоставляют такой услуги. Здесь есть список хостеров, предоставляющих данную услугу version6.ru/vps, от @rm.

    NAT и Firewall


    На серверах забороны больше двух сотен правил iptables, по несколько на каждый диапазон из списка запрещенных в Украине сетей.

    Сложный набор правил неудобно обслуживать стандартными средствами iptables-save и iptables-restore, потому что в случае изменения одного правила, необходимо будет редактировать сотни однотипных строк.

    Упрощаем написание правил файрволла с помощью ferm


    Ferm — утилита для управления сложными правилами iptables со своим синтаксическим сахаром. Она позволяет создать удобочитаемую конфигурацию iptables, использовать переменные, массивы и циклы, но не ограничивает вас, в отличие от других надстроек над iptables: вы можете делать абсолютно все, использовать все возможности и модули netfilter.

    Простой пример: мы хотим заблокировать входящие соединения из нескольких тысяч сетей на трех сетевых интерфейсах eth0, eth1, eth2. В обычном случае нужно было бы написать тысячи одинаковых правил для каждого интерфейса.

    Вот как эта задача решается через ferm:

    @def $WAN_0 = eth0;
    @def $WAN_1 = eth1;
    @def $WAN_2 = eth2;
    
    @def $BLOCKED_NETWORKS = (
    123.123.123.123
    234.234.234.234
    ....
    );
    
    
    chain INPUT {
         saddr $BLOCKED_NETWORKS of ($WAN_0 $WAN_1 $WAN_2) DROP;
    }
    

    В результате будет создано правило для каждого адреса из $BLOCKED_NETWORKS на каждый сетевой интерфейс. Такая запись легко читается и занимает в три раза меньше строк. Ее проще редактировать.

    В нашем случае iptables выполняет три функции: NAT для IPv4-соединений, ограничение доступа в другие сети и балансировка нагрузки между процессами OpenVPN. Разберем каждую задачу подробно.

    NAT для IPv4-соединений


    Клиентам выдается «серый» IP-адрес из диапазона 192.168.*.*, поэтому маршрутизировать его напрямую в интернет нельзя. Для того, чтобы выпустить клиентов в IPv4-интернет, нужно использовать преобразование сетевых адресов (NAT).

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

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

    Ограничение доступа в другие сети


    Любой пользователь может добавить опцию redirect-gateway в конфиг OpenVPN и использовать наши сервера как маршрут по умолчанию. Нужно закрыть доступ ко всем сетям, кроме заблокированных в Украине.

    Балансировка нагрузки между процессами OpenVPN


    Архитектура OpenVPN однопоточная, поэтому один процесс демона OpenVPN использует только одно ядро процессора. Для лучшей утилизации всех ядер процессора, число процессов должно равняться количеству ядер на сервере. Балансировка между процессами выполняется с помощью модуля statistic, который случайном образом перенаправляет входящие подключения на разные внутренние порты.

    Балансировка между серверами


    Мы используем самый простой способ балансировки — с помощью множественных А-записей DNS. Все клиенты подключаются к серверу через доменное имя vpn.zaborona.help. Этот домен имеет шесть А-записей, которые направлены на все сервера. В итоге, в момент подключения, клиент выбирает случайный сервер из доступных. Так общее число подключений равномерно распределяется между всеми серверами. Конфигурация OpenVPN на всех серверах идентична, за исключением диапазонов IPv6-адресов, выдаваемых клиентам.

    image
    Панель управления DNS-записями. Балансировка с помощью множественых А-записей. Малое значение TTL позволяет быстро удалять адреса из общего списка.

    Можно быстро посмотреть, на какие IP-адреса резолвится домен из разных точек планеты, с помощью сервиса host-tracker.com, выбрав любой из тестов, например http или ping.

    Результат для домена vpn.zaborona.help: www.host-tracker.com/InstantCheck/ResultComplete/ec0e5a90-ed56-e711-b124-0003ff7328cc

    Рекурсивные DNS-резолверы


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

    Для решения этой проблемы ValdikSS написал патч для OpenVPN, блокирующий утечки DNS в Windows. Он использует Windows Filtering Platform — специальный слой файрволла Windows, позволяющий блокировать запросы к сторонним DNS, пока запущен OpenVPN.

    Разворачивание сервера


    В комментариях к предыдущей статье меня упрекали в том, что некоторые этапы, которые мне казались очевидными, не описаны. Здесь я опишу полный набор команд для разворачивания сервера забороны.

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

    Единственное уникальные данные для каждого сервера — подсеть IPv6, подписанная в конфигурационном файле OpenVPN.

    На серверах используется Ubuntu 16.04 LTS с ядром 4.4.0.

    Установка пакетов


    В репозитории дистрибутива содержится устаревшая версия OpenVPN 2.3, поэтому добавляем официальные репозитории проекта с OpenVPN 2.4. Все остальные пакеты ставим из стандартной поставки.

    wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add - 
    echo "deb http://build.openvpn.net/debian/openvpn/release/2.4 xenial main" > /etc/apt/sources.list.d/openvpn-aptrepo.list
    apt update
    apt upgrade
    apt install openvpn dnsmasq ferm
    

    Конфигурация OpenVPN


    Так как все сервера настроены идентично, просто копируем конфиги вместе с файлами ключей и сертификатам в папку /etc/openvpn. Никакой генерации ключей/сертификатов не выполняется. Число процессов OpenVPN настраивает по числу ядер на сервере, в нашем случае 2. Каждый отдельный процесс имеет свой конфиг: zaborona1.conf и zaborona2.conf.

    Чтобы избежать путаницы, я буду называть процессы OpenVPN демонами, но сути это несколько отдельных серверов, запущенных внутри одного VPS.

    Список файлов в /etc/openvpn

    /etc/openvpn/zaborona1.conf  # конфиг первого демона
    /etc/openvpn/zaborona2.conf  # конфиг второго демона
    
    /etc/openvpn/ccd/DEFAULT # файл с изменяемым на лету настройками для первого демона
    /etc/openvpn/ccd2/DEFAULT #  файл с изменяемым на лету настройками для второго демона
    
    /etc/openvpn/logs # папка с логами
    
    
    /etc/openvpn/ca.crt # корневой сертификат
    /etc/openvpn/zaborona.help.crt # сертификат сервера
    /etc/openvpn/zaborona.help.key # ключ сервера
    /etc/openvpn/dh2048.pem # файл с Diffie-Hellman группами (необходим для шифрования)
    

    Содержимое файлов:

    zaborona1.conf
    mode server
    # Несмотря на то, что протокол UDP быстрее, мы используем TCP для экономии трафика и аккумулятора мобильных уcтройств, так как в режиме UDP  клиент вынужден чаще посылать keep-alive пакеты, чтобы поддерживать NAT-трансляцию на роутере или CGNAT.
    proto tcp
    
    # Тип инкапсуляции L3, то есть ip уровень. Нам не нужен L2 уровень.
    dev-type tun
    # Имя tun-интерфейса на сервере
    dev zaborona1
    
    # Раздавать клиенту адреса из общей /24, а не резать на подсети /30.
    topology subnet
    
    # Диапазон "серых" ipv4-адресов, выдаваемых клиентам. 
    server 192.168.224.0 255.255.252.0
    # Диапазон реальных ipv6-адресов, выдаваемых клиентам. Уникален для каждого сервера.
    server-ipv6 2a00:1838:32:200::/112
    
    txqueuelen 250
    keepalive 300 900
    persist-tun
    persist-key
    
    cipher AES-128-CBC
    ncp-ciphers AES-128-GCM
    
    #user nobody
    duplicate-cn
    
    log logs/zaborona1.log
    status logs/status1.log 30
    
    # Путь к папке с конфигами пользователей. Эта опция позволяет назначить индивидуальные опции для каждого пользователя. Файл перечитывается заново при каждом подключении клиента, поэтому изменения можно выполнять без перезапуска сервера.
    client-config-dir ccd
    
    ca ca.crt
    cert zaborona.help.crt
    key zaborona.help.key
    dh dh2048.pem
    


    zaborona2.conf
    mode server
    port 1195
    proto tcp
    
    dev-type tun
    dev zaborona2
    
    topology subnet
    server 192.168.228.0 255.255.252.0
    server-ipv6 2a00:1838:32:280::/112
    
    txqueuelen 250
    keepalive 300 900
    persist-tun
    persist-key
    
    cipher AES-128-CBC
    ncp-ciphers AES-128-GCM
    
    #user nobody
    duplicate-cn
    
    log logs/zaborona2.log
    status logs/status2.log 30
    client-config-dir ccd2
    
    ca ca.crt
    cert zaborona.help.crt
    key zaborona.help.key
    dh dh2048.pem
    


    ccd/DEFAULT
    push "dhcp-option DNS 192.168.224.1"
    
    push "dhcp-option DNS 74.82.42.42" # HE.net DNS 
    push "route 74.82.42.42" # Route to HE.net DNS
    
    push "route 77.88.8.8" # Route to Yandex DNS
    
    push "dhcp-option DNS6 2001:4860:4860::8888" # Google IPv6 dns
    push "route-ipv6 2001:4860:4860::8888"
    
    push "dhcp-option DNS6 2001:4860:4860::8844" # Google IPv6 dns
    push "route-ipv6 2001:4860:4860::8844"
    
    #Persist TUN
    push "persist-tun"
    
    # Routes
    
    # Yandex network
    push "route 5.45.192.0 255.255.192.0"
    push "route 5.255.192.0 255.255.192.0"
    push "route 37.9.64.0 255.255.192.0"
    push "route 37.140.128.0 255.255.192.0"
    push "route 77.75.152.0 255.255.248.0"
    push "route 77.88.0.0 255.255.192.0"
    push "route 84.201.128.0 255.255.192.0"
    push "route 87.250.224.0 255.255.224.0"
    push "route 93.158.128.0 255.255.192.0"
    push "route 95.108.128.0 255.255.128.0"
    push "route 100.43.64.0 255.255.224.0"
    push "route 109.235.160.0 255.255.248.0"
    push "route 130.193.32.0 255.255.224.0"
    push "route 141.8.128.0 255.255.192.0"
    push "route 178.154.128.0 255.255.128.0"
    push "route 185.32.185.0 255.255.255.0"
    push "route 185.32.186.0 255.255.255.0"
    push "route 185.71.76.0 255.255.252.0"
    push "route 199.21.96.0 255.255.252.0"
    push "route 199.36.240.0 255.255.252.0"
    push "route 213.180.192.0 255.255.224.0"
    
    push "route-ipv6 2001:678:384::/48"
    push "route-ipv6 2620:10f:d000::/44"
    push "route-ipv6 2a02:6b8::/32"
    push "route-ipv6 2a02:5180::/32"
    
    # Mail.ru network
    push "route 5.61.16.0 255.255.248.0"
    push "route 5.61.232.0 255.255.248.0"
    push "route 79.137.157.0 255.255.255.0"
    push "route 79.137.183.0 255.255.255.0"
    push "route 94.100.176.0 255.255.240.0"
    push "route 95.163.32.0 255.255.224.0"
    push "route 95.163.248.0 255.255.248.0"
    push "route 128.140.168.0 255.255.248.0"
    push "route 178.22.88.0 255.255.248.0"
    push "route 178.237.16.0 255.255.240.0"
    push "route 185.5.136.0 255.255.252.0"
    push "route 185.16.148.0 255.255.252.0"
    push "route 185.16.244.0 255.255.252.0"
    push "route 188.93.56.0 255.255.248.0"
    push "route 194.186.63.0 255.255.255.0"
    push "route 195.211.20.0 255.255.252.0"
    push "route 195.211.128.0 255.255.252.0"
    push "route 195.218.168.0 255.255.255.0"
    push "route 208.87.92.0 255.255.252.0"
    push "route 217.20.144.0 255.255.240.0"
    push "route 217.69.128.0 255.255.240.0"
    push "route 185.6.244.0 255.255.252.0"
    push "route 185.30.176.0 255.255.252.0"
    push "route 195.218.190.0 255.255.254.0"
    
    push "route-ipv6 2a00:1148::/32"
    push "route-ipv6 2a00:a300::/32"
    push "route-ipv6 2a00:b4c0::/32"
    push "route-ipv6 2a04:4b40::/29"
    
    # VK.com network
    push "route 87.240.128.0 255.255.192.0"
    push "route 93.186.224.0 255.255.240.0"
    push "route 95.142.192.0 255.255.240.0"
    push "route 95.213.0.0 255.255.192.0"
    push "route 185.29.130.0 255.255.255.0"
    push "route 185.32.248.0 255.255.252.0"
    
    # Kaspersky network
    push "route 77.74.176.0 255.255.252.0"
    push "route 77.74.181.0 255.255.255.0"
    push "route 77.74.183.0 255.255.255.0"
    push "route 93.159.228.0 255.255.252.0"
    push "route 185.54.220.0 255.255.254.0"
    push "route 185.85.12.0 255.255.255.0"
    push "route 185.85.14.0 255.255.254.0"
    push "route 77.74.176.0 255.255.248.0"
    push "route 91.103.64.0 255.255.248.0"
    push "route 93.159.224.0 255.255.248.0"
    
    push "route-ipv6 2a03:2480::/33"
    
    # DrWeb
    push "route 178.248.232.183 255.255.255.255"
    push "route 178.248.233.94 255.255.255.255"
    push "route 195.88.252.0 255.255.254.0"


    ccd2/DEFAULT
    push "dhcp-option DNS 192.168.228.1"
    
    push "dhcp-option DNS 74.82.42.42" # HE.net DNS 
    push "route 74.82.42.42" # Route to HE.net DNS
    
    push "route 77.88.8.8" # Route to Yandex DNS
    
    push "dhcp-option DNS6 2001:4860:4860::8888" # Google ipv6 dns
    push "route-ipv6 2001:4860:4860::8888"
    
    push "dhcp-option DNS6 2001:4860:4860::8844" # Google ipv6 dns
    push "route-ipv6 2001:4860:4860::8844"
    
    #Persist TUN
    push "persist-tun"
    
    # Routes
    
    # Yandex network
    push "route 5.45.192.0 255.255.192.0"
    push "route 5.255.192.0 255.255.192.0"
    push "route 37.9.64.0 255.255.192.0"
    push "route 37.140.128.0 255.255.192.0"
    push "route 77.75.152.0 255.255.248.0"
    push "route 77.88.0.0 255.255.192.0"
    push "route 84.201.128.0 255.255.192.0"
    push "route 87.250.224.0 255.255.224.0"
    push "route 93.158.128.0 255.255.192.0"
    push "route 95.108.128.0 255.255.128.0"
    push "route 100.43.64.0 255.255.224.0"
    push "route 109.235.160.0 255.255.248.0"
    push "route 130.193.32.0 255.255.224.0"
    push "route 141.8.128.0 255.255.192.0"
    push "route 178.154.128.0 255.255.128.0"
    push "route 185.32.185.0 255.255.255.0"
    push "route 185.32.186.0 255.255.255.0"
    push "route 185.71.76.0 255.255.252.0"
    push "route 199.21.96.0 255.255.252.0"
    push "route 199.36.240.0 255.255.252.0"
    push "route 213.180.192.0 255.255.224.0"
    
    push "route-ipv6 2001:678:384::/48"
    push "route-ipv6 2620:10f:d000::/44"
    push "route-ipv6 2a02:6b8::/32"
    push "route-ipv6 2a02:5180::/32"
    
    # Mail.ru network
    push "route 5.61.16.0 255.255.248.0"
    push "route 5.61.232.0 255.255.248.0"
    push "route 79.137.157.0 255.255.255.0"
    push "route 79.137.183.0 255.255.255.0"
    push "route 94.100.176.0 255.255.240.0"
    push "route 95.163.32.0 255.255.224.0"
    push "route 95.163.248.0 255.255.248.0"
    push "route 128.140.168.0 255.255.248.0"
    push "route 178.22.88.0 255.255.248.0"
    push "route 178.237.16.0 255.255.240.0"
    push "route 185.5.136.0 255.255.252.0"
    push "route 185.16.148.0 255.255.252.0"
    push "route 185.16.244.0 255.255.252.0"
    push "route 188.93.56.0 255.255.248.0"
    push "route 194.186.63.0 255.255.255.0"
    push "route 195.211.20.0 255.255.252.0"
    push "route 195.211.128.0 255.255.252.0"
    push "route 195.218.168.0 255.255.255.0"
    push "route 208.87.92.0 255.255.252.0"
    push "route 217.20.144.0 255.255.240.0"
    push "route 217.69.128.0 255.255.240.0"
    push "route 185.6.244.0 255.255.252.0"
    push "route 185.30.176.0 255.255.252.0"
    push "route 195.218.190.0 255.255.254.0"
    
    push "route-ipv6 2a00:1148::/32"
    push "route-ipv6 2a00:a300::/32"
    push "route-ipv6 2a00:b4c0::/32"
    push "route-ipv6 2a04:4b40::/29"
    
    # VK.com network
    push "route 87.240.128.0 255.255.192.0"
    push "route 93.186.224.0 255.255.240.0"
    push "route 95.142.192.0 255.255.240.0"
    push "route 95.213.0.0 255.255.192.0"
    push "route 185.29.130.0 255.255.255.0"
    push "route 185.32.248.0 255.255.252.0"
    
    # Kaspersky network
    push "route 77.74.176.0 255.255.252.0"
    push "route 77.74.181.0 255.255.255.0"
    push "route 77.74.183.0 255.255.255.0"
    push "route 93.159.228.0 255.255.252.0"
    push "route 185.54.220.0 255.255.254.0"
    push "route 185.85.12.0 255.255.255.0"
    push "route 185.85.14.0 255.255.254.0"
    push "route 77.74.176.0 255.255.248.0"
    push "route 91.103.64.0 255.255.248.0"
    push "route 93.159.224.0 255.255.248.0"
    
    push "route-ipv6 2a03:2480::/33"
    
    # DrWeb
    push "route 178.248.232.183 255.255.255.255"
    push "route 178.248.233.94 255.255.255.255"
    push "route 195.88.252.0 255.255.254.0"
    


    Конфиги разных демонов отличаются только номером порта для входящих соединений и диапазоном IP-адресов, выдаваемых клиентам.

    Изменения настроек на лету с помощью client-config-dir


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

    Решением этой проблемы стала опция client-config-dir. Она используется для того, чтобы назначит индивидуальные настройки поименно каждому пользователю. Так как у нас все пользователи подключаются от имени одного клиента public, то файл один на всех <b>ccd/DEFAULT. Хитрость в том, что файл перечитывается заново при каждом подключении клиента и не требует перезапуска сервера для применения настроек.

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

    Ferm


    Настройки фаерволла идентичны на всех серверах, поэтому копируем файл /etc/ferm/ferm.conf без изменений. По-умолчанию, после установки, пакет ferm сразу активирует стандартный набор правил в котором запрещены все соединения, кроме SSH на 22 порту. Так что если у вас SSH сервер находится на другом порту, будьте аккуратны, чтобы не заблокировать себя.

    /etc/ferm/ferm.conf
    # Имена tun-интерфейсов из конфига OpenVPN. zaborona1, zaborona2 можно заменить на zaborona+.
    @def $VPN = (
    zaborona+
    );
    
    # Интерфейсы сервера, смотрящие в интернет
    @def $WAN_4 = eth0;
    @def $WAN_6 = eth0;
    
    
    # Диапазоны "серых" адресов, выдаваемых клиентам
    @def $VPN_ADDR_4 = (
    192.168.224.0/22
    192.168.228.0/22
    );
    
    
    @def $ALLOW_SSH = (
    Список адресов, с которых разрешено подключение по SSH
    );
    
    
    @def $ALLOWED_NETWORKS_V4 = (
    Список ipv4-сетей, заблокированных в Украине
    );
    
    @def $ALLOWED_NETWORKS_V6 = (
    Список ipv6-сетей, заблокированных в Украине
    );
    
    table filter {
      chain ZABORONA_V4 {
          daddr $ALLOWED_NETWORKS_V4 ACCEPT;
      }
      chain FORWARD {
          policy DROP;
          mod conntrack ctstate INVALID DROP;
          if $WAN_4 of $VPN mod conntrack ctstate (ESTABLISHED RELATED) ACCEPT;
          if $VPN of $WAN_4 jump ZABORONA_V4;
      }
      chain INPUT {
          saddr $ALLOW_SSH protocol tcp dport 22 ACCEPT;
          protocol tcp dport 22 REJECT reject-with icmp-port-unreachable;
      }
    }
    
    table nat {
       chain POSTROUTING {
           saddr $VPN_ADDR_4 of $WAN_4 MASQUERADE;
       }
      # Балансировка меджду демонами OpenVPN
       chain PREROUTING {
           interface $WAN_4 protocol tcp dport 1194 mod conntrack ctstate NEW mod statistic mode random probability 0.50000000000 REDIRECT to-ports 1195;
        }
    }
    
    # IPv6:
    domain ip6 {
       table filter {
           chain ZABORONA_V6 {
               daddr $ALLOWED_NETWORKS_V6 ACCEPT;
           }
           chain FORWARD {
               policy DROP;
               mod conntrack ctstate INVALID DROP;
               if $WAN_6 of $VPN mod conntrack ctstate (ESTABLISHED RELATED) ACCEPT;
               if $VPN of $WAN_6 jump ZABORONA_V6;
               
           }
       }
    }
    


    Для сравнения, вот как выглядит тот же набор правил, полученный через iptables-save:

    iptables-save
    # Generated by iptables-save v1.6.0 on Fri Jun 23 19:44:10 2017
    *filter
    :INPUT ACCEPT [54622:15244109]
    :FORWARD DROP [50:2520]
    :OUTPUT ACCEPT [59291:85277655]
    :ZABORONA_V4 - [0:0]
    -A INPUT -s 1.2.3.4/32 -p tcp -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 22 -j REJECT --reject-with icmp-port-unreachable
    -A FORWARD -m conntrack --ctstate INVALID -j DROP
    -A FORWARD -i eth0 -o zaborona+ -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    -A FORWARD -i zaborona+ -o eth0 -j ZABORONA_V4
    -A ZABORONA_V4 -d 87.240.128.0/18 -j ACCEPT
    -A ZABORONA_V4 -d 93.186.224.0/20 -j ACCEPT
    -A ZABORONA_V4 -d 95.142.192.0/20 -j ACCEPT
    -A ZABORONA_V4 -d 95.213.0.0/18 -j ACCEPT
    -A ZABORONA_V4 -d 185.29.130.0/24 -j ACCEPT
    -A ZABORONA_V4 -d 185.32.248.0/22 -j ACCEPT
    -A ZABORONA_V4 -d 5.45.192.0/18 -j ACCEPT
    -A ZABORONA_V4 -d 5.255.192.0/18 -j ACCEPT
    -A ZABORONA_V4 -d 37.9.64.0/18 -j ACCEPT
    -A ZABORONA_V4 -d 37.140.128.0/18 -j ACCEPT
    -A ZABORONA_V4 -d 77.75.152.0/21 -j ACCEPT
    -A ZABORONA_V4 -d 77.88.0.0/18 -j ACCEPT
    -A ZABORONA_V4 -d 84.201.128.0/18 -j ACCEPT
    -A ZABORONA_V4 -d 87.250.224.0/19 -j ACCEPT
    -A ZABORONA_V4 -d 93.158.128.0/18 -j ACCEPT
    -A ZABORONA_V4 -d 95.108.128.0/17 -j ACCEPT
    -A ZABORONA_V4 -d 100.43.64.0/19 -j ACCEPT
    -A ZABORONA_V4 -d 109.235.160.0/21 -j ACCEPT
    -A ZABORONA_V4 -d 130.193.32.0/19 -j ACCEPT
    -A ZABORONA_V4 -d 141.8.128.0/18 -j ACCEPT
    -A ZABORONA_V4 -d 178.154.128.0/17 -j ACCEPT
    -A ZABORONA_V4 -d 185.32.185.0/24 -j ACCEPT
    -A ZABORONA_V4 -d 185.32.186.0/24 -j ACCEPT
    -A ZABORONA_V4 -d 185.71.76.0/22 -j ACCEPT
    -A ZABORONA_V4 -d 199.21.96.0/22 -j ACCEPT
    -A ZABORONA_V4 -d 199.36.240.0/22 -j ACCEPT
    -A ZABORONA_V4 -d 213.180.192.0/19 -j ACCEPT
    -A ZABORONA_V4 -d 5.61.16.0/21 -j ACCEPT
    -A ZABORONA_V4 -d 5.61.232.0/21 -j ACCEPT
    -A ZABORONA_V4 -d 79.137.157.0/24 -j ACCEPT
    -A ZABORONA_V4 -d 79.137.183.0/24 -j ACCEPT
    -A ZABORONA_V4 -d 94.100.176.0/20 -j ACCEPT
    -A ZABORONA_V4 -d 95.163.32.0/19 -j ACCEPT
    -A ZABORONA_V4 -d 95.163.248.0/21 -j ACCEPT
    -A ZABORONA_V4 -d 128.140.168.0/21 -j ACCEPT
    -A ZABORONA_V4 -d 178.22.88.0/21 -j ACCEPT
    -A ZABORONA_V4 -d 178.237.16.0/20 -j ACCEPT
    -A ZABORONA_V4 -d 185.5.136.0/22 -j ACCEPT
    -A ZABORONA_V4 -d 185.16.148.0/22 -j ACCEPT
    -A ZABORONA_V4 -d 185.16.244.0/22 -j ACCEPT
    -A ZABORONA_V4 -d 188.93.56.0/21 -j ACCEPT
    -A ZABORONA_V4 -d 194.186.63.0/24 -j ACCEPT
    -A ZABORONA_V4 -d 195.211.20.0/22 -j ACCEPT
    -A ZABORONA_V4 -d 195.218.168.0/24 -j ACCEPT
    -A ZABORONA_V4 -d 217.20.144.0/20 -j ACCEPT
    -A ZABORONA_V4 -d 217.69.128.0/20 -j ACCEPT
    -A ZABORONA_V4 -d 195.211.128.0/22 -j ACCEPT
    -A ZABORONA_V4 -d 208.87.92.0/22 -j ACCEPT
    -A ZABORONA_V4 -d 77.74.176.0/22 -j ACCEPT
    -A ZABORONA_V4 -d 77.74.181.0/24 -j ACCEPT
    -A ZABORONA_V4 -d 77.74.183.0/24 -j ACCEPT
    -A ZABORONA_V4 -d 93.159.228.0/22 -j ACCEPT
    -A ZABORONA_V4 -d 185.54.220.0/23 -j ACCEPT
    -A ZABORONA_V4 -d 185.85.12.0/24 -j ACCEPT
    -A ZABORONA_V4 -d 185.85.14.0/23 -j ACCEPT
    -A ZABORONA_V4 -d 77.74.176.0/21 -j ACCEPT
    -A ZABORONA_V4 -d 91.103.64.0/21 -j ACCEPT
    -A ZABORONA_V4 -d 93.159.224.0/21 -j ACCEPT
    -A ZABORONA_V4 -d 8.8.8.8/32 -j ACCEPT
    -A ZABORONA_V4 -d 8.8.4.4/32 -j ACCEPT
    -A ZABORONA_V4 -d 74.82.42.42/32 -j ACCEPT
    -A ZABORONA_V4 -d 77.75.152.0/21 -j ACCEPT
    -A ZABORONA_V4 -d 185.71.72.0/21 -j ACCEPT
    -A ZABORONA_V4 -d 185.6.244.0/22 -j ACCEPT
    -A ZABORONA_V4 -d 185.30.176.0/22 -j ACCEPT
    -A ZABORONA_V4 -d 195.218.190.0/23 -j ACCEPT
    -A ZABORONA_V4 -d 195.88.252.0/23 -j ACCEPT
    -A ZABORONA_V4 -d 178.248.232.183/32 -j ACCEPT
    -A ZABORONA_V4 -d 178.248.233.94/32 -j ACCEPT
    COMMIT
    # Completed on Fri Jun 23 19:44:10 2017
    # Generated by iptables-save v1.6.0 on Fri Jun 23 19:44:10 2017
    *nat
    :PREROUTING ACCEPT [917:61256]
    :INPUT ACCEPT [430:26400]
    :OUTPUT ACCEPT [122:8320]
    :POSTROUTING ACCEPT [122:8320]
    -A PREROUTING -i eth0 -p tcp -m tcp --dport 1194 -m conntrack --ctstate NEW -m statistic --mode random --probability 0.50000000000 -j REDIRECT --to-ports 1195
    -A POSTROUTING -s 192.168.224.0/22 -o eth0 -j MASQUERADE
    -A POSTROUTING -s 192.168.228.0/22 -o eth0 -j MASQUERADE
    COMMIT
    # Completed on Fri Jun 23 19:44:10 2017
    


    Балансировку между демонами выполняет это правило:

    -A PREROUTING -i eth0 -p tcp -m tcp --dport 1194 -m conntrack --ctstate NEW -m statistic --mode random --probability 0.50000000000 -j REDIRECT --to-ports 1195
    

    С 50% вероятностью подключения к порту 1194 перенаправляются на порт 1195. Так, подключения равномерно распределяются между двумя процессами OpenVPN. Если бы процессов было больше, нужно было бы добавить дополнительные правила на каждый процесс и изменить вероятность срабатывания каждого правила.

    Кеширующий резолвер dnsmasq


    По-умолчанию dnsmasq принимает запросы только с локального интерфейса 127.0.0.1, поэтому разрешаем запросы с адресов VPN клиентов и устанавливаем размер DNS-кеша.

    /etc/dnsmasq.d/zaborona

    listen-address=127.0.0.1,192.168.224.1,192.168.228.1
    cache-size=1000
    

    sysctl


    Файл systctl.conf с настройками ядра. В нем включаем форвардинг IP-пакетов и другие опции для оптимизации системы под VPN сервер.

    /etc/sysctl.conf
    # Включаем форвардинг ipv4 и ipv6 пакетов
    net.ipv4.ip_forward=1
    net.ipv6.conf.all.forwarding=1
    
    net.netfilter.nf_conntrack_max=65535
    net.netfilter.nf_conntrack_generic_timeout = 600
    net.netfilter.nf_conntrack_icmp_timeout = 30
    net.netfilter.nf_conntrack_tcp_timeout_close = 10
    net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
    net.netfilter.nf_conntrack_tcp_timeout_established = 1800
    net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
    net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
    net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
    net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
    net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120
    net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
    net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
    net.netfilter.nf_conntrack_udp_timeout = 60
    net.netfilter.nf_conntrack_udp_timeout_stream = 180
    net.ipv4.tcp_slow_start_after_idle = 0
    net.ipv4.tcp_fastopen = 3
    net.ipv4.tcp_rmem = 4096 262143 4194304
    net.core.rmem_max = 4194304
    net.core.rmem_default = 262143
    net.ipv4.tcp_wmem = 4096 262143 4194304
    net.core.wmem_max = 4194304
    net.core.wmem_default = 262143
    net.ipv4.tcp_keepalive_time = 600
    net.ipv4.tcp_keepalive_intvl = 90
    net.ipv4.tcp_keepalive_probes = 5
    net.ipv4.tcp_congestion_control=bbr
    net.ipv6.conf.default.accept_redirects = 0
    net.ipv6.conf.all.accept_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    net.ipv4.conf.default.accept_redirects = 0
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.all.secure_redirects = 0
    net.ipv4.conf.default.secure_redirects = 0
    net.ipv4.conf.all.rp_filter = 1
    net.ipv4.conf.default.rp_filter = 1
    net.ipv4.icmp_ignore_bogus_error_responses = 1
    net.ipv4.conf.all.accept_source_route = 0
    net.ipv4.conf.default.accept_source_route = 0
    net.ipv6.conf.all.accept_source_route = 0
    net.ipv6.conf.default.accept_source_route = 0
    net.ipv6.conf.all.use_tempaddr = 2
    


    Старт сервисов


    После того, как все сервисы настроены, можно добавить их старт в автозагрузку.

    Предварительно увеличиваем лимит на число открытых файловых дескрипторов для процессов OpenVPN, иначе при большом числе клиентов мы их превысим и получим ошибку Too many open files из-за большого числа открытых сокетов.

    systemctl edit openvpn@.service 
    
    [Service]       
    LimitNOFILE=8192
    

    # Перечитываем стартовые скрипты, чтобы изменения вступили в силу.
    systemctl daemon-reload
    
    # Добавляем в автозагрузку и сразу стартуем оба процесса OpenVPN.
    systemctl enable --now openvpn@zaborona1
    systemctl enable --now openvpn@zaborona2  
    
    # Перезапускаем сервисы dnsmasq и ferm. Они добавлены в автозагрузку по умолчанию после установки.
    systemctl restart dnsmasq
    systemctl restart ferm
    

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

    Сломанные ОС пользователей


    У значительной доли пользователей оказались устаревшие, сломанные ОС. Очень часто в системе сломана поддержка IPv6, например во многих сборках Windows 7 «от Васяна с rutracker», где отключены автоматические обновления системы. Мы завели Wiki на Github, в которую пользователи самостоятельно могут добавлять инструкции. Там описаны решения некоторых распространенных проблем.

    Вот наиболее типичные случаи кривого пользовательского окружения:

    Windows XP


    Несмотря на то, что поддержка этой OC закончилась ВОСЕМЬ лет назад, ее по-прежнему используют. На ней не работет много современных программ, веб-браузеры, а также последняя версия OpenVPN 2.4. Этой теме посвящена отдельная статья в нашей Wiki.

    Windows 7


    У многих пользователей отключены автоматические обновления Windows. Почему-то, в такой конфигурации на Windows 7 часто ломается IPv6. При подключении в логах OpenVPN появляется такая ошибка:

     NETSH: C:\WINDOWS\system32\netsh.exe interface ipv6 set address interface=32 2a00:1838:30:7280::1149 store=active
    ERROR: netsh command failed: returned error code 1
    

    Причину этой аномалии не удалось выяснить. Зато у Microsoft есть специальная утилита на такой случай — IPv6 Re-enabler. Ссылка на скачивание внизу с подписью «Re-enable IPv6 on nontunnel interfaces and on IPv6 tunnel interfaces»

    Android 4.4 и другие


    Каждый вендор ломает VPN Framework в Android по-своему. Многие сборки Android имеют проблемы, которые не поддаются объяснению, например часто жалуются на то, что при подключенном VPN DNS запросы выполняются по несколько секунд. В Android 4.4 полностью сломан VPN.

    Mikrotik


    В RouterOS есть поддержка OpenVPN. К сожалению она чаще не работает, чем работает. Статья посвященная проблеме Mikrotik.

    Мы отказались ломать наши сервера, чтобы сделать их совместимыми с багами Mikrotik, и предложили пользователям писать баг-репорты в компанию Miktorik. В результате было выпущено несколько исправлений в версии RouterOS 6.40rc24.

    What's new in 6.40rc24 (2017-Jun-20 09:38):
    *) ovpn - added support for topology subnet for IP mode;
    *) ovpn - added support for "push-continuation";
    *) ovpn - fixed duplicate default gateway presence when receiving extra routes;  
    

    Хотя по сообщениям пользователей, проблема так и не решена полностью. Советую всем заинтересованным лицам продолжить отправлять баг-репорты в Mikrotik до полного решения проблемы.
    Support the author
    Share post

    Similar posts

    Comments 149

      0

      В избранное :)

        +1
        Аналогичная история с ДЦ в США. Можно найти приличный колокейшн и облака (Амазон, МС), все остальное — фуфло с завышенными ценниками (всякие «сервера у Джо» в каком-нибудь Канзасе, не то что с устаревшим интерфейсом, а просто номером телефона для связи). Подозреваю что на каком-то этапе AWS просто всех выкосил. Среднему бизнесу довольно тяжко (или может у меня просто задачи очень специфичные).
          +1
          А кому легко? Нормально делай — нормаульно будет!
            +1
            Из всех зарубежных хостеров, мне очень нравится Linode. Они настоящие профессионалы, за несколько лет никаких проблем. Всегда компетентная поддержка и качественные услуги. К сожалению нет тарифов с безлимитным трафиком. Veesp.com тоже молодцы, цены ниже чем у Linode и DigitalOcean при сравнимом качестве.
              0
              Linode и DigitalOcean — только виртуалки, т.е. про высокие нагрузки можно забыть. Ну и объема трафа там копейки — 10ТБ в месяц макс. За превышение — цена 20$\Тб, т.е. за скажем 30ТБ трафа в месяц (это 100 мбит\с 24\7) нода станет в $500.

              У Veesp-а нижний ценник на дедик — $120, там сразу идет 16GB и мощный проц, т.е. брать их целесообразно только под виртуалки, опять же.
                +1
                Linode и DigitalOcean — только виртуалки, т.е. про высокие нагрузки можно забыть.

                У Linode есть виртуалки и за $1000 в месяц с 200GB RAM. Насчет трафика Вы правы. Но хочу заметить, что это качественные каналы и гарантированная полоса. Например, когда мы еще держали сервера в Европе, пользователи жаловались на сервер Scaleway у которого хоть и безлимитный трафик, но реальная ширина канала значительно ниже заявленой. Так что для продакшена я предпочту хостинг с ограниченной квотой трафика, но предсказуемым качеством сети.

                У Veesp-а нижний ценник на дедик — $120

                Я не знаю кому сегодня нужны bare metal сервера. Видимо тем, кому нравится переживать о ломающихся жестких дисках и писать в поддержку письма с просьбой поменять HDD на сервере. Я не спорю, что для некоторых задач выделенные сервера нужны, но на них обычно тоже ставят гипервизор и оперируют внутри виртуалками. Это проще и быстрее.
                  0
                  >Я не знаю кому сегодня нужны bare metal сервера
                  На самом деле много сегментов: игровые сервера, рекламные сети, в целом — везде где сетевая подсистема является узким местом. Из всех опробованных виртуальных сетевых интерфейсов (vmware, xen и пр.) ни один не дотягивал и до трети возможностей хорошей железки. Можно, конечно, взять три виртуальных сервера, вместо одной физической машины, но вот сейчас, например, у нас около 70 физических серверов (4 ядра\8Гиг оперативы, 30ТБ трафа на машину), по цене $75\мес. Аналог в DigitalOcean (4 ядра\8гиг\5Тб) стоит столько же. Умножаем на три, чтоб держать те же нагрузки. Получаем расход на хостинг 15К\мес (вместо текущих 5К на baremetal серверах). Т.е. отвечая на вопрос — bare metal сервера жизненно необходимы средним бизнесам, облака, к сожалению, подходят либо для очень мелких либо очень крупных бизнесов.
                  По поводу ломающихся дисков — не встречал конфигураций (кроме совсем запущенных случаев) с одним диском, а когда два диска в зеркале и мониторинг — то переживать не о чем.
                    0
                    Смотрели на Носикс?
                      0
                      Хм нет, не знаком. Судя по локации, они реселят S4U. На S4U мы жили первые три года, пока не осознали, насколько порезанные у них сети, причем как в VIP (ServerLoft) так и в бюджетном варианте.
                        0
                        Извините, я не знаю, что такое S4U. Можете просветить?
              +1
              OVH в Канаде имеет ДЦ и продолжают расширяться. Цены там вполне приятные.
                  0

                  OVH Public cloud — /56 для IPv6

                  0
                  OVH был бы идеальным провайдером дедиков — отличное Intel-овское железо (материнки и лучшие сетевые карточки из всех что встречал), сказочные цены, более-менее вменяемый суппорт. Но их идиотский фаервол просто говорит вам «Нет», если у вас нагрузки от 100мбит\с и много мелких пакетов. Были даже попытки кастомизации под нас, как под крупного клиента, но в итоге мы проиграли битву с их великим фаерволом и потеряли несколько важных клиентов.
                    0
                    Скорее не фаервол, а антиддос. Мы в свое время из-за него туда ушли, но у нас просто сайт был (который ддосили неделями до этого и hetzner нам просто доступ к серваку вырубил из-за 6гбит ддоса).
                  0
                  Посмотрите https://www.1and1.com/, у нас там дедик, пол года полет отличный ))
                  0
                  На самом деле при выборе хостера нужно отталкиваться от поставленных задач.

                  Вам нужен безлимтный трафик — а я никогда не превышал этот 1 Тб в месяц.
                  Виртуализацию выбирает 1 человек из 100 и то в лучшем случае. Остальные просто не знают между ними разницу, да оно им и не нужно.

                  Не рекламы ради, но мне например нравится Vscale. Все шустро, дешево. Меня устраивает. И, да, я понятия не имею чем там делается виртуализация, хотя при выборе тафира кажется было написано.

                  Это что касается фразы «99% хостеров фуфло». Они просто не под ваши задачи, т.к. таких как вы менее 1% от общей массы клиентов.

                  P.S. Я не защищаю перечисленных 1Gb, Mh, reg.ru и прочую нечисть. Они совсем другая история.
                    0
                    Отчасти согласен. В статье описаны именно наши требования под VPN сервера. Мне кажется странным, когда в целой стране отсутствует хостинг под эту задачу, тем более что она вполне стандартная. Особенно раздражают ситуации, когда нужно пройти десять экранов заказа сервера и идти в отдельную панель чтобы включить его после покупки.

                    В reg.ru, кстати, раздражает, что после покупки сервера в почтовом ящике оказывается десять писем вроде «Вы успешно заказали сервер, вы успешно оплатили, сервер успешно загрузился, все хорошо, сервер работает, поздравляем все хорошо»

                      0
                      Vscale нам тоже советовали. Возможно он вполне хороший. Есть информация о том, как у них с IPv6?
                        0
                        Пока вообще никак.

                        Я бы еще на servers.com посмотрел
                          0
                          Можем спросить об этом amarao
                            +1
                            IPv6 мы делаем по запросу, в основном в приватных регионах. Выкатывание в паблик осложняется уязвимостью в openstack, позволяющей одному тенанту подделать RA для другого тенанта.

                            https://bugs.launchpad.net/bugs/1685237

                            Ждём фикса.
                      +3
                      ISPmanager действительно не очень удобная панель, вспоминаю как мучался с ней лет 7 назад, когда она была на пике популярности. Странно, что нормальных аналогов до сих пор никто не придумал.
                        0
                        Odin.
                          0
                          Есть еще всякие SolusVM.
                          –1

                          Нормальный аналог уже есть — ssh и конфиги а также ansible
                          Тут ситуация как с говнофорумами на php — те кто знают как сделать нормально им не нужно

                            +2
                            Я имел в виду не только ISP, но и сам биллинг. А рядовому пользователю, чтобы добавить какой-нибудь сайт на php, знать ssh думаю не обязательно.
                          0
                          У veesp в описании storage-виртуалок речь идёт об ограничении в 100мбит. Неужели все эти 20 тысяч клиентов, даже поделенные на 6 серверов, умещаются в 100(600) Мбит? И локальный трафик внутри виртуалок тоже на 100Мбит-скорости?
                            0
                            Неужели все эти 20 тысяч клиентов, даже поделенные на 6 серверов, умещаются в 100(600) Мбит?

                            Число одновременных подкючений в пиковые часы примерно 6 тысяч, то есть по тысяче на каждый сервер. Мы не пускаем через себя весь трафик, а только к заблокированным сетям, так что хватает. Не смотря на то, что днем каналы нагружены почти полностью, пользователи не жалуются на скорость. Вот как это выглядит на одном сервере:
                            image
                            0
                            А почему вы искали хостинг именно в России? Не лучший вариант для обхода блокировок — в России свои собственные блокировки — эдак получается из огня да в полымя. Я бы скорее смотрел на такие страны, как Германия, Нидерланды. Правда, в Европе есть другая проблема… Найти безлимитный трафик с нормальной скоростью по-моему невозможно. Знает ли кто-нибудь подобный хостинг в европейских странах, при этом с безлимитным трафиком, всеми требованиями перечисленными здесь, и достаточно либеральным отношением к не всегда лицензионно чистым торрентам?
                              +3
                              Потому что для европейских IP-адресов заблокирована Яндекс.Музыка и значительная часть музыки в VK. Это написано в статье. Наш сервис позволяет обойти именно блокировки в Украине. Так что сервера в России для этого отлично подходят. Мы маршрутизируем через себя только заблокированные сети, весь остальной трафик идет напрямую через основной интернет пользователя. Так что блокировки в РФ нас никак не затрагивают.
                                0
                                Scaleway оказался очень даже неплохим хостером с безлимитом и хорошей скоростью. Да, по железу там Atom'ы, но нам зашло, например. Ничего не могу сказать насчет IPv6, но ТС пишет, что использовали в том числе Scaleway, так что должно быть всё в порядке.
                                  0
                                  Scaleway на тарифе «Starter Cloud» за €2.99 начинал тормозить уже при 100 одновременных подключениях. Полагаю что это из-за слабого процессора и медленной памяти. IPv6 они не умеют нормально, выдают 1 адрес на сервер. При заявленных 200Mbit/s скорость не поднималась выше 100Mbit/s. Так что мы быстро от них отказались.
                                    0
                                    Вероятно, тормоза связаны с ARM-процессором. Про пропускную способность ничего сказать не могу. Мы пробовали только C2S тариф за €11.99, и скорость соответствует заявленной. В общем, я ничего не могу сказать про десятки хостеров, но после пары российских и одного Digital Ocean, Scaleway мне лично показался очень годным.
                                      0
                                      Вероятно, тормоза связаны с ARM-процессором.

                                      У нас был x86 Atom в Париже.
                                        0
                                        А, прошу прощения. Я почему-то думал, что за 2.99 там только ARM, но ошибся. Может как-то связано именно с тем, что у вас виртуалка. Может и нет. У нас «baremetal cloud server». В Амстердаме, кстати. В любом случае, спасибо за исследование и статью.
                                +1
                                Пятничный торт. Все больше режимов блокируют доступ к информации, заставляя компании цензурировать сетевой контент в том или ином виде. Ваш сервис решил проблему в Украине и обрел другой веер блокировок уже на территории РФ. Заставляет задуматься о недалеком будущем и глобальной сети VPN в разных юрисдикциях. Эдакий uncensored оверлей поверх Internet.
                                  +1
                                  Мы маршрутизируем через наши сервера только трафик к заблокированным сайтам. Блокировки в РФ нас не касаются https://habrahabr.ru/post/331178/#comment_10280266
                                    0
                                    Хорошо! А то в новостях пишут, что парламент РФ уже запретил «средства для обхода заблокированных ресурсов»
                                      0
                                      парламент РФ уже запретил «средства для обхода заблокированных (на территории РФ) ресурсов»

                                      Я про юрисдикции. Очевидно что на украинские блокировки плевать.
                                  0

                                  А можно выдавать клиентам OpenVPN адреса не из подсети, а из определённого списка адресов?


                                  Пользуюсь как раз таким провайдером, который раздаёт пулы из 32 адресов на одну виртуалку. Может дело в OpenVZ, но это не особо важно, так как одновременно всё равно не более одного-двух устройств подключено.

                                    +1
                                    Можно, с костылями. Клиентам OpenVPN выдавайте адреса из диапазона ULA, и сделайте NAT one-to-one:

                                    # ip6tables -t nat -I PREROUTING -s ВНЕШНИЙ_АДРЕС/128 -j DNAT --to ULA_АДРЕС_КЛИЕНТА/128
                                    # ip6tables -t nat -I POSTROUTING -s ULA_АДРЕС_КЛИЕНТА/128 -j SNAT --to ВНЕШНИЙ_АДРЕС/128

                                    Попутно нужно включить маршрутизацию IPv6 через sysctl и убедиться, что правила в таблице FORWARD разрешают ее.
                                    –3

                                    хм, а блокировками на родине вы так же обеспокоены? zapret.help что-то не вижу

                                      +4
                                      Моя родина — Украина. Живу я при этом в Израиле. Для обхода блокировок в РФ есть аналогичный сервис https://antizapret.prostovpn.org/
                                        0
                                        А в Израиле есть что-нибудь подобное? Блокировки?
                                      0
                                      Хостинг jino не рассматривали?
                                        +1
                                        Что это значит? На тарифе за 99₽ нет-IP адреса? Не понимаю
                                        image
                                          0
                                          Так рассматривали или нет? Или у вас бюджет 100 рублей и рассмотреть не получилось?
                                            0
                                            Вы сотрудник jino.ru? Я не понял несколько моментов. Что такое общий IP? Мне дадут какой-то порт на этом общем IP или что это значит?

                                            При создании виртуального сервера ему бесплатно назначается IP-адрес, разделяемый с другими пользователями. На тарифах «Бета» и «Гамма» дополнительно можно приобрести до 3-х выделенных IP на каждую виртуальную машину. Стоимость каждого дополнительного адреса — всего 89 ₽ в месяц. А если в выделенном IP нет необходимости, вы экономите, не покупая его.
                                            


                                            Нет информации о скорости сети на VPS и глупое требование к соотношению трафика:
                                            
                                            На «Джино» нет ограничений по общему объему передаваемого трафика, но есть ограничение по его соотношению: объем входящего трафика не должен превышать 1/4 от объема исходящего. Стоимость превышения входящего трафика составляет 38 руб. за 1 Гб (полный или неполный).
                                            


                                            То есть я могу выровнять вручную чтобы не платить лишнего?
                                              –3
                                              Нет, конечно, никакой я не сотрудник. Мне интересно, смотрели или нет, так как сам им пользуюсь, но по мелочам. Общий IP — чесслово хз. Наверное один IP ведет на несколько VPS.

                                              Нет информации о скорости сети на VPS

                                              Наверное, сколько получится, я не замерял, но сайт быстро грузится.

                                              То есть я могу выровнять вручную чтобы не платить лишнего?

                                              Получается что так, хотя я бы ждал тут подвох 100%.
                                                0
                                                Худших услуг я уже довольно давно не видел.
                                                  0

                                                  Да, чёт отстой какой-то. Хотя хуже можно найти.

                                                0
                                                объем входящего трафика не должен превышать 1/4 от объема исходящего
                                                Hetzner'ом запахло…
                                              +2

                                              Ну хоть контрольная панель бесплатно, крайне щедрое предложение

                                                0
                                                Чем отличается виртуальный сервер с панелью «Джино» от сервера без нее?

                                                Виртуальный сервер с панелью «Джино» отличается простотой администрирования. Вам доступен файловый менеджер, возможность управления базами данных, FTP-сервер и т. д., то есть полноценно настроенный сервер, который уже готов к работе. На сервере без нашей панели подобного функциональности нет, все управление производится через SSH-доступ, и он не имеет первоначальной настройки.
                                                Ну Вы поняли… :))))
                                            0
                                            Использую Ваш сервис уже пару недель, очень нравится

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

                                            У меня таких проблем нету. Сам по себе у нее телефон новый, шустрый. Мой уже старенький, но с рутом.

                                            Не знаете, в чем может быть проблема?
                                              0
                                              Вы не указали какая операционная система на устройстве. Полагаю, что это Android. Я как раз в статье описал эту проблему. Похоже на лаг в DNS резолве, то есть на преобразование доменного имени в IP-адрес уходит много времени, до нескольких секунд. И только тогда сайт начинает загружаться. Мне удаленно не удалось выяснить причину этой задержки. Возможно кто-то опытный, у кого есть устройство с таком проблемой, сможет выяснить в чем причина и описать решение в нашей wiki.
                                              +1
                                              А какова монетизация проекта? Вижу, что вы предлагаете сразу скачать ovpn-файл, без регистраций и прочего. На чем проект зарабатывает? Кто оплачивает работу админов? Кто оплачивает пусть и 30 долларов за сервера?
                                              Когда вижу подобные проекты сразу встает вопрос о том как же монетизируется. Не верю, что с кнопки доната вы хотя бы на час работы админа набрали за время работы проекта.
                                                0
                                                Час админа — можно и самому поработать.
                                                С кнопки доната вполне можно наскрести на сервер. Если некоторые и жмотятся, то я уверен, что есть и те, кто донатит…
                                                  –2
                                                  Ну там, положим, часов 12-16(так, навскидку) работы было, плюс мониторинг надо настроить и прочее, плюс бэкапы, плюс резервирование, плюс хотя бы раз в месяц все надо контролировать глазами. Набегает часов эдак 30-40 изначально(у меня низкая ставка, я беру $40 за час работы, но все равно это 1200-1600 долларов USA будет), плюс ежемесячное обслуживание, плюс проверка валидности бэкапов. Не верю я в энтузиаста, который ради доступа к быдлоклассникам и прочему российскому мусору станет так тратиться.
                                                  Потому и интересуюсь монетизацией.
                                                  Как-то же это должно хотя бы в ноль выходить, а лучше прибыль человеку приносить.
                                                    +1
                                                    Неделю на этот проект? Муахахахаха
                                                  +7
                                                  Кто оплачивает пусть и 30 долларов за сервера?

                                                  Сервера первое время оплачивал я, сейчас нам бесплатно дают сервера Veesp.com за что им больше спасибо.

                                                  Кто оплачивает работу админов?

                                                  Администрирование сервиса не занимает много времени, достаточно все настроить один раз. Мне много помогает советами ValdikSS когда я чего-то не понимаю. Он большой специалист по OpenVPN.

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

                                                  Меня слабо мотивируют деньги, намного веселее угореть по хардкору сражаясь против цензуры в масштабах целого государства. Row Row Fight the Power! Еще меня завораживает осознание того, что десятки тысяч человек пользуются моей поделкой и она приносит им пользу. Этот кайф для меня гораздо ценнее денег.

                                                  Кстати насчет доната вы ошибаетесь. Нам задонатили больше 20 тысяч рублей. Это многократно превышает мои затраты. Так что люди способны организовываться вокруг справедливых и благородных идей.
                                                    –20
                                                    > сейчас нам бесплатно дают сервера Veesp.com за что им больше спасибо.

                                                    То есть что бы обойти блокировку пропагандистких ресурсов страны-агрессора вы берете деньги у страны агрессора?
                                                    Тогда вопросов больше нет. Мне все ясно с проектом и его монетизацией. Извините, что потревожил.
                                                      +3
                                                      Вы таки хотите сказать, что человек на окладе у ФСБ? Надо полагать вы тоже заметили, что задонатили в рублях. Прокол, не иначе!
                                                        +5
                                                        Да, я на окладе у ФСБ.
                                                        +11
                                                        То есть что бы обойти блокировку пропагандистких ресурсов страны-агрессора вы берете деньги у страны агрессора?

                                                        Мне не интересен политический срач. Я воспринимаю модель государства так же как крупную международную компанию, которая торгует с другими компаниями (государствами). У нее есть много отраслей деятельности и есть руководство. Эффективность компании я могу оценивать только по результатам ее работы и по условиям труда (уровню жизни) для ее сотрудников. Я не отождествляю себя с директором этой компании. Если компания работает плохо, я пойду работать в другое место. Я не понимаю что значит патриотизм, мне безразличны другие люди кроме моих друзей и родни.

                                                        Можно упростить это до такого примера. Представьте вы живете районе, который обслуживает управляющая компания. Она занимается вывозом мусора, обслуживанием отопления, чинит протечки крыши, заинмается уборкой подъездов и так далее. В соседнем квартале есть такой же район и им управляет другая компания. Оказывается что за те же деньги, которые вы платите за комунальные услуги, в соседнем районе управляющая компания еще и сажает цветы в клумбах, делает ремонт в подъездах. При этом крыша там не протекает, отопление не отключают, в повдвалах нет бомжей и никто не ссыт в подъездах. Когда вы задаете вопрос руководству своей управляющей компании, почему же у нас хуже чем у них, вам говорят, что в том районе вообще геи живут, они все плохие и тупые, а в нашем квартале особый народ живет! У нас есть духовность а у них нет, поэтому не обращайте внимание не протекающую крышу, ведь у нас особый путь.
                                                          –1
                                                          Скорее, есть одна очень крупная (глобальная) корпорация, и она раздроблена на много более мелких компаний (государств), и когда топ-менеджеры этих небольших (по значимости и потенциалу) филиалов начинают вые..., им жестко показывают их реальное место в иерархии.
                                                        –5
                                                        Признавайтесь, сколько недель вы тратите ежедневно на этот проект? Сколько бекапов зарезервировали уже, как часто проверяете глазами, а не другими органами?
                                                          0
                                                          Все бекапы у нас это десяток текстовых файлов. Они доступны на Github https://github.com/zhovner/zaborona_help
                                                          Развертывание нового сервера, при использовании интрументов вроде ansible, занимает несколько секунд.

                                                          Больше всего времени я трачу на поддержку пользователей и ответы на письма/комментарии. Но я делаю это только в свободное время и когда у меня есть настроение.
                                                      0
                                                      из-за этого приходилось перезапускать демоны OpenVPN…
                                                      и для преминения новых настроек пользователю достаточно переподключиться к серверу

                                                      предлагаю посмотреть в сторону параметра


                                                      management 127.3.2.1 7654

                                                      это позволит telnet-ом подключаться к соответствующему IP:порту и командой kill cn либо kill IP:port убивать подключение пользователя. в этом случае правильно настроенный клиент (должно хватить persist-tun в конфиге) сам автоматически переподключится


                                                      маленькая, а радость от применения настроек на лету, есть.

                                                        0
                                                        В любом случае приходится отключать клиентов. По опыту замечено, что из тысячи клиентов, десяток не переподключается нормально и начинает писать что у них проблемы. Многие держут VPN на роутерах где OpenVPN едва работает.
                                                        0
                                                        По поводу DNS-резолва: проблема не только на Android. На 3х ПК с Windows 10 резолв стабильно идет несколько секунд и это очень разражает, на Linux такого нет.
                                                        В целом за сервис огромное спасибо :)
                                                          0

                                                          извините за нескромный вопрос — а вы не рассматривали мысль о том, что с IP вашего сервера будут всячески провоцировать и разжигать, а шишки могут посыпаться на вашу голову?

                                                            0
                                                            Такой риск конечно есть. Не хочется садиться на бутылку вместе с Дмитрием Богатовым. Но надеюсь что обойдется. Тем более, что VK недавно убрал IPv6 записи со всех своих доменов (по слухам из-за того, что не смог побороть спам из IPv6 сетей) и идентифицировать конкретного пользователя не получится, потому что все ходят с одного ipv4 адреса.
                                                              0
                                                              кстати, с другой стороны — у вас приватный ключ в открытом доступе и один для всех клиентов.
                                                              компетентным админам в штатском любой страны (да просто любопытным хацкерам с прямыми руками) не составит труда «подсмотреть трафик»
                                                              Если вы не позиционируете свой сервис как анонимайзер (а насколько я вижу, так и есть) вы можете всю ответственность спихнуть в их адрес, мол «вы весь трафик пишете? вот вы и разбирайтесь, где ключи взять вы знаете»

                                                              Так что шанс стать гостем казенного дома в РФ, кмк, не велик (зачем подымать шум там, где можно тихо слушать)
                                                              Есть, правда, шанс, что на каком-нибудь ентер-ТВ из вас нарисуют злостного агента Кремля
                                                                +2
                                                                Приватный ключ сервера у нас не в открытом доступе, без него расшифровать трафик нельзя. В публичном доступе у нас только приватный ключ клиента, который используется для аутентификации пользователя. В конфигурационном файле зашит корневой сертификат (ca), по которому клиент может проверить подлинность сервера, и если его будут MiTM-ить, то не подключится.

                                                                Кроме того, все сайты работают по HTTPS, так что даже если бы шифрование VPN было отключено, не было бы никакой разницы на канальном уровне.
                                                              0
                                                              Ну вы уже спланировали что будете делать в случае опасности?
                                                              И еще такой вопрос… Нет ли какого-нибудь древнего закона который запрещает всяким лодочникам использовать герб страны на сайте? Наверняка есть какое-то достопочтимое предписание. Как у нас с развешиванием флагов на своих ворота.
                                                                0
                                                                Ну вы уже спланировали что будете делать в случае опасности?

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

                                                            Пользуясь случаем скажу что для работы ok.ru в мобильных приложениях на IOS и Android их нужно просто обновить.
                                                              0
                                                              Спасибо, Андрей.
                                                              +1
                                                              Вот вы использовали Ferm для генерации сотен идентичных правил для iptables на 3 интерфейса.

                                                              Была какая-то специфическая причина не использовать модуль ipset и обойтись всего тремя правилами (по одному на интерфейс)?

                                                              У меня например через cron/bash скрипт автоматически обновляется черный список на серверах. Очень удобно и всего одно правило. Там даже не сохраняется конфигурация iptables, просто заполняется ipset при перезагрузке.
                                                                0
                                                                Вы правы, можно было бы использовать ipset. Дело в личных предпочтениях.
                                                                  +1
                                                                  Для большого списка адресов оправданно использовать ipset, я с вами полностью согласен, но у zhovner их 69, а не сотни. Заметного ускорения от использования ipset в этом случае нет, а проблемы появляются: нужно будет писать отдельные скрипты, чтобы таблицы ipset создавались до применения правил файрволла, иначе модуль ipset для iptables будет выдавать ошибку и не применять правила при загрузке, писать скрипты для работы с ipset и обновления.

                                                                  Считаю, что конкретно в этом случае выигрывает удобство, а не максимальная корректность с технической точки зрения.
                                                                  0
                                                                  Немного непонял, как клиент определяет к какому демону подключаться? На стандартный порт или дополнительный
                                                                    0
                                                                    А все, пропустил просто
                                                                      0
                                                                      Это скорее делает операционная система возвращая программе один из IP-адресов полученных в DNS ответе. Такая балансировка сделана у многих сервисов, например домен google.com имеет очень много А-записей. Попробуйте несколько раз выполнить ping google.com и скорее всего увидите каждый раз разный IP адрес.
                                                                        0
                                                                        Прошу прощения, неправильно понял ваш вопрос. Iptables редиректит подключения к 1194 порту на другие.
                                                                        0
                                                                        если вы используете балансировку нагрузки через DNS, то как вы боритесь с отказами? в случае фейла одного из серверов, DNS по-прежнему будет резолвить на него запросы, если только нет health check'а, как в AWS Route 53 или других аналогов.
                                                                          0
                                                                          К сожалению никак. Только вручную удалять сервер из DNS. Для этого ставим минимальный TTL 2 минуты.
                                                                          Проблема еще в том, что при разрыве подключения клиент OpenVPN по умолчанию не резолвит адрес к которому был изначально подключен. Поэтому в случае отказа приходится просить пользователей либо перезапустить OpenVPN и очистить DNS кеш, либо вообще перезагружаться.
                                                                            0

                                                                            Ещё можно посмотреть в сторону remote-random в клиентском конфиге.


                                                                            Что-то типа этого
                                                                            ...
                                                                            server-poll-timeout 15
                                                                            remote-random
                                                                            
                                                                            <connection>
                                                                            remote 1.example.net 1194 udp
                                                                            ;mssfix 1400
                                                                            </connection>
                                                                            
                                                                            <connection>
                                                                            remote 1.example.net 443 tcp
                                                                            </connection>
                                                                            
                                                                            <connection>
                                                                            remote 2.example.net 443 tcp4
                                                                            </connection>
                                                                            
                                                                            ignore-unknown-option block-outside-dns
                                                                            block-outside-dns
                                                                            
                                                                            # Эти вот не пушить и не определять в конфиге, а то не будет другой сервер выбирать при фейле:
                                                                            ;auth-nocache
                                                                            ;persist-key
                                                                            ;persist-tun
                                                                            ;persist-remote-ip
                                                                            ;user xxx
                                                                            ;group xxx
                                                                            ...
                                                                              0
                                                                              Советую для решения этого посмотреть gdnsd — очень простой и вкусный
                                                                              https://github.com/gdnsd/gdnsd/wiki/GdnsdConfig
                                                                                0
                                                                                По проблеме обрыва.
                                                                                Он не то чтобы не резолвит. Вы пушите клиенту persist-tun и это означает, что клиент при обрыве не должен рестартить туннель и не должен перечитывать файл конфига. Если убрать эту опцию для клиента то он будет успешно отваливаться вслед за сервером. А если сказать клиенту ping-restart то он ещё и подниматься сам будет. Бонусом можно ещё resolv-retry чтобы точно очухался.
                                                                                  0
                                                                                  keepalive является макросом над командами ping и ping-restart:
                                                                                  For example, --keepalive 10 60 expands as follows:
                                                                                  
                                                                                      if mode server:
                                                                                          ping 10                    # Argument: interval
                                                                                          ping-restart 120           # Argument: timeout*2
                                                                                          push "ping 10"             # Argument: interval
                                                                                          push "ping-restart 60"     # Argument: timeout
                                                                                      else
                                                                                          ping 10                    # Argument: interval
                                                                                          ping-restart 60            # Argument: timeout
                                                                                  Он используется на zaborona.

                                                                                  OpenVPN 2.3 использовал системный резолвер, поэтому уважал TTL записи, которую он получил через DNS. Если происходит обрыв, используется опция persist-tun и время TTL уже вышло, домен будет пытаться резолвиться через DNS-сервер внутри VPN, хотя VPN-соединение не установлено.

                                                                                  OpenVPN 2.4 получает IP-адрес с домена только один раз, при первом подключении, и кеширует его, не уважая TTL записи. При переподключении он не обращается к DNS, а сразу переподключается по IP-адресу.

                                                                                  Раньше на zaborona не использовался параметр persist-tun, но, по какой-то причине, у людей на Windows, в случае разрыва соединения с сервером, переставал работать DNS вообще, до перезагрузки. Подозреваю, происходило следующее: сервис OpenVPN, по какой-то причине, не убирал блокировку сторонних DNS (опция block-outside-dns), туннельный интерфейс отключался, и все обращения на порт 53 оказывались заблокированными. У меня проблема не проявляется нигде, и люди, у которых она проявлялась, не написали мне на почту и не создали баги в багтрекере. Так что решено было эту опцию пушить с сервера.
                                                                                    0
                                                                                    keepalive я не заметил.
                                                                                    На виндовом OpenVPN 2.4 (или в виндовом TAP адаптере который идёт «в комплекте» или в виндовом сервисе самого OpenVPN либо вообще в комбинации всего этого) похоже что-то сильно намудрили вообще с кешем.
                                                                                    Конкретно я видел проблемы с ARP кешем когда уже после поднятия туннеля траф не маршрутизируется с ошибкой no route to host или что-то в этом духе. ARP кэш TAP адаптера при этом невозможно было удалить (invalid) до перезагрузки либо с помощью ручного disable-enable TAP интерфейса. Это проявлялось когда IP выдаётся новый на каждое новое подключение.
                                                                                    На 2.3 такого не замечал.
                                                                              +1
                                                                              Несмотря на то, что поддержка этой OC закончилась ВОСЕМЬ лет назад, ее по-прежнему используют.

                                                                              Замечу, что восемь лет назад закончилась только основная поддержка, расширенная закончилась только в 2014 году, а поддержка версии PosReady продолжается до сих пор. Да и без нарушения лицензии не так давно прилетели патчи от WannaCry и других эксплоитов АНБ, так что XP живее всех живых.
                                                                                0

                                                                                Насколько я помню, фатальный недостаток поддержки OpenVPN в RouterOS так и не починили, и он до сих пор работает только через TCP.

                                                                                  0

                                                                                  Как на счёт этого бага: https://github.com/OpenVPN/tap-windows6/issues/9
                                                                                  Есть машинки с Windows 8.1/10 и актуальными обновлениями — на одних работает, на других нет.

                                                                                    0
                                                                                    Не сталкивался с этой ошибкой. Чаще всего либо TAP адаптер занят, либо отсутствует.
                                                                                    0

                                                                                    Чтобы не хранить маршруты и другие общие настройки в двух (или более) разных файлах, вероятно удобнее будет использовать опцию в клиентских конфигах (ну или в DEFAULT):


                                                                                    config /some/path/to/shared-ccd-config

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

                                                                                      0
                                                                                      Да, наверное вы правы.
                                                                                      0
                                                                                      Пользуясь случаем хочу сказать спасибо за этот сервис!
                                                                                      Есть ли в планах поддержка протоколов PPTP/L2TP или IPSec (нужны для подключения к Zaborona.Help через роутеры Tp-Link серии WR-xxx без изменения прошивки на OpenWRT)?
                                                                                        +1
                                                                                        Есть такие мысли, но с ipsec/ikev2 у меня не получилось реализовать ту же задачу. Например встроенный клиент ikev2 в Windows не принимает больше 25 маршрутов. У других протоколов тоже хватает проблем.
                                                                                          0
                                                                                          Большое спасибо за такой шикарный сервис!

                                                                                          Можно немного подробнее о проблемах других протоколов? Например PPTP и раздача маршрутов с помощью isc-dhcp-server. Знаю что dnsmasq не умеет отдавать очень много статических маршрутов, кажется более 28. PPTP есть везде, тем и интересен.

                                                                                          Ещё раз спасибо.
                                                                                        –1

                                                                                        Debian, OpenVPN 2.4. Все работает, кроме git :D

                                                                                          +1
                                                                                          Что это значит?
                                                                                            –3

                                                                                            Не могу сделать pull/push в приватный репозиторий на bitbucket

                                                                                              +3
                                                                                              Я не понимаю как это относится к теме статьи.
                                                                                                0
                                                                                                Я обожаю Ваш сервис. Честное слово.
                                                                                                Но я не могу понять, почему при включенном VPN zaborona.help я не могу подключиться к SSH серверу bitbucket. Соответственно, не могу работать с удаленным репозиторием.

                                                                                                Но за минусы конечно спасибо
                                                                                        +1
                                                                                        Что бы процессы openvpn не скакали между разными процессорами, стоит каждый «прибить» к процессору. В моём случае это увеличивало производительность процентов на 20.
                                                                                        Что бы клиенту не перегружать сервис openvpn, если текущий сервер стал не доступен, можно вместо шести A-записей в FQDN в опции remote, использовать шесть опций remote с FQDN с одной A-записью и опцией --remote-random (или три опции remote с FQDN с двумя А записями или три).
                                                                                        Точно так же добавлением доп. опций remote можно разруливать у клиента случайный выбор конкретного демона (порта), не нагружая ведением статистики iptables, хотя, возможно, эта нагрузка мизерна.
                                                                                          0
                                                                                          Что бы процессы openvpn не скакали между разными процессорами, стоит каждый «прибить» к процессору. В моём случае это увеличивало производительность процентов на 20.

                                                                                          Спасибо, попробую. Не знал об этом.

                                                                                          Что бы клиенту не перегружать сервис openvpn, если текущий сервер стал не доступен, можно вместо шести A-записей в FQDN в опции remote, использовать шесть опций remote с FQDN с одной A-записью и опцией --remote-random (или три опции remote с FQDN с двумя А записями или три).

                                                                                          Мы заранее не знали какое будет точно количество серверов в итоге, поэтому не стали так делать. Как в таком случае исключать домен из списка? Как поведет себя клиент если один из доменов в списке будет без A-записи? Старые клиенты тоже поддерживают это?
                                                                                            +1
                                                                                            Возможно, стоит убрать и шифрование, зачем нагружать свои сервера, судя по тому, для чего служит ваш проект, шифровать трафик не зачем, шифровать трафик клиента будет сам клиент и тот ресурс к которому вы предоставляете доступ (TLS). Если конечный ресурс считает, что трафик шифровать не зачем, то зачем вам его шифровать?
                                                                                            Ещё, я бы использовал UDP протокол для OpenVPN, а все фишки TCP (целостность, упорядочивание, подтверждение и т.д.) возложил бы на клиента и конечный ресурс.
                                                                                            Мы заранее не знали какое будет точно количество серверов в итоге… Как в таком случае исключать домен из списка?

                                                                                            Как вариант сделать две записи remote в каждой по 3 FQDN, а на стороне сервера включать/исключать сервера, плюс две записи с другим портом с теми же FQDN. Кроме того. никто не мешает делать повторяющиеся IP, в разных FQDN, главное распределить так, что бы равная вероятность подключения была.
                                                                                            Как поведет себя клиент если один из доменов в списке будет без A-записи?

                                                                                            Именно такой кейс не тестировал, но думаю, не удалось подключиться, переходит к следующей случайной опции remote.
                                                                                            Старые клиенты тоже поддерживают это?

                                                                                            На сколько помню, как я начал использовать openvpn для своих целей с 2004 года, с тех пор эта опция и работает.
                                                                                              +1
                                                                                              Возможно, стоит убрать и шифрование, зачем нагружать свои сервера, судя по тому, для чего служит ваш проект, шифровать трафик не зачем, шифровать трафик клиента будет сам клиент и тот ресурс к которому вы предоставляете доступ (TLS). Если конечный ресурс считает, что трафик шифровать не зачем, то зачем вам его шифровать?

                                                                                              Это хороший вопрос, я тоже думал об этом. Но тут есть несколько факторов: многие провайдеры сейчас блокируют по DNS, при этом перехватывая запросы к любым DNS серверам. Вполне возможно что потом они, как и провайдеры в России, начнут использовать системы DPI и будут ловить подключения к запрещенным сайтам по SSL SNI, матчить HTTP заголовки и так далее. Если так случится, придется все перенастраивать и заставлять клиентов скачивать новый конфиг. Я бы использовал вместо шифрования какой-нибудь режим обфусцирования типа XOR, но такого в OpenVPN, как я понял нет.

                                                                                              я бы использовал UDP протокол для OpenVPN, а все фишки TCP (целостность, упорядочивание, подтверждение и т.д.) возложил бы на клиента и конечный ресурс.

                                                                                              Использование TCP сознательный выбор для экономии трафика и батарейки на мобильных устройствах. Так как стандартный таймаут NAT трансляций для UDP подключений намного ниже чем для TCP, поэтому в случае с UDP клиент чаще шлет keep alive.

                                                                                                +1
                                                                                                многие провайдеры сейчас блокируют по DNS, при этом перехватывая запросы к любым DNS серверам...

                                                                                                Так DNS-запрос не будет выглядеть как DNS-запрос, и SSL как SSL, так как:
                                                                                                1. Порты совсем другие;
                                                                                                2. Инкапсуляция, то есть в начале будут заголовки самого протокола OpenVPN.
                                                                                                Понятно, что можно научить искать не шифрованный трафик OpenVPN, разбирать его заголовки и добираться до содержимого DNS, SNI, но это не штатными средствами перенаправить все запросы на 53 порт на какой-то свой сервер. ИМХО, прежде чем дойдёт до разбора содержимого не шифрованного VPN канала, скорее запретят весь трафик OpenVPN в DPI по его характерным признакам.
                                                                                                поэтому в случае с UDP клиент чаще шлет keep alive

                                                                                                У вас в настройках keepalive 300 900 если оставить так же для UDP, будет с такой же переодичностью в пять минут слать keepalive, но вам виднее.
                                                                                                  0
                                                                                                  Есть такие DPI, которые могут отслеживать запросы даже внутри HTTP- и Socks5-прокси, на любом порту. Я их называю Full DPI.

                                                                                                  У вас в настройках keepalive 300 900 если оставить так же для UDP, будет с такой же переодичностью в пять минут слать keepalive, но вам виднее.
                                                                                                  Слабые домашние роутеры могут забывать о UDP-соединении уже через 40 секунд. На какой-то из мобильных сетей РФ UDP-соединения забывались уже через 25 секунд.
                                                                                                  Данные о TCP-соединениях хранятся минимум 5 минут, обычно около 15.
                                                                                                    0
                                                                                                    Есть такие DPI, которые могут отслеживать запросы даже внутри HTTP- и Socks5-прокси

                                                                                                    Не сомневаюсь, но встречал блокировку всего протокола OpenVPN, а вот анализ не шифрованного OpenVPN и блокировку на основе полученного результата, пока не встречал.
                                                                                                  +1
                                                                                                  В дополнение к предыдущему, если от шифрования отказаться нельзя, то хотя бы стоит отключить защиту от так называемых replay attack, когда для каждого пакета подсчитывается HMAC. Процентов 10 производительности и тут выиграешь.
                                                                                                    0
                                                                                                    Самую большую нагрузку на процессор создает не шифрование, а переключение контекста и чтение по одному пакету за раз. Шифрование на 3-4 месте по нагрузке на процессор в профилировщике.
                                                                                                      0
                                                                                                      Не скажи… Вот прям сейчас протестировал у себя:
                                                                                                      1. Без шифрованияния: 115 мбайт/сек, загрузка одного ядра ~10%.
                                                                                                      2. С шифрованием BF-CBC, для SOHO-роутеров, и auth none: 107 мбайт/сек, загрузка одного ядра 85%.
                                                                                                      Да, процессы между ядрами не перемещаются.
                                                                                                      Подозреваю, что при шифровании каждого пакета больше переключений контекста, а если ещё HMAC считать…
                                                                                                        0
                                                                                                        На моем старом роутере на MIPS-процессоре с частотой 560 МГц, без шифрования где-то 24 мегабита в секунду, а с шифрованием — 19-21.

                                                                                                        Если уменьшить переключения контекста, увеличив MTU до 18000, то без шифрования были стабильные 100 мегабит (ограничение порта), а с шифрованием — около 70.
                                                                                                          0
                                                                                                          На MIPS влияние отключения шифрования не изучал, только самый быстрый шифр выявлял, собственно BF-CBC самым быстрым и оказался.
                                                                                                          Для быстрого переключения контекста, нужны мегагерцы, ну и кэш в процессоре важен, видимо поэтому MIPS быстро не переключается с такими частотами.
                                                                                                        0
                                                                                                        Сорри, iperf пишет сколько мбайт передал, но скорость пишет в мбитах, поэтому 115 мбит/сек и 107 мбит/сек соответственно. Насторожили меня мегабайты/сек поэтому пошёл перепроверять.
                                                                                              0
                                                                                              Использование термина VDS вместо VPS.

                                                                                              за 5 лет что я в хостинге так и не понял разницы.
                                                                                              в итоге проще для понимания — написать VDS, не знаю почему. именно что «метка» — клиентам проще сразу понимать о чем речь.

                                                                                              Интерфейс панели управления BillManager

                                                                                              Другие биллинги — еще хуже.
                                                                                              Просто на рынке — нету нормального биллинга. Billmanager лучшее из того, что можно купить рядовому хостеру. И да, он довольно убог :) Но другие не лучше.
                                                                                              Так что по вашему — только самописные хостинги крутые с десятком специалистов и программистов нормальные. А любой типичный хостинг который использует чужие разработки значит убог. Но это не так.

                                                                                              Непонимание принципов IPv6.

                                                                                              Просто сама панель Vmmanager — не умеет с ней работать. А если и умеет — специалистов которые могут разобраться как она может — нет :)

                                                                                              Виртуализация OpenVZ

                                                                                              ну это понятие отмирает уже.
                                                                                              тот же VDS VMmanager делается на KVM
                                                                                              хотя после 1 года использования, я тоже понял, что на этой панели — бизнес не построишь. вроде работает, но все как-то через задницу.
                                                                                              • UFO just landed and posted this here
                                                                                                  0
                                                                                                  Ширина канала не бесконечная. Ограничения трафика нужно воспринимать как плату за ширину канала доступную вам в единицу времени. Например квота в 30ТБ значит, что вы можете занимать канал месяц на скорости 100Mbit/s или несколько дней на скорости 1Gbit/s или несколько часов на скорости 10Gbit/s.
                                                                                                  +1

                                                                                                  Извините, а почему для пункта описания пункта "Панель BillManager, ISPmanager и т.д." вы выбрали скриншоты 4-го биллинга? Он был выпущен более 10(!) лет назад, уже года три не развивается и года полтора как снят с продажи. Для наглядности?
                                                                                                  Пятёрка выгдядит куда свежее, через пару месяцев будет шестёрка, и в ЛК на ISPsystem ее можно посмотреть-пожмакать http://prntscr.com/fo8cw7

                                                                                                    0
                                                                                                    Не смотрели в сторону SoftEther VPN? Кроме того, что есть гуй управления, с его помощью можно поднимать сервер SSTP или L2TP, а SSTP настраивается встроенными средствами Windows, L2TP — встроенными средствами Android и iOS, а так же он умеет общаться и по OpenVPN протоколу — а значит к нему можно подключиться в том числе при помощи OpenVPN.
                                                                                                      0
                                                                                                      Комментарий по теме
                                                                                                      https://habrahabr.ru/post/208782/#comment_8738737
                                                                                                      Здравствуйте. В программном обеспечении существует такое понятие как продукт. Не часто сталкиваешься с ПО, вышедшем в Японии. То, что я увидел в SoftEther VPN — это какой-то суррогат, особенности:
                                                                                                      1. Вроде бы поддержка более 4х туннелей одновременно должна как-то предполагать, что продукт будет поддерживать возможность организации сети из коробки. Только не тут. Встроенный SecureNAT (странное название) — это всего лишь кривой программный тормозной NAT и такой же недоделанный DHCP сервер. Для клиентов PPTP, L2TP от MS SeсureNAT не назначает вам адрес автоматически. Серверу не удается вписать в конфиг клиента и даже шлюз по умолчанию. Хотя для клиентов openVPN при верном конфиге процедура проходит успешно.
                                                                                                      2. Вы не сможете сделать так, чтобы сервер пушил статические адреса вашим клиентам. Представляете, тут этого нет! Если вам нужна статика, вам придется руками каждому клиенту вписать это в настройке адаптера. Наверное, те, кто имеет дело с Микротиками, где все это работает из коробки, дружно начали улыбаться.
                                                                                                      3. Качество работы разных туннелей может отличаться на порядок. Это касается скорости работы при включенном SecureNAT на разных туннелях и клиентах. Количество зафейленных подключений намного выше, чем в комбинации с тем же микротиком. То есть поддержки разной клиентуры (MS PPTP, L2TP: Linux PPTP, L2TP) по сути нет, а основная картинка софта — тупой развод. Потеряете свое время и получите кардинально разный результат.
                                                                                                      4. Позиционирование использования этого недософта в связке с отдельно запущенными DHCP серверами, DNS и пр — я тогда не понимаю его смысла, я бы настроил Линукс сервер и развернул бы там те туннели в виде серверов, что мне нужны.
                                                                                                      5. Форум и программисты из страны восходящего солнца просто кишат советами — допилите сами, мы же выложили в openSource.
                                                                                                      6. SecureNAT с локальным бриджем работает криво на разных клиентах. На лицо баги в том, какие именно настройки сервер прописывает клиенту при подключении. Поэтому проблем с доступностью, пингами и прочими будет навалом и будет зависеть от клиента. ICMP может не вернуться, а ресурс в сети то быть доступным, то нет.
                                                                                                      7. Здесь же конечно можно написать — настрой на сервере NAT сам, пропиши маршруты. Без проблем, только при условии, что и остальное будет сделано также. Этой софтине не может быть места на сервере при таком положении дел. Такое чувство, что она была сделана под задачу — наплодить кучу vpn серверов, которые выводят трафик где-то там. И наверняка, где-то там его еще и слушают.
                                                                                                      Какой смысл было писать о таком ПО тут на Хабре? Мы тут собрались развиваться или терять свое время? Вам я точно не посоветую терять свое время, разбираясь в этом. Конечно их программа-клиент решает ряд проблем. Но попробуйте заставить своих клиентов-людей ставить внешний клиент VPN.

                                                                                                      0

                                                                                                      Сделал свой сервере по вашим настройкам https://habrahabr.ru/post/329248/ и недостающее донастроил по https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-14-04 но все равно не хочет:


                                                                                                      `
                                                                                                      Tunnelblick: OS X 10.12.5; Tunnelblick 3.7.2beta03 (build 4840); prior version 3.7.2beta02 (build 4830)
                                                                                                      2017-06-26 12:52:24
                                                                                                      Tunnelblick: Attempting connection with vpn; Set nameserver = 769; monitoring connection
                                                                                                      2017-06-26 12:52:24 Tunnelblick: openvpnstart start vpn.tblk 1337 769 0 3 0 1065264 -ptADGNWradsgnw 2.3.17-openssl-1.0.2k
                                                                                                      2017-06-26 12:52:24
                                                                                                      Tunnelblick: openvpnstart log:
                                                                                                      OpenVPN started successfully. Command used to start OpenVPN (one argument per displayed line):


                                                                                                            /Applications/Tunnelblick.app/Contents/Resources/openvpn/openvpn-2.3.17-openssl-1.0.2k/openvpn
                                                                                                            --daemon
                                                                                                            --log
                                                                                                            /Library/Application Support/Tunnelblick/Logs/-SLibrary-SApplication Support-STunnelblick-SShared-Svpn.tblk-SContents-SResources-Sconfig.ovpn.769_0_3_0_1065264.1337.openvpn.log
                                                                                                            --cd
                                                                                                            /Library/Application Support/Tunnelblick/Shared/vpn.tblk/Contents/Resources
                                                                                                            --verb
                                                                                                            3
                                                                                                            --config
                                                                                                            /Library/Application Support/Tunnelblick/Shared/vpn.tblk/Contents/Resources/config.ovpn
                                                                                                            --verb
                                                                                                            3
                                                                                                            --cd
                                                                                                            /Library/Application Support/Tunnelblick/Shared/vpn.tblk/Contents/Resources
                                                                                                            --management
                                                                                                            127.0.0.1
                                                                                                            1337
                                                                                                            --management-query-passwords
                                                                                                            --management-hold
                                                                                                            --script-security
                                                                                                            2
                                                                                                            --up
                                                                                                            /Applications/Tunnelblick.app/Contents/Resources/client.up.tunnelblick.sh -9 -d -f -m -w -ptADGNWradsgnw
                                                                                                            --down
                                                                                                            /Applications/Tunnelblick.app/Contents/Resources/client.down.tunnelblick.sh -9 -d -f -m -w -ptADGNWradsgnw

                                                                                                      2017-06-26 12:52:24 Unrecognized option or missing parameter(s) in /Library/Application Support/Tunnelblick/Shared/vpn.tblk/Contents/Resources/config.ovpn:9: ncp-ciphers (2.3.17)
                                                                                                      2017-06-26 12:52:24 Unrecognized option or missing parameter(s) in /Library/Application Support/Tunnelblick/Shared/vpn.tblk/Contents/Resources/config.ovpn:10: block-outside-dns (2.3.17)
                                                                                                      2017-06-26 12:52:24 OpenVPN 2.3.17 x86_64-apple-darwin [SSL (OpenSSL)] [LZO] [PKCS11] [MH] [IPv6] built on Jun 21 2017
                                                                                                      2017-06-26 12:52:24 library versions: OpenSSL 1.0.2k 26 Jan 2017, LZO 2.09
                                                                                                      2017-06-26 12:52:24 MANAGEMENT: TCP Socket listening on [AF_INET]127.0.0.1:1337
                                                                                                      2017-06-26 12:52:24 Need hold release from management interface, waiting…
                                                                                                      2017-06-26 12:52:24 MANAGEMENT: Client connected from [AF_INET]127.0.0.1:1337
                                                                                                      2017-06-26 12:52:24 MANAGEMENT: CMD 'pid'
                                                                                                      2017-06-26 12:52:24 MANAGEMENT: CMD 'state on'
                                                                                                      2017-06-26 12:52:24 Tunnelblick: Established communication with OpenVPN
                                                                                                      2017-06-26 12:52:24 MANAGEMENT: CMD 'state'
                                                                                                      2017-06-26 12:52:24 MANAGEMENT: CMD 'bytecount 1'
                                                                                                      2017-06-26 12:52:24 MANAGEMENT: CMD 'hold release'
                                                                                                      2017-06-26 12:52:24 NOTE: the current --script-security setting may allow this configuration to call user-defined scripts
                                                                                                      2017-06-26 12:52:24 Socket Buffers: R=[131072->131072] S=[131072->131072]
                                                                                                      2017-06-26 12:52:24 Attempting to establish TCP connection with [AF_INET]67.207.73.65:1194 [nonblock]
                                                                                                      2017-06-26 12:52:24 MANAGEMENT: >STATE:1498470744,TCP_CONNECT,,,
                                                                                                      2017-06-26 12:52:24
                                                                                                      Tunnelblick: openvpnstart starting OpenVPN
                                                                                                      2017-06-26 12:52:33 TCP: connect to [AF_INET]67.207.73.65:1194 failed, will try again in 5 seconds: Operation timed out
                                                                                                      2017-06-26 12:52:38 MANAGEMENT: >STATE:1498470758,TCP_CONNECT,,,
                                                                                                      2017-06-26 12:52:47 TCP: connect to [AF_INET]67.207.73.65:1194 failed, will try again in 5 seconds: Operation timed out
                                                                                                      2017-06-26 12:52:52 MANAGEMENT: >STATE:1498470772,TCP_CONNECT,,,
                                                                                                      2017-06-26 12:53:01 TCP: connect to [AF_INET]67.207.73.65:1194 failed, will try again in 5 seconds: Operation timed out
                                                                                                      2017-06-26 12:53:06 MANAGEMENT: >STATE:1498470786,TCP_CONNECT,,,
                                                                                                      2017-06-26 12:53:14 TCP: connect to [AF_INET]67.207.73.65:1194 failed, will try again in 5 seconds: Operation timed out
                                                                                                      2017-06-26 12:53:19 MANAGEMENT: >STATE:1498470799,TCP_CONNECT,,,
                                                                                                      `


                                                                                                      Хостинг на DigitalOcean. Вот настройки firewall:


                                                                                                      root@mx2:~# ufw status
                                                                                                      Status: active


                                                                                                      To Action From




                                                                                                      1194/udp ALLOW Anywhere
                                                                                                      OpenSSH ALLOW Anywhere
                                                                                                      1194/udp (v6) ALLOW Anywhere (v6)
                                                                                                      OpenSSH (v6) ALLOW Anywhere (v6)


                                                                                                      В чем может быть загвоздка?

                                                                                                        0
                                                                                                        А у вас OpenVPN вообще запущен на сервере? Покажите вывод команды netstat -ntlup
                                                                                                          0

                                                                                                          За запущен


                                                                                                          root@mx2:~# netstat -ntlup
                                                                                                          Active Internet connections (only servers)
                                                                                                          Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
                                                                                                          tcp        0      0 0.0.0.0:1194            0.0.0.0:*               LISTEN      3040/openvpn    
                                                                                                          tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1367/sshd       
                                                                                                          tcp        0      0 46.101.97.201:25        0.0.0.0:*               LISTEN      1818/exim4      
                                                                                                          tcp        0      0 10.19.0.7:25            0.0.0.0:*               LISTEN      1818/exim4      
                                                                                                          tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1818/exim4      
                                                                                                          tcp6       0      0 :::22                   :::*                    LISTEN      1367/sshd       
                                                                                                          
                                                                                                          root@mx2:~# service openvpn status
                                                                                                          ● openvpn.service - OpenVPN service
                                                                                                             Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
                                                                                                             Active: active (exited) since Mon 2017-06-26 09:48:05 UTC; 4h 50min ago
                                                                                                            Process: 3022 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
                                                                                                           Main PID: 3022 (code=exited, status=0/SUCCESS)
                                                                                                              Tasks: 0
                                                                                                             Memory: 0B
                                                                                                                CPU: 0
                                                                                                             CGroup: /system.slice/openvpn.service
                                                                                                          
                                                                                                          Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
                                                                                                            0
                                                                                                            Я не могу подключиться на 46.101.97.201:1194. Возможно этот порт блокируется фаерволлом?
                                                                                                        0
                                                                                                        > Он позволяет избавиться от кучи ненужных сущностей, вроде NAT и проброса портов.
                                                                                                        Уже от одной этой фразы мне хочется не иметь ничего общего c IPv6. Я более-менее спокойно сижу в интернете только потому, что знаю, что нахожусь за NAT роутера, и никакая зараза типа WannaCry мне не грозит. А вы тут мне говорите что выставить все порты наружу — это типа достоинство. Можнт и оно и так, но точно не для параноиков вроде меня.
                                                                                                          0
                                                                                                          Я более-менее спокойно сижу в интернете только потому, что знаю, что нахожусь за NAT роутера

                                                                                                          Это абсолютно ложное ощущение безопасности, потому что вам могут просунуть соседи по локальной сети, либо снаружи через UPnP, NAT-PMP или используя уязвимости soho-роутера. Думать что NAT имеет какое-то отношение к безопасности — заблуждение.

                                                                                                          Кроме того, у нас заблокированы все входящие соединения для IPv6 адресов.
                                                                                                            0
                                                                                                            UPnP выключен, компьютеры в домашней сети я более-менее могу контролировать, уязвимости роутера конечно никто не отменял, но это всё же скорее целевая атака должна быть, а моя цель — отбиться от массовых атак.
                                                                                                            >у нас заблокированы все входящие соединения для IPv6 адресов.
                                                                                                            >>Он позволяет избавиться от… проброса портов.
                                                                                                            Ну да, если полностью отказаться от входящих — это действительно радикально помогает избавится от проброса портов.

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