Что VPN делает на самом деле — и о чём молчит большинство объяснений
VPN шифрует ваш трафик и отправляет его на сервер, который расшифровывает его и передаёт дальше. Следствие вовсе не в том, что ваш трафик становится невидимым. Следствие в том, что меняется состав тех, кто может его видеть. До: Wi-Fi в кафе, отель, мобильный оператор, домашний провайдер и любой национальный middlebox над ними — все они видят, какие сайты вы посещаете и примерно чем там занимаетесь. После: они видят один долгоживущий зашифрованный поток к одному адресу и ничего о том, что внутри. Взамен позицию, которую они утратили, занимает сеть, в которой сидит ваш сервер.
Это весь механизм целиком, и о нём стоит говорить прямо, потому что маркетинговая версия — «станьте невидимы в сети» — заставляет людей ждать защиты, которую эта конструкция не даёт. VPN — это смена точки обзора. Помогает она или нет, целиком зависит от того, лучше ли новая точка обзора старой применительно к конкретной вещи, которая вас беспокоит. Перенести наблюдателя из неизвестной вам отельной сети в дата-центр, который вы сами выбрали, в стране, которую вы сами выбрали, под управлением софта, который вы сами настроили, — обычно очень выгодный обмен. Перенести его с домашнего провайдера на компанию, которая рекламируется в подкастах, — обмен другого рода, и не такой очевидный.
Свой хостинг меняет только вторую половину этой фразы и ничего больше. Криптография идентична — документ о дизайне WireGuard описывает одно и то же рукопожатие независимо от того, чей это пир — ваш или провайдера. Меняется то, кто держит приватный ключ на дальнем конце, кто мог бы вести логи, если бы захотел, чья база клиентов существует и кто ещё делит с вами адрес выхода. Эти четыре различия и есть весь аргумент за и против собственного хостинга, и указывают они не в одну сторону.
Свой выход или коммерческий: какой обмен вы совершаете на самом деле
Первый инстинкт — считать свой хостинг безусловно более приватным вариантом, и для большинства моделей угроз так и есть. Нет провайдера, хранящего запись об аккаунте, нет общей инфраструктуры, которую могут изъять из-за чужого аккаунта, нет политики конфиденциальности, которую нужно принимать на веру, и нет возможности незаметно поменять политику логирования, не сообщив вам. Ключ у вас. Доверять никому не нужно, потому что предать вас просто некому.
Но есть одно измерение, в котором коммерческий VPN побеждает безоговорочно, и это измерение немаленькое. Их адрес выхода одновременно делят между собой сотни или тысячи людей, поэтому сайт, увидев запрос с него, почти ничего не узнаёт о том, кто из них его отправил. Ваш адрес выхода делите только вы. Он стабилен, принадлежит одному клиенту, и каждый сайт, который вы через него посещаете, видит один и тот же идентификатор — в точности как домашний IP-адрес, только в другой стране. Если вы хотите раствориться в толпе, толпа из одного человека для этого не годится.
| Параметр | Свой VPS | Коммерческий VPN | Кто выигрывает |
|---|---|---|---|
| Кто ещё использует ваш IP выхода | Никто — он только ваш | От сотен до тысяч, постоянно меняются | Коммерческий, однозначно |
| Кто может логировать ваш трафик | Вы, и только если сами это настроите | Провайдер, согласно политике, которую вы не можете проверить | Свой хостинг |
| Требуемое доверие | Никакого — приватный ключ у вас | Полное, смягчаемое только сторонними аудитами | Свой хостинг |
| Что даст запрос к оператору | Всё, что хостер хранит о вашем аккаунте | Аккаунт, след платежа, метаданные сессий | Зависит от того, как вы оплатили каждый вариант |
| Стоимость в месяц | $8.50 за целый сервер, любое число устройств | $5–13 за подписку, с лимитом на устройства | Свой хостинг — при более чем одном устройстве |
| Выбор страны выхода | Одна — та, где вы развернули сервер | Десятки, переключаются в один клик | Коммерческий |
| Стриминг и геозаблокированные сервисы | Блокируется как IP дата-центра | Блокируется как известный VPN-диапазон | Честно говоря, ни тот ни другой |
| Обход национального файрвола | Ваш адрес никому не известен и нигде не числится | Диапазоны провайдера перечислены и заблокированы | Свой хостинг, решительно |
Читайте эту таблицу не как единый счёт, а как два разных вопроса. Если ваш противник — это сеть, в которой вы сейчас сидите — провайдер, продающий данные о просмотрах, работодатель, инспектирующий TLS, кафе, отель, цензурирующий файрвол — свой хостинг побеждает по каждой строке, которая имеет значение, потому что то, от чего вы прячетесь, находится выше по цепочке от туннеля и не может заглянуть сквозь него. Если ваш противник — это сайт, который вы посещаете, пытающийся связать сегодняшнюю сессию с прошломесячной, то защитой служит именно толпа, и приватный выход тут хуже, чем бесполезен. По-настоящему во второй ситуации оказываются очень немногие, и большинству из них стоит читать про Tor, а не про VPN.
Эти два вопроса путают потому, что индустрия продаёт один и тот же продукт под обеими вывесками. Единственное реально защитимое утверждение коммерческого VPN — это толпа. Всё остальное в рекламной подаче — обещание отсутствия логов, аудиты, юрисдикция регистрации — это попытка компенсировать тот факт, что вы отдаёте свой трафик компании. Свой хостинг убирает компанию из уравнения. Но создать толпу он не может.
Когда свой хостинг — правильный ответ
Самый очевидный случай — сеть, которую вы не контролируете и которой не можете доверять. Wi-Fi на конференции, отели, аэропорты, общее подключение у арендодателя, мобильный роуминг в стране с агрессивным режимом законного перехвата трафика. Во всех этих случаях угроза локальна и пассивна, и туннель хоть куда-нибудь снимает её полностью. То, что этот случай наименее эффектный, не делает его наименее ценным — он применим почти ко всем и почти каждую неделю.
Второй случай — юрисдикция. Туннель, выходящий в Цюрихе, означает, что покидающий его трафик регулируется швейцарским правом, идёт через швейцарского транзитного оператора и находится вне досягаемости того режима, который регулирует ваше собственное подключение. Для людей из стран, где провайдер обязан хранить и выдавать записи о посещённых сайтах, это отнюдь не абстракция. Осознанный выбор страны выхода — одно из немногих решений в области приватности с чистым, понятным эффектом, и сравнение юрисдикций стоит прочитать до развёртывания, а не после.
Третий случай — цензура. Национальные файрволы блокируют коммерческие VPN, перечисляя их диапазоны адресов, и делать это легко, потому что эти диапазоны опубликованы, продаются и активно используются. Одиночный адрес VPS в хостинговой сети ни в одном таком списке не значится — не потому что это хитрый ход, а потому что каталогизировать его попросту незачем. Именно поэтому самые надёжные схемы обхода блокировок всегда были маленькими и личными, а не крупными и коммерческими, — и это тот самый случай, когда толпа становится настоящей помехой.
Четвёртый случай — когда вам нужен стабильный, чистый, управляемый выход не для сёрфинга, а для чего-то другого: достучаться до домашней лаборатории извне, дать небольшой команде доступ к внутренним сервисам, не выставляя их наружу, обслуживать сервис, которому нужен предсказуемый адрес источника, или держать долгоживущую сессию на адресе, который не поменяется у вас под ногами. Это задачи сетевой инженерии, которые коммерческий VPN решить не может в принципе, а VPS за $8.50 решает за один вечер. Страница о нагрузке VPN разбирает подбор размера и сетевые детали.
А теперь аргумент против: если вы не способны поддерживать сервер в актуальном состоянии — не поднимайте его. Заброшенный VPS с открытым SSH-портом — худший исход для приватности, чем любой коммерческий VPN, потому что скомпрометированный выход видит всё и подчиняется кому-то другому. Свой хостинг обменивает проблему доверия на проблему эксплуатации. Это хороший обмен только если вы действительно будете заниматься эксплуатацией, а последний раздел этого руководства сводит её примерно к десяти минутам в месяц.
WireGuard за десять минут: вся конфигурация целиком
WireGuard достаточно мал, чтобы его можно было просто прочитать целиком. Он живёт в ядре Linux, говорит через один-единственный UDP-порт, использует один фиксированный набор современных примитивов без всякого согласования, а вся поверхность его конфигурации — это блоки двух видов: один [Interface], описывающий эту машину, и один [Peer] на каждое устройство, которому разрешено подключаться. Нет никаких удостоверяющих центров, нет наборов шифров, которые можно выбрать неудачно, нет демона, который нужно настраивать. Именно из-за этого минимализма его трудно опасно неправильно настроить, и именно поэтому он почти везде вытеснил альтернативы.
Начните с установки пакета и генерации пары ключей. Сначала выставьте umask 077, чтобы приватный ключ не записался доступным для чтения всем — иначе wg-quick громко пожалуется, и будет прав. wg genkey создаёт приватный ключ, wg pubkey получает из него публичную половину. Сделайте то же самое на каждом клиенте. Публичные ключи обмениваются между собой; приватные никогда не покидают машину, на которой были сгенерированы.
Затем напишите /etc/wireguard/wg0.conf. Таблица ниже — это полный файл для рабочего сервера, ради краткости ничего не выброшено.
| Директива | Что она делает | Что пойдёт не так, если ошибиться |
|---|---|---|
[Interface] | Открывает блок с описанием этого сервера | — |
Address = 10.66.66.1/24, fd42:42:42::1/64 | Адрес сервера внутри туннеля, для обоих семейств | Если пропустить строку v6, у клиентов не будет v6 внутри туннеля, и они могут использовать настоящий адрес в обход него |
ListenPort = 51820 | Единственный UDP-порт, на котором отвечает сервер | Заблокирован файрволом выше по сети — и ничего не подключается; отката на TCP не предусмотрено |
PrivateKey = <server.key> | Приватный ключ сервера, вставленный прямо в файл | Файл доступен для чтения всем, и wg-quick отказывается запускаться |
PostUp = ...masquerade... | Устанавливает source NAT, чтобы пакеты туннеля могли выйти через публичный интерфейс | Без этого пакеты доходят до сервера и отбрасываются — туннель подключается, но ничего не грузится |
PostDown = ...delete... | Убирает то же правило при отключении интерфейса | Устаревшие правила NAT накапливаются от перезапуска к перезапуску |
[Peer] | Открывает блок для одного клиентского устройства | — |
PublicKey = <client.pub> | Идентифицирует и аутентифицирует это устройство | Это и есть вся модель контроля доступа — ключ и есть учётная запись |
AllowedIPs = 10.66.66.2/32, fd42:42:42::2/128 | На сервере — адреса, которые разрешено использовать этому пиру | Слишком широкий диапазон — и один клиент может выдать себя за другого; на клиенте это означает совершенно другое |
Помимо самого файла должны выполняться ещё два условия. Ядро должно быть готово маршрутизировать пакеты: установите net.ipv4.ip_forward=1 и net.ipv6.conf.all.forwarding=1 и пропишите их в /etc/sysctl.d/, чтобы значения пережили перезагрузку. А правило NAT в PostUp должно называть настоящий публичный интерфейс — на большинстве облачных образов это eth0, но лучше проверить через ip route get 1.1.1.1, чем гадать. Неверное имя интерфейса — самая частая причина, по которой первая настройка WireGuard подключается, а дальше никуда не идёт.
Поднимите его командой wg-quick up wg0, убедитесь через wg show, что интерфейс существует и перечисляет ваших пиров, затем выполните systemctl enable --now wg-quick@wg0, чтобы он поднимался после перезагрузки. На стороне клиента файл почти такой же, но с тремя важными отличиями: AllowedIPs становится 0.0.0.0/0, ::/0 — то есть означает маршрутизировать сюда всё, а не принимать трафик из этих источников, — строка Endpoint указывает на публичный адрес и порт сервера, а PersistentKeepalive = 25 поддерживает соответствие живым через домашние роутеры, которые иначе сбросили бы его по таймауту. Для телефонов прогоните клиентский конфиг через qrencode -t ansiutf8 и отсканируйте прямо из терминала. Не пересылайте файлы конфигурации через мессенджеры — внутри лежит приватный ключ.
Четыре утечки, которые обходят туннель
Туннель, который несёт трафик, — это не то же самое, что туннель, который несёт весь трафик, и именно в зазоре между этими двумя понятиями и живут все реальные провалы VPN. Каждый из четырёх случаев ниже — это ситуация, где туннель работает безупречно, а ваш трафик его попросту обходит, и ни один из них о себе не заявляет. Смотреть нужно самому.
DNS. Если клиент продолжает пользоваться тем резолвером, который выдала локальная сеть, туннель несёт ваш трафик, а DHCP-сервер кафе тем временем продолжает получать живую ленту каждого домена, который вы ищете. Одних только имён почти достаточно, чтобы восстановить всю картину. Чтобы это исправить, задайте явную строку DNS = в конфиге клиента, а лучше — поднимите резолвер прямо на VPS, привязанный к адресу туннеля, и направьте клиентов на него: тогда запросы тоже пойдут через туннель и завершатся на машине, которая принадлежит вам. Проверяйте с клиента, а не с сервера, любым тестом на утечку DNS: вы должны увидеть ровно один резолвер, и это должен быть ваш.
IPv6. Классический тихий провал. Если в AllowedIPs на клиенте указан только 0.0.0.0/0, вы сказали операционной системе маршрутизировать через туннель IPv4 и ничего не сказали про IPv6. В сети с двойным стеком — а сегодня это большинство домашних и мобильных сетей — каждый сайт с записью AAAA будет доступен через ваш настоящий адрес, в обход туннеля, при этом тест на утечку, проверяющий только v4, доложит, что всё в порядке. Либо добавьте ::/0 и раздавайте v6-адреса внутри туннеля, либо отключите IPv6 на клиенте полностью. Не делать ни того ни другого — это поведение по умолчанию, и оно неисправно.
Отсутствие kill switch. Когда туннель обрывается — ноутбук уходит в спящий режим, телефон переключается между вышками, сервер перезагружается ради обновления ядра — операционная система «услужливо» откатывается на локальную сеть. Трафик, который вы считали туннелированным, на самом деле таким не является, и вам об этом никто не скажет. В Linux wg-quick со стандартной таблицей маршрутизации уже по умолчанию блокирует, а не пропускает, большую часть трафика при обрыве, но по-настоящему надёжное решение — явное правило файрвола, отбрасывающее всё, что уходит не через wg0. На Android и iOS включите Всегда включённый VPN и Блокировать соединения без VPN. В десктопных клиентах не считайте такую настройку само собой разумеющейся — сначала проверьте, что она вообще есть.
MTU. Не утечка приватности, а причина, по которой люди всё бросают. Инкапсуляция WireGuard стоит 60 байт для IPv4 и 80 для IPv6, поэтому MTU интерфейса по умолчанию, 1420, укладывается в обычный путь на 1500 байт. Через PPPoE, некоторые мобильные сети или второй туннель реальный путь оказывается меньше, и симптом получается странный: пинги ходят, маленькие страницы грузятся, а крупные TLS-рукопожатия зависают навечно. Если это похоже на вашу ситуацию, снизьте клиентский MTU до 1380 или 1280 — и всё просто заработает.
| Проверка | Как её выполнить | Как выглядит успех |
|---|---|---|
| Выход по IPv4 | Запросите свой публичный адрес у любого эхо-сервиса | Адрес сервера, а не ваш собственный |
| Выход по IPv6 | Запросите его снова, явно по IPv6 | v6-адрес сервера — либо полное отсутствие маршрута по v6 |
| DNS | Любой тест на утечку DNS, запущенный с клиента | Один резолвер — тот, что настроили вы |
| Блокировка при обрыве | Остановите туннель и перезагрузите страницу | Страница не грузится — а не тихо загружается |
| MTU | Загрузите большую страницу по TLS в худшей из используемых вами сетей | Загрузка завершается, а не зависает |
| Свежесть рукопожатия | wg show на сервере | Недавнее рукопожатие для каждого ожидаемого пира |
Есть одна вещь, которую VPN не может исправить, и стоит сказать об этом прямо, чтобы вы этого и не ждали: наблюдатель, способный видеть оба конца сразу, может сопоставить их по времени и объёму, есть туннель или нет. Шифрование скрывает содержимое, но не форму разговора. Защита от такого противника требует смешивать свой трафик с чужим через несколько ретрансляторов — именно для этого нужен Tor, и именно этим одноходовой VPN структурно не является. Если это ваша модель угроз, свой VPN — не тот инструмент, и никакая его настройка не сделает его правильным.
Как заставить адрес выхода вести себя прилично в реальном мире
Адрес, из которого выходит ваш туннель, принадлежит хостинговой сети, а значительная часть современного веба сортирует адреса на резидентные и дата-центровые, прежде чем решить, как вас встречать. Стриминговые каталоги, некоторые банки, сайты продажи билетов и немалая часть антифрод-инструментов по умолчанию считают подозрительным всё, что приходит из хостинговой сети. Настройками это не лечится — это свойство того, где физически живёт сервер, и оно в равной мере касается и своего туннеля, и любого коммерческого VPN на рынке. Любой, кто обещает иное, описывает игру в кошки-мышки, которую в данный момент проигрывает.
А вот что действительно различается — так это то, в каких списках числится ваш адрес. Диапазоны коммерческих VPN перечисляются, публикуются и продаются как фиды именно потому, что они крупные, статичные и общие; сайт, который хочет блокировать VPN, просто покупает такой список. Одиночного адреса в обычной хостинговой сети в нём нет. На практике это означает, что свои туннели без проблем проходят через удивительно большую часть обычного веба, который наглухо блокирует коммерческих провайдеров, — и при этом всё равно упираются в стену на тех конкретных сервисах, что блокируют весь трафик из дата-центров. Ждите изредка лишнюю CAPTCHA, не больше.
Есть несколько вещей, которые стоит сделать один раз. Задайте простую, ничем не примечательную запись обратного DNS на адресе, вместо того чтобы оставлять значение провайдера по умолчанию — многие системы репутации читают именно PTR, и обезличенный хостнейм оценивается лучше, чем что-то похожее на инфраструктуру. Держите туннель как можно дальше от порта 25: исходящая почта со свежего хостингового адреса попадает в спам независимо от того, что вы делаете, а проблема доставляемости — это отдельный проект на несколько недель. А если адрес всё же оказался «отравлен» — унаследован от предыдущего арендатора или испорчен действиями одного из ваших же пиров, — просите замену IP, а не боритесь с этим. Мы бесплатно переносим клиентов на свежий адрес в том же префиксе; откройте тикет в панели, и всё будет готово в течение дня.
Последнее, что стоит учесть, — кто ещё сидит за вашим туннелем. Поскольку один адрес выхода делят все пиры, поведение одного человека становится репутацией всех. Домохозяйство — это нормально. А вот группа из двадцати знакомых, половину действий которых вы не отслеживаете, — это ровно тот способ, которым чистый адрес превращается в заблокированный, а жалоба на злоупотребление приходит с именем вашего аккаунта на ней. Если вы раздаёте доступ людям за пределами тех, за кого готовы поручиться, — лучше выделите им отдельный инстанс: за $8.50 в месяц это более дешёвый ответ, чем альтернатива.
Слой, который никто не настраивает: чем вы заплатили за сервер
А вот и провал, который сводит на нет всё описанное выше, и WireGuard тут ни при чём. Трафик покидает ваш адрес выхода. Адрес принадлежит серверу. Сервер принадлежит аккаунту. Аккаунт был открыт по email-адресу и оплачен картой на ваше имя. В этой точке цепочка от трафика обратно к вам состоит из четырёх звеньев, полностью задокументирована и лежит в биллинговой базе провайдера, дожидаясь, пока кто-нибудь её запросит. Вы не убрали наблюдателя — вы просто переместили его туда, где ведут записи гораздо лучше.
В этом и заключается разница между VPN, который меняет вашу позицию в сети, и VPN, который меняет вашу уязвимость перед раскрытием, — и решается она на этапе оплаты, а не в конфиг-файле. Если причина, по которой вам нужен приватный выход, в том, что провайдер или государство не должны видеть историю ваших посещений, а сервер при этом арендован на ваше настоящее имя через оплату картой, — схема всё равно работает: провайдер и правда не может заглянуть сквозь туннель. Но это улучшение приватности против одного конкретного наблюдателя, а не против настроенного докопаться до сути. Будьте честны с собой в том, что именно вы покупаете.
Закрыть этот разрыв — значит сделать так, чтобы ни аккаунт, ни платёж не могли вас идентифицировать. На практике это означает отсутствие проверки личности при регистрации — одноразовый email-адрес и ничего больше, что и означает на практике хостинг без KYC, — и оплату способом, никак не связанным с вашим именем. Monero — чистый ответ на этот вопрос, потому что суммы и стороны сделки вообще не попадают в публичный леджер; пошаговая инструкция целиком занимает около пяти минут. Bitcoin тоже работает, но оставляет постоянную публичную запись, так что его приватность ограничена приватностью монет на входе, и сравнение этих двух вариантов стоит прочитать прежде, чем решить, что разница не имеет значения.
Дальше идёт юрисдикция, которая определяет, что вообще можно было бы истребовать принудительно, даже если бы кто-то попросил. Провайдер, зарегистрированный вне сферы 14-Eyes, с дата-центрами в странах, чьё законодательство о хранении данных не требует сохранять записи трафика, структурно не способен выдать историю посещений, которую он никогда не собирал. Это более сильная гарантия, чем обещание не подглядывать. Полную версию этого аргумента — что в арендованном сервере реально прослеживается, а что нет, — честный ответ — здесь, включая те моменты, которые звучат не так обнадёживающе, как в маркетинге.
Подбор размера: насколько маленький сервер реально нужен туннелю
Эксплуатировать WireGuard на удивление дёшево. Он живёт в ядре, поэтому пакеты никогда не копируются в userspace; он использует ChaCha20-Poly1305, который быстр на любом CPU и не нуждается в аппаратном ускорении AES, чтобы оставаться быстрым; и хранит на каждый пир всего несколько килобайт состояния — и ничего больше. Одно современное ядро прокачивает где-то около гигабита зашифрованного трафика, а память практически никогда не становится ограничением. Практический предел туннеля на VPS — это аплинк, а не процессор.
А значит, большинство людей выбирают тариф не по той причине. Домохозяйство из пяти устройств, которые весь день сёрфят, смотрят стримы и созваниваются по видео, и близко не подходит к пределам младшего тарифа — CPU простаивает, а трафик безлимитный. Берите тариф побольше, когда у вас много одновременных пиров, гоняющих реальный трафик разом, или когда вам нужен запас по аплинку, а не потому, что туннель «на вид» должен быть требовательным.
| Что вы обслуживаете | Одновременных пиров | Тариф | Реальное ограничение |
|---|---|---|---|
| Личное использование — ноутбук, телефон, планшет | 1–5 | Starter, $8.50/мес | Никакого. CPU простаивает, 1 Gbps безлимитный. |
| Домохозяйство или небольшая команда | 5–20 | Starter или Growth, $13.50/мес | Пиковая одновременная полоса, но никогда не CPU. |
| Более крупная группа, устойчивый трафик | 20–80 | Growth или Business, $20/мес | Аплинк на 2.5–5 Gbps; у CPU ещё есть запас. |
| Выход в сеть как сервис для сообщества | 80–250 | Business или Pro, $27.50/мес | Теперь важен и CPU, и то, что поведение одного пира становится репутацией всех. |
| Шифрование на полной скорости канала для одного хоста | Любое | Scale, $34.50/мес | 10 Gbps безлимитный, несколько ядер, чтобы распределить криптографию. |
На то, как ощущается туннель, локация влияет сильнее, чем железо. Каждый отправленный пакет делает крюк через сервер, поэтому ваша задержка до чего угодно становится вашей задержкой до сервера плюс задержкой сервера дальше. Выбирайте дата-центр поближе к себе, если туннель включён постоянно и вам важна отзывчивость; выбирайте поближе к тому, к чему обращаетесь, если это не так. Амстердам — кратчайший путь до большей части Европы, Цюрих и Рейкьявик меняют несколько миллисекунд на юрисдикции с более сильным законодательством о приватности, а Бухарест находится между ними по обоим параметрам.
Ещё кое-что стоит знать перед выбором: рукопожатие WireGuard имеет узнаваемую форму «на проводе», и файрвол с глубокой инспекцией пакетов может опознать и отбросить его, вообще ничего не зная о пункте назначения. В большинстве мест мира это никогда не всплывает. В горстке сетей это означает, что один WireGuard не подключится и перед ним понадобится обфусцирующий транспорт — Shadowsocks, стек xray или v2ray, либо один из форков WireGuard, дополняющих рукопожатие. Все они запускаются на том же самом инстансе — это добавленный сверху слой, а не другой тариф.
Эксплуатация годами, не думая об этом
Эксплуатационная нагрузка личной конечной точки WireGuard близка к нулю, но не равна нулю в точности, и именно эта разница отделяет приватный выход от скомпрометированного. Всё, что ниже, настраивается один раз — кроме последнего пункта, который занимает примерно десять минут в месяц.
Сначала закройте входную дверь. SSH только по ключам — PasswordAuthentication no, PermitRootLogin prohibit-password — и файрвол, принимающий из интернета ровно две вещи: UDP-порт WireGuard и SSH. Если хотите основательности, перенесите SSH так, чтобы он слушал только адрес туннеля, — тогда единственный доступный сервис на публичном интерфейсе будет сам WireGuard, а WireGuard вообще не отвечает на неаутентифицированные пакеты. Сканирование портов сервера тогда не вернёт ничего, а это по-настоящему необычное свойство для сервера, смотрящего в интернет.
Включите автоматические обновления безопасности и дайте им работать. Ядро здесь важно так, как не важно на большинстве серверов, потому что реализация WireGuard — его часть. Перезагружайтесь, когда приходит обновление ядра; wg-quick@wg0 под systemd сам поднимет туннель обратно, а клиенты с PersistentKeepalive переподключатся за секунды, и никому не придётся ничего трогать руками.
Обращайтесь с ключами как с учётными записями, потому что это они и есть. Одна пара ключей на устройство, никогда не делить между двумя. Отозвать доступ — значит удалить соответствующий блок [Peer] и выполнить wg syncconf wg0 <(wg-quick strip wg0), что применяет изменение, не обрывая ничьи чужие сессии. Делайте резервную копию /etc/wireguard/ куда-то в зашифрованном виде и за пределами машины — потеря означает ручную повторную регистрацию каждого устройства. Если на сервере хранится что-то ещё для вас важное, полное шифрование диска — разумное дополнение, хотя для чистого туннеля на диске почти нечего шифровать, кроме этого единственного каталога.
Мониторьте без логирования. wg show показывает время последнего рукопожатия для каждого пира, а этого достаточно, чтобы ответить на все эксплуатационные вопросы, которые у вас реально возникнут: работает ли, подключено ли это устройство, когда оно выходило на связь в последний раз. Удержитесь от искушения добавить учёт трафика или логи подключений: вы построили всё это именно для того, чтобы никто не хранил запись о том, куда идёт ваш трафик, а человек, который вероятнее всего создаст такую запись, — теперь вы сами. С нашей стороны отключать нечего — ни netflow, ни зеркалирования портов, ни перехвата трафика какого бы то ни было рода, а ARP-таблицы устаревают за 24 часа, что задокументировано на странице о приватности, а не просто обещано мелким шрифтом.
Вот и вся работа. Пятнадцать строк конфигурации, один файрвол, обновления безопасности по расписанию и ежемесячный взгляд на wg show. Сложная часть в собственном VPN никогда не заключалась в самом VPN — она в том, чтобы помнить: туннель лишь переносит наблюдателя, и вся ценность этого переноса зависит от того, закрыты ли описанные выше четыре утечки и не ведёт ли аккаунт под ним обратно к вам.