Месяц назад мы с друзьями сделали бесплатный сервис для обхода блокировок сайтов в Украине 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 до полного решения проблемы.
Поделиться с друзьями
-->

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


  1. nikitasius
    23.06.2017 19:34

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


  1. robert_ayrapetyan
    23.06.2017 20:01
    +1

    Аналогичная история с ДЦ в США. Можно найти приличный колокейшн и облака (Амазон, МС), все остальное — фуфло с завышенными ценниками (всякие «сервера у Джо» в каком-нибудь Канзасе, не то что с устаревшим интерфейсом, а просто номером телефона для связи). Подозреваю что на каком-то этапе AWS просто всех выкосил. Среднему бизнесу довольно тяжко (или может у меня просто задачи очень специфичные).


    1. ohm
      23.06.2017 20:03
      +1

      А кому легко? Нормально делай — нормаульно будет!


    1. zhovner
      23.06.2017 20:10
      +1

      Из всех зарубежных хостеров, мне очень нравится Linode. Они настоящие профессионалы, за несколько лет никаких проблем. Всегда компетентная поддержка и качественные услуги. К сожалению нет тарифов с безлимитным трафиком. Veesp.com тоже молодцы, цены ниже чем у Linode и DigitalOcean при сравнимом качестве.


      1. robert_ayrapetyan
        23.06.2017 20:53

        Linode и DigitalOcean — только виртуалки, т.е. про высокие нагрузки можно забыть. Ну и объема трафа там копейки — 10ТБ в месяц макс. За превышение — цена 20$\Тб, т.е. за скажем 30ТБ трафа в месяц (это 100 мбит\с 24\7) нода станет в $500.

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


        1. zhovner
          23.06.2017 21:20
          +1

          Linode и DigitalOcean — только виртуалки, т.е. про высокие нагрузки можно забыть.

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

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

          Я не знаю кому сегодня нужны bare metal сервера. Видимо тем, кому нравится переживать о ломающихся жестких дисках и писать в поддержку письма с просьбой поменять HDD на сервере. Я не спорю, что для некоторых задач выделенные сервера нужны, но на них обычно тоже ставят гипервизор и оперируют внутри виртуалками. Это проще и быстрее.


          1. robert_ayrapetyan
            23.06.2017 23:26

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


            1. Rathil
              24.06.2017 02:37

              Смотрели на Носикс?


              1. robert_ayrapetyan
                24.06.2017 04:31

                Хм нет, не знаком. Судя по локации, они реселят S4U. На S4U мы жили первые три года, пока не осознали, насколько порезанные у них сети, причем как в VIP (ServerLoft) так и в бюджетном варианте.


                1. Rathil
                  24.06.2017 10:36

                  Извините, я не знаю, что такое S4U. Можете просветить?


    1. Gasaraki
      23.06.2017 20:31
      +1

      OVH в Канаде имеет ДЦ и продолжают расширяться. Цены там вполне приятные.



      1. robert_ayrapetyan
        23.06.2017 20:58

        OVH был бы идеальным провайдером дедиков — отличное Intel-овское железо (материнки и лучшие сетевые карточки из всех что встречал), сказочные цены, более-менее вменяемый суппорт. Но их идиотский фаервол просто говорит вам «Нет», если у вас нагрузки от 100мбит\с и много мелких пакетов. Были даже попытки кастомизации под нас, как под крупного клиента, но в итоге мы проиграли битву с их великим фаерволом и потеряли несколько важных клиентов.


        1. Gasaraki
          23.06.2017 23:57

          Скорее не фаервол, а антиддос. Мы в свое время из-за него туда ушли, но у нас просто сайт был (который ддосили неделями до этого и hetzner нам просто доступ к серваку вырубил из-за 6гбит ддоса).


    1. Holms
      24.06.2017 00:58

      Посмотрите https://www.1and1.com/, у нас там дедик, пол года полет отличный ))


  1. Akuma
    23.06.2017 20:28

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

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

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

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

    P.S. Я не защищаю перечисленных 1Gb, Mh, reg.ru и прочую нечисть. Они совсем другая история.


    1. zhovner
      23.06.2017 20:35

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

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


    1. zhovner
      23.06.2017 20:37

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


      1. salsaly4
        23.06.2017 21:20

        Пока вообще никак.

        Я бы еще на servers.com посмотрел


        1. zhovner
          23.06.2017 21:24

          Можем спросить об этом amarao


          1. amarao
            24.06.2017 12:59
            +1

            IPv6 мы делаем по запросу, в основном в приватных регионах. Выкатывание в паблик осложняется уязвимостью в openstack, позволяющей одному тенанту подделать RA для другого тенанта.

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

            Ждём фикса.


  1. rushter
    23.06.2017 20:44
    +3

    ISPmanager действительно не очень удобная панель, вспоминаю как мучался с ней лет 7 назад, когда она была на пике популярности. Странно, что нормальных аналогов до сих пор никто не придумал.


    1. susnake
      23.06.2017 22:07

      Odin.


      1. zhovner
        23.06.2017 22:09

        Есть еще всякие SolusVM.


    1. iborzenkov
      23.06.2017 23:12
      -1

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


      1. rushter
        23.06.2017 23:16
        +2

        Я имел в виду не только ISP, но и сам биллинг. А рядовому пользователю, чтобы добавить какой-нибудь сайт на php, знать ssh думаю не обязательно.


  1. lolipop
    23.06.2017 20:52

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


    1. zhovner
      23.06.2017 21:38

      Неужели все эти 20 тысяч клиентов, даже поделенные на 6 серверов, умещаются в 100(600) Мбит?

      Число одновременных подкючений в пиковые часы примерно 6 тысяч, то есть по тысяче на каждый сервер. Мы не пускаем через себя весь трафик, а только к заблокированным сетям, так что хватает. Не смотря на то, что днем каналы нагружены почти полностью, пользователи не жалуются на скорость. Вот как это выглядит на одном сервере:
      image


  1. Evengard
    23.06.2017 20:54

    А почему вы искали хостинг именно в России? Не лучший вариант для обхода блокировок — в России свои собственные блокировки — эдак получается из огня да в полымя. Я бы скорее смотрел на такие страны, как Германия, Нидерланды. Правда, в Европе есть другая проблема… Найти безлимитный трафик с нормальной скоростью по-моему невозможно. Знает ли кто-нибудь подобный хостинг в европейских странах, при этом с безлимитным трафиком, всеми требованиями перечисленными здесь, и достаточно либеральным отношением к не всегда лицензионно чистым торрентам?


    1. zhovner
      23.06.2017 21:02
      +3

      Потому что для европейских IP-адресов заблокирована Яндекс.Музыка и значительная часть музыки в VK. Это написано в статье. Наш сервис позволяет обойти именно блокировки в Украине. Так что сервера в России для этого отлично подходят. Мы маршрутизируем через себя только заблокированные сети, весь остальной трафик идет напрямую через основной интернет пользователя. Так что блокировки в РФ нас никак не затрагивают.


    1. AlexanderY
      23.06.2017 21:29

      Scaleway оказался очень даже неплохим хостером с безлимитом и хорошей скоростью. Да, по железу там Atom'ы, но нам зашло, например. Ничего не могу сказать насчет IPv6, но ТС пишет, что использовали в том числе Scaleway, так что должно быть всё в порядке.


      1. zhovner
        23.06.2017 21:34

        Scaleway на тарифе «Starter Cloud» за €2.99 начинал тормозить уже при 100 одновременных подключениях. Полагаю что это из-за слабого процессора и медленной памяти. IPv6 они не умеют нормально, выдают 1 адрес на сервер. При заявленных 200Mbit/s скорость не поднималась выше 100Mbit/s. Так что мы быстро от них отказались.


        1. AlexanderY
          23.06.2017 21:40

          Вероятно, тормоза связаны с ARM-процессором. Про пропускную способность ничего сказать не могу. Мы пробовали только C2S тариф за €11.99, и скорость соответствует заявленной. В общем, я ничего не могу сказать про десятки хостеров, но после пары российских и одного Digital Ocean, Scaleway мне лично показался очень годным.


          1. zhovner
            23.06.2017 21:42

            Вероятно, тормоза связаны с ARM-процессором.

            У нас был x86 Atom в Париже.


            1. AlexanderY
              23.06.2017 21:48

              А, прошу прощения. Я почему-то думал, что за 2.99 там только ARM, но ошибся. Может как-то связано именно с тем, что у вас виртуалка. Может и нет. У нас «baremetal cloud server». В Амстердаме, кстати. В любом случае, спасибо за исследование и статью.


  1. olku
    23.06.2017 20:59
    +1

    Пятничный торт. Все больше режимов блокируют доступ к информации, заставляя компании цензурировать сетевой контент в том или ином виде. Ваш сервис решил проблему в Украине и обрел другой веер блокировок уже на территории РФ. Заставляет задуматься о недалеком будущем и глобальной сети VPN в разных юрисдикциях. Эдакий uncensored оверлей поверх Internet.


    1. zhovner
      23.06.2017 21:09
      +1

      Мы маршрутизируем через наши сервера только трафик к заблокированным сайтам. Блокировки в РФ нас не касаются https://habrahabr.ru/post/331178/#comment_10280266


      1. olku
        23.06.2017 21:25

        Хорошо! А то в новостях пишут, что парламент РФ уже запретил «средства для обхода заблокированных ресурсов»


        1. holomen
          26.06.2017 02:45

          парламент РФ уже запретил «средства для обхода заблокированных (на территории РФ) ресурсов»

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


  1. gudvinr
    23.06.2017 21:23

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


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


    1. ValdikSS
      23.06.2017 21:54
      +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 разрешают ее.


  1. zein
    23.06.2017 21:39
    -3

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


    1. zhovner
      23.06.2017 21:41
      +4

      Моя родина — Украина. Живу я при этом в Израиле. Для обхода блокировок в РФ есть аналогичный сервис https://antizapret.prostovpn.org/


      1. prostofilya
        24.06.2017 05:54

        А в Израиле есть что-нибудь подобное? Блокировки?


  1. alek0585
    23.06.2017 22:01

    Хостинг jino не рассматривали?


    1. zhovner
      23.06.2017 22:12
      +1

      Что это значит? На тарифе за 99? нет-IP адреса? Не понимаю
      image


      1. alek0585
        23.06.2017 22:27

        Так рассматривали или нет? Или у вас бюджет 100 рублей и рассмотреть не получилось?


        1. zhovner
          23.06.2017 23:33

          Вы сотрудник jino.ru? Я не понял несколько моментов. Что такое общий IP? Мне дадут какой-то порт на этом общем IP или что это значит?

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


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


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


          1. alek0585
            23.06.2017 23:41
            -3

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

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

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

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

            Получается что так, хотя я бы ждал тут подвох 100%.


      1. APXEOLOG
        23.06.2017 23:02
        +2

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


  1. astono0
    23.06.2017 22:13

    Использую Ваш сервис уже пару недель, очень нравится

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

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

    Не знаете, в чем может быть проблема?


    1. zhovner
      23.06.2017 22:16

      Вы не указали какая операционная система на устройстве. Полагаю, что это Android. Я как раз в статье описал эту проблему. Похоже на лаг в DNS резолве, то есть на преобразование доменного имени в IP-адрес уходит много времени, до нескольких секунд. И только тогда сайт начинает загружаться. Мне удаленно не удалось выяснить причину этой задержки. Возможно кто-то опытный, у кого есть устройство с таком проблемой, сможет выяснить в чем причина и описать решение в нашей wiki.


  1. Uirandir
    23.06.2017 22:38
    +1

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


    1. alek0585
      23.06.2017 22:41

      Час админа — можно и самому поработать.
      С кнопки доната вполне можно наскрести на сервер. Если некоторые и жмотятся, то я уверен, что есть и те, кто донатит…


      1. Uirandir
        23.06.2017 22:49
        -2

        Ну там, положим, часов 12-16(так, навскидку) работы было, плюс мониторинг надо настроить и прочее, плюс бэкапы, плюс резервирование, плюс хотя бы раз в месяц все надо контролировать глазами. Набегает часов эдак 30-40 изначально(у меня низкая ставка, я беру $40 за час работы, но все равно это 1200-1600 долларов USA будет), плюс ежемесячное обслуживание, плюс проверка валидности бэкапов. Не верю я в энтузиаста, который ради доступа к быдлоклассникам и прочему российскому мусору станет так тратиться.
        Потому и интересуюсь монетизацией.
        Как-то же это должно хотя бы в ноль выходить, а лучше прибыль человеку приносить.


        1. alek0585
          23.06.2017 22:53
          +1

          Неделю на этот проект? Муахахахаха


    1. zhovner
      23.06.2017 22:50
      +7

      Кто оплачивает пусть и 30 долларов за сервера?

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

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

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

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

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

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


      1. Uirandir
        23.06.2017 22:54
        -20

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

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


        1. alek0585
          23.06.2017 23:00
          +3

          Вы таки хотите сказать, что человек на окладе у ФСБ? Надо полагать вы тоже заметили, что задонатили в рублях. Прокол, не иначе!


          1. zhovner
            23.06.2017 23:02
            +5

            Да, я на окладе у ФСБ.


        1. zhovner
          23.06.2017 23:20
          +11

          То есть что бы обойти блокировку пропагандистких ресурсов страны-агрессора вы берете деньги у страны агрессора?

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

          Можно упростить это до такого примера. Представьте вы живете районе, который обслуживает управляющая компания. Она занимается вывозом мусора, обслуживанием отопления, чинит протечки крыши, заинмается уборкой подъездов и так далее. В соседнем квартале есть такой же район и им управляет другая компания. Оказывается что за те же деньги, которые вы платите за комунальные услуги, в соседнем районе управляющая компания еще и сажает цветы в клумбах, делает ремонт в подъездах. При этом крыша там не протекает, отопление не отключают, в повдвалах нет бомжей и никто не ссыт в подъездах. Когда вы задаете вопрос руководству своей управляющей компании, почему же у нас хуже чем у них, вам говорят, что в том районе вообще геи живут, они все плохие и тупые, а в нашем квартале особый народ живет! У нас есть духовность а у них нет, поэтому не обращайте внимание не протекающую крышу, ведь у нас особый путь.


          1. Uirandir
            23.06.2017 23:24
            -9

            Я — минархист и мой подход к государству такой же.
            Но в данном случае речь идет о том, что были заблокированы пропагандитские ресурсы на которых пишут о том, что украинцев нужно убивать за то что они украинцы и что война ведущаяся путинской бандой справедливая. А потому если человек берет деньги у путинской хунты на обход таких блокировок, то с его проектом все ясно и больше я у него ничего спрашивать не буду. Этот человек работает за мой счет(я — гражданин и резидент РФ) и когда-нибудь мы заберем у него то, что ему незаконно выдали люди, которые возомнили себя хозяевами РФ.


            1. dartraiden
              23.06.2017 23:45
              +3

              Я один не понимаю, о какой хунте идёт речь?

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

              От государства zhovner не получил ни копейки.


              1. alek0585
                24.06.2017 00:05

                Он ж на окладе у ФСБ, сам только вот признался. Uirandir его раскрыл.


                1. zhovner
                  24.06.2017 00:11

                  Едет пативэн, веселья полон фургон. Зря запускал VPN, ты уже под колпаком...

                  image
                  (картинка кликабельна)


                  1. alek0585
                    24.06.2017 00:13

                    Едет пативэн, друзей полон фургон, угощают бесплатно сгущеным молоком.


                    1. zhovner
                      24.06.2017 00:16

                      Ой, я не знал что можно тут вставлять видео.


                      1. alek0585
                        24.06.2017 00:38

                        Клип огонь, как и ваш впн. Я бы этот ролик на сайт впн-а поставил в бекграунд.


            1. ValdikSS
              24.06.2017 00:08

              Вконтакте является социальной сетью, тексты, картинки, документы и музыку в нее загружают пользователи. Пропагандистские тексты, как и любые другие, пишут люди, а не администрация сайта.
              User Generated Content, слышали о таком?


            1. Massacre
              24.06.2017 01:30

              А я, как гражданин и резидент Украины считаю, что за интернет-цензуру надо карать в аналогах Гаагского трибунала, а обходить её — дело благородное. Так что всё правильно делает. И антизапрет тоже правильно делает.


            1. avost
              24.06.2017 12:01
              +1

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

              На яндекс.музыке вам поют, что украинцев надо убивать? На почту мейлру вам пишут, что украинцев надо убивать?
              А зачем вы слушаете именно эти песни? И зачем переписываетесь в почте именно с этими людьми? Даже если вы читаете всю эту муть на фконтактике, то тот же вопрос — зачем??? Может надо не я.музыку блокировать, а в консерватории что-то поменять? Не, такой вариант не приходит в голову?


              и когда-нибудь мы заберем у него то

              Отобрать и поделить? Здравствуйте, Полиграф Полиграфович Шариков? Или ваша фамилия — Швондер?


          1. robert_ayrapetyan
            23.06.2017 23:36
            -1

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


      1. alek0585
        23.06.2017 22:57
        -5

        Признавайтесь, сколько недель вы тратите ежедневно на этот проект? Сколько бекапов зарезервировали уже, как часто проверяете глазами, а не другими органами?


        1. zhovner
          23.06.2017 23:42

          Все бекапы у нас это десяток текстовых файлов. Они доступны на Github https://github.com/zhovner/zaborona_help
          Развертывание нового сервера, при использовании интрументов вроде ansible, занимает несколько секунд.

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


  1. mavriq
    23.06.2017 23:55

    из-за этого приходилось перезапускать демоны OpenVPN…
    и для преминения новых настроек пользователю достаточно переподключиться к серверу

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


    management 127.3.2.1 7654

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


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


    1. zhovner
      23.06.2017 23:57

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


  1. Sho0ter
    23.06.2017 23:55

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


  1. mavriq
    23.06.2017 23:56

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


    1. zhovner
      24.06.2017 00:02

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


      1. mavriq
        24.06.2017 00:32

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

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


        1. zhovner
          24.06.2017 00:39
          +2

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

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


          1. zhovner
            24.06.2017 00:55
            +1

            Вот более развернутый ответ на этот же вопрос https://www.reddit.com/r/VPN/comments/2jzatj/frootvpn/clhibvw/


            1. mavriq
              24.06.2017 01:20

              хмм… согласен. я глупость написал


      1. alek0585
        24.06.2017 00:35

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


        1. zhovner
          24.06.2017 00:54

          Ну вы уже спланировали что будете делать в случае опасности?

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


  1. privatelv
    23.06.2017 23:57

    Закинул денег коллеге :)

    Пользуясь случаем скажу что для работы ok.ru в мобильных приложениях на IOS и Android их нужно просто обновить.


    1. zhovner
      23.06.2017 23:58

      Спасибо, Андрей.


  1. w_boba
    24.06.2017 00:21
    +1

    Вот вы использовали Ferm для генерации сотен идентичных правил для iptables на 3 интерфейса.

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

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


    1. zhovner
      24.06.2017 00:29

      Вы правы, можно было бы использовать ipset. Дело в личных предпочтениях.


    1. ValdikSS
      24.06.2017 01:03
      +1

      Для большого списка адресов оправданно использовать ipset, я с вами полностью согласен, но у zhovner их 69, а не сотни. Заметного ускорения от использования ipset в этом случае нет, а проблемы появляются: нужно будет писать отдельные скрипты, чтобы таблицы ipset создавались до применения правил файрволла, иначе модуль ipset для iptables будет выдавать ошибку и не применять правила при загрузке, писать скрипты для работы с ipset и обновления.

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


  1. artsavel
    24.06.2017 00:26

    Немного непонял, как клиент определяет к какому демону подключаться? На стандартный порт или дополнительный


    1. artsavel
      24.06.2017 00:29

      А все, пропустил просто


    1. zhovner
      24.06.2017 00:32

      Это скорее делает операционная система возвращая программе один из IP-адресов полученных в DNS ответе. Такая балансировка сделана у многих сервисов, например домен google.com имеет очень много А-записей. Попробуйте несколько раз выполнить ping google.com и скорее всего увидите каждый раз разный IP адрес.


    1. zhovner
      24.06.2017 01:05

      Прошу прощения, неправильно понял ваш вопрос. Iptables редиректит подключения к 1194 порту на другие.


  1. bacalastein
    24.06.2017 00:56

    если вы используете балансировку нагрузки через DNS, то как вы боритесь с отказами? в случае фейла одного из серверов, DNS по-прежнему будет резолвить на него запросы, если только нет health check'а, как в AWS Route 53 или других аналогов.


    1. zhovner
      24.06.2017 00:58

      К сожалению никак. Только вручную удалять сервер из DNS. Для этого ставим минимальный TTL 2 минуты.
      Проблема еще в том, что при разрыве подключения клиент OpenVPN по умолчанию не резолвит адрес к которому был изначально подключен. Поэтому в случае отказа приходится просить пользователей либо перезапустить OpenVPN и очистить DNS кеш, либо вообще перезагружаться.


      1. vmspike
        24.06.2017 11:09

        Ещё можно посмотреть в сторону 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
        ...


      1. silverjoe
        24.06.2017 14:16

        Советую для решения этого посмотреть gdnsd — очень простой и вкусный
        https://github.com/gdnsd/gdnsd/wiki/GdnsdConfig


      1. Wagner
        26.06.2017 22:42

        По проблеме обрыва.
        Он не то чтобы не резолвит. Вы пушите клиенту persist-tun и это означает, что клиент при обрыве не должен рестартить туннель и не должен перечитывать файл конфига. Если убрать эту опцию для клиента то он будет успешно отваливаться вслед за сервером. А если сказать клиенту ping-restart то он ещё и подниматься сам будет. Бонусом можно ещё resolv-retry чтобы точно очухался.


        1. ValdikSS
          26.06.2017 23:16

          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 оказывались заблокированными. У меня проблема не проявляется нигде, и люди, у которых она проявлялась, не написали мне на почту и не создали баги в багтрекере. Так что решено было эту опцию пушить с сервера.


          1. Wagner
            26.06.2017 23:55

            keepalive я не заметил.
            На виндовом OpenVPN 2.4 (или в виндовом TAP адаптере который идёт «в комплекте» или в виндовом сервисе самого OpenVPN либо вообще в комбинации всего этого) похоже что-то сильно намудрили вообще с кешем.
            Конкретно я видел проблемы с ARP кешем когда уже после поднятия туннеля траф не маршрутизируется с ошибкой no route to host или что-то в этом духе. ARP кэш TAP адаптера при этом невозможно было удалить (invalid) до перезагрузки либо с помощью ручного disable-enable TAP интерфейса. Это проявлялось когда IP выдаётся новый на каждое новое подключение.
            На 2.3 такого не замечал.


  1. sumanai
    24.06.2017 01:30
    +1

    Несмотря на то, что поддержка этой OC закончилась ВОСЕМЬ лет назад, ее по-прежнему используют.

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


  1. lorc
    24.06.2017 01:34

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


  1. nazarpc
    24.06.2017 02:14

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


    1. zhovner
      24.06.2017 02:50

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


  1. vmspike
    24.06.2017 10:33

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


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

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


    1. zhovner
      24.06.2017 14:57

      Да, наверное вы правы.


  1. SerhiyRomanov
    24.06.2017 12:09

    Пользуясь случаем хочу сказать спасибо за этот сервис!
    Есть ли в планах поддержка протоколов PPTP/L2TP или IPSec (нужны для подключения к Zaborona.Help через роутеры Tp-Link серии WR-xxx без изменения прошивки на OpenWRT)?


    1. zhovner
      24.06.2017 15:32
      +1

      Есть такие мысли, но с ipsec/ikev2 у меня не получилось реализовать ту же задачу. Например встроенный клиент ikev2 в Windows не принимает больше 25 маршрутов. У других протоколов тоже хватает проблем.


      1. Jimm54
        24.06.2017 23:26

        Большое спасибо за такой шикарный сервис!

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

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


  1. ponich
    24.06.2017 16:07
    -1

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


    1. zhovner
      24.06.2017 16:08
      +1

      Что это значит?


      1. ponich
        24.06.2017 16:13
        -3

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


        1. zhovner
          24.06.2017 16:17
          +3

          Я не понимаю как это относится к теме статьи.


  1. ViperRU
    24.06.2017 23:20
    +1

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


    1. zhovner
      25.06.2017 00:37

      Что бы процессы openvpn не скакали между разными процессорами, стоит каждый «прибить» к процессору. В моём случае это увеличивало производительность процентов на 20.

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

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

      Мы заранее не знали какое будет точно количество серверов в итоге, поэтому не стали так делать. Как в таком случае исключать домен из списка? Как поведет себя клиент если один из доменов в списке будет без A-записи? Старые клиенты тоже поддерживают это?


      1. ViperRU
        25.06.2017 12:00
        +1

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

        Мы заранее не знали какое будет точно количество серверов в итоге… Как в таком случае исключать домен из списка?

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

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

        На сколько помню, как я начал использовать openvpn для своих целей с 2004 года, с тех пор эта опция и работает.


        1. zhovner
          25.06.2017 16:39
          +1

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

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

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

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


          1. ViperRU
            25.06.2017 23:52
            +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, но вам виднее.


            1. ValdikSS
              26.06.2017 22:54

              Есть такие DPI, которые могут отслеживать запросы даже внутри HTTP- и Socks5-прокси, на любом порту. Я их называю Full DPI.

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


              1. ViperRU
                26.06.2017 23:49

                Есть такие DPI, которые могут отслеживать запросы даже внутри HTTP- и Socks5-прокси

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


          1. ViperRU
            26.06.2017 00:18
            +1

            В дополнение к предыдущему, если от шифрования отказаться нельзя, то хотя бы стоит отключить защиту от так называемых replay attack, когда для каждого пакета подсчитывается HMAC. Процентов 10 производительности и тут выиграешь.


            1. ValdikSS
              26.06.2017 22:56

              Самую большую нагрузку на процессор создает не шифрование, а переключение контекста и чтение по одному пакету за раз. Шифрование на 3-4 месте по нагрузке на процессор в профилировщике.


              1. ViperRU
                27.06.2017 00:08

                Не скажи… Вот прям сейчас протестировал у себя:
                1. Без шифрованияния: 115 мбайт/сек, загрузка одного ядра ~10%.
                2. С шифрованием BF-CBC, для SOHO-роутеров, и auth none: 107 мбайт/сек, загрузка одного ядра 85%.
                Да, процессы между ядрами не перемещаются.
                Подозреваю, что при шифровании каждого пакета больше переключений контекста, а если ещё HMAC считать…


                1. ValdikSS
                  27.06.2017 00:11

                  На моем старом роутере на MIPS-процессоре с частотой 560 МГц, без шифрования где-то 24 мегабита в секунду, а с шифрованием — 19-21.

                  Если уменьшить переключения контекста, увеличив MTU до 18000, то без шифрования были стабильные 100 мегабит (ограничение порта), а с шифрованием — около 70.


                  1. ViperRU
                    27.06.2017 00:16

                    На MIPS влияние отключения шифрования не изучал, только самый быстрый шифр выявлял, собственно BF-CBC самым быстрым и оказался.
                    Для быстрого переключения контекста, нужны мегагерцы, ну и кэш в процессоре важен, видимо поэтому MIPS быстро не переключается с такими частотами.


              1. ViperRU
                27.06.2017 00:12

                Сорри, iperf пишет сколько мбайт передал, но скорость пишет в мбитах, поэтому 115 мбит/сек и 107 мбит/сек соответственно. Насторожили меня мегабайты/сек поэтому пошёл перепроверять.


  1. hostsuki
    25.06.2017 16:30

    Использование термина VDS вместо VPS.

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

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

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

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

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

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

    ну это понятие отмирает уже.
    тот же VDS VMmanager делается на KVM
    хотя после 1 года использования, я тоже понял, что на этой панели — бизнес не построишь. вроде работает, но все как-то через задницу.


  1. Dmitry_4
    26.06.2017 07:45

    Поясните, как в современном мире еще живут анахронизмы навроде платы за воздух (трафик)??? Он что, изнашивает сервера?


    1. zhovner
      26.06.2017 07:58

      Ширина канала не бесконечная. Ограничения трафика нужно воспринимать как плату за ширину канала доступную вам в единицу времени. Например квота в 30ТБ значит, что вы можете занимать канал месяц на скорости 100Mbit/s или несколько дней на скорости 1Gbit/s или несколько часов на скорости 10Gbit/s.


  1. Arty_K
    26.06.2017 11:43
    +1

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


  1. Evengard
    26.06.2017 13:58

    Не смотрели в сторону SoftEther VPN? Кроме того, что есть гуй управления, с его помощью можно поднимать сервер SSTP или L2TP, а SSTP настраивается встроенными средствами Windows, L2TP — встроенными средствами Android и iOS, а так же он умеет общаться и по OpenVPN протоколу — а значит к нему можно подключиться в том числе при помощи OpenVPN.


    1. 9uvwyuwo6pqt
      30.06.2017 11:34

      Комментарий по теме
      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.


  1. xmoder
    26.06.2017 15:00

    Сделал свой сервере по вашим настройкам 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)


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


    1. zhovner
      26.06.2017 15:01

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


      1. xmoder
        26.06.2017 17:39


  1. Jogger
    26.06.2017 15:52

    > Он позволяет избавиться от кучи ненужных сущностей, вроде NAT и проброса портов.
    Уже от одной этой фразы мне хочется не иметь ничего общего c IPv6. Я более-менее спокойно сижу в интернете только потому, что знаю, что нахожусь за NAT роутера, и никакая зараза типа WannaCry мне не грозит. А вы тут мне говорите что выставить все порты наружу — это типа достоинство. Можнт и оно и так, но точно не для параноиков вроде меня.


    1. zhovner
      26.06.2017 16:32

      Я более-менее спокойно сижу в интернете только потому, что знаю, что нахожусь за NAT роутера

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

      Кроме того, у нас заблокированы все входящие соединения для IPv6 адресов.


      1. Jogger
        26.06.2017 16:54

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