-
Этот пост для тех, кто знает, зачем ему VPN
на своём серваке. Если вас устраивает браузерное расширение, опера
турбо и прочие способы, никто не заставляет вас платить за свой
сервак и настраивать его.
-
Предполагается, что вы умеете пользоваться
серваком на ubuntu на минимальном уровне и непонятные для себя вещи
можете нагуглить сами.
-
Пост содержит ряд рискованных шагов, автор не
несет ответственности за ваши действия с деньгами, вы всё делаете
на свой страх и риск, перепроверяйте каждую операцию и не верьте
наслово.
Этот пост - не совсем гайд, просто делюсь
опытом на какие грабли наткнулся на своём пути. Так что будет
многобуков.
Предыстория
Год назад, когда появились первые слухи о
закрытии ютуба, мне захотелось сделать свой собственный сервак с
VPN, чтобы иметь стабильный доступ к ютубу без ограничений.
Браузерные расширения типа антизапрета конечно работали и работают
до сих пор, но:
-
скорость там сильно хромает и бывает
нестабильной. это - главная причина, мне всегда хотелось VPN, все
мощности которого будут лично для меня, и его не придется делить с
тысячами других юзеров;
-
когда придёт время, власти будут вырубать
наиболее популярные решения, и такие расширения пойдут под нож
первыми;
-
непонятно, что там с безопасностью.
Поэтому было решено пилить свой собственный
сервак.
Был арендован самый дешевый VPS от FirstByte
в Амстердаме, на него установлен Wireguard, всё работает,
блокировки от РКН обходятся. Но быстро выяснилось, что кроме
блокировок с нашей стороны есть ещё и ограничения на пользователей
из РФ от западных компаний. Например, в этом были замечены
https://redis.com
и https://www.perforce.com/
Но как они определяют, что мы из России, если
сервак в Нидерландах и, судя по сайту https://2ip.io/ru/privacy/
IP адрес тоже нидерландский? Знающие люди
подсказали мне, что проверять надо не на 2ip, а тут:
А они показывают Россию. Выяснилось, что при
проверке ip адреса через https://www.ripe.net/ можно
установить владельца адреса - компанию firstbyte, и именно отсюда
они знают, что мы из РФ. Сейчас, год спустя, при проверке firstbyte
выходят ip адреса Cloudflare. Кроме того, здесь в комментарии
#comment_269943379 человек
пишет, что его VPN на VPS от firstbyte, расположенный в Финляндии,
определяется как финский, так что, возможно, сейчас имеет смысл
попробовать firstbyte, т.к. там доступны российские методы
оплаты.
Тем не менее, год назад ничего этого не было,
и передо мной встала задача найти VPS за рубежом и каким-то образом
оплатить его из РФ.
Был найден хостинг в США - racknerd, который
можно было оплатить через WebMoney. Оплата прошла, сервак в Ashburn
(рядом с Вашингтоном), VPN работает, блокировок нет ни с нашей, ни
с их стороны, скорость высокая, пинг так себе. Прекрасно.
Прошел год, неделю назад пришло время
расплаты оплаты. Внезапно, WebMoney не принимается. Из
доступных способов - только крипта. Спросил совета тут: Вопрос - как совершить оплату криптой?
Кароче, как оказалось - ничего сложного в крипте нет, сервак в
порядке, VPN будет работать ещё год, так что далее рассказываю как
всё это делается.
Регистрация на хостинге и оплата VPS
Сначала регаемся на хостинге.
Кто хочет сказать "спасибо" за этот пост -
вот моя реферал очка: https://my.racknerd.com/aff.php?aff=4692
Для идеологических противников рефералок -
сюда: racknerd.com
Но не спешите покупать сервак - обычный тариф
стоит $23 за год. Чтобы получить скидку, нужно тыкать на розовый
баннер вверху "NEW YEAR 2023 DEALS", либо сразу переходить по
ссылке https://www.racknerd.com/NewYear/
В принципе, если на нашей VPS будет только
VPN, то подойдет любой тариф. Главное, что тут нас должно воловать
- это ограничение трафика. Год назад я не знал, сколько моя семья
потребляет трафика на инсту и прочие заблокированные сайты, и
поэтому для подстраховки выбрал второй тариф. Теперь уже есть
статистика и выяснилось, что мы редко выходим за пределы 100гб в
месяц. Кароче, если вы не собираетесь качать торренты, то можно
смело брать самый дешевый тариф и не париться. Таким образом, VPN
на VPS в США обойдется нам дешевле чем в 1$ в месяц. По сравнению с
тем что предлагают в других постах по 500р в месяц, это - вообще ни
о чем.
Внимание: если хотите накатить ubuntu 22.04,
рекомендуется взять тариф с 1гб ОЗУ. Если вас устраивает ubuntu
20.04, можно брать тариф с 512мб ОЗУ. Для наших целей никакой
разницы, всё равно 20.04 будет поддерживаться аж до 2025г, а до
него ещё дожить надо.
Выбираем в поле Operating System ubuntu
20.04. Локации без разницы, они близко друг к другу расположены и
мало отличаются по пингу до РФ. Жмем Contunue.
На следующей странице жмем Checkout,
заполняем данные о себе. Нужно ввести адрес проживания, и в этом
месте я на всякий случай ввел фейковый адрес из США чтоб мой
аккаунт не снесли за то что я из России. Возможно, так делать не
следовало, но пока что проблем не было. Для генерации фейкового
адреса можно воспользоваться онлайн-генераторами, например
https://www.fakepersongenerator.com/Random/generate_address
В Payment Details выбираем Crypto (BTC,
LTC, USDT) и переходим к оплате.
Обращаем внимание, что оплатить можно не
всякой криптой, а только опделенными валютами в определенных
сетях:
For crypto payments, we currently support
Bitcoin network, Bitcoin Cash network, Litecoin network, Dogecoin
network and ETH network (ERC20), Binance network is NOT
supported.
Жмём Pay Now и нам предлагается одна из
криптовалют на выбор. Я выбрал Litecoin (LTC) т.к. там наименьшие
комиссии. Нам дают адрес крипто-кошелька, на котором ожидается
перевод оплаты за хостинг. Нужно успеть совершить оплату за 2
часа.
Чтобы совершить оплату криптой, никаких
терабайтов блокчейнов качать не нужно, и даже заводить свой
крипто-кошелек нет необходимости, и тем более нет смысла регаться
на крипто-бирже. Достаточно через обменник найти человека, которому
мы на счет переводим рубли, а он по указанному адресу переводит
крипту.
Существует множество разных обменников с
разной репутацией и возможностями. Чтобы ориентироваться среди них,
идём на агрегатор обменников (на пикабу этот домен запрещен,
гуглите бэстчендж).
В левой колонке таблица, прокручиваем её до
раздела "Интернет-банкинг", слева жмём кнопку Сбербанк RUB или
выбираем свой банк. Справа выбираем Litecoin LTC.
Теперь в таблице справа отображаются
подходящие нам обменники. Жмем вкладку "Калькулятор", переключаем в
режим "Получаете", вставляем сюда ту сумму которую нам показала
платёжка (на странице с адресом кошелька) и жмем "Рассчитать".
Теперь черным выделены те обменники, на
которых можно такой обмен. Из предложенных выбираем один,
ориентируемся в первую очередь на отзывы (крайний правый столбец) и
на условия оплаты (круглешки в крайнем левом столбце):
Я обменивался через multichange, проблем не
возникло. Для верификации попросили фото карты на фоне их сайта (с
одной стороны, конечно). Вставляете сюда адрес LTC и точную сумму с
сайта платёжки, они показывают реквизиты, скидываешь на них сумму в
рублях, на указанный адрес приходит крипта.
Готово, VPS оплачен на год:
Настройка VPS
Далее жирным текстом указаны команды для
выполнения в локальной консоли или на сервере.
Первым делом надо отключить авторизацию по
логину и паролю, чтобы боты не сбрутили пароль и не проникли на
сервак.
Сначала генерим у себя локально пару ssh
ключей
Через консоль (на линуксе) или ssh-клиент
putty (на винде) заходим по тому паролю, что нам предоставил
хостер, где 123.123.123.123 - ip адрес VPS.
Копируем публичный ключ на сервер
ssh-copy-id root@123.123.123.123
sudo nano /etc/ssh/sshd_config
Откроется текстовый редактор, в нём находим
следующие строки и прописываем
PasswordAuthentication no
Вместо 4567 - любой нестандартный
номер порта по вашему усмотрению.
Сохраняем, выходим из текстового
редактора.
Перезагружаем ssh сервис чтобы изменения
вступили в силу
После этого для входа по ssh придется
указывать порт ключом -p
ssh root@123.123.123.123 -p 4567
apt update && apt upgrade -y
Далее, необходимо закрыть все порты, кроме
тех что нам нужны. Для этого воспользуемся утилитой ufw. Будьте
внимательны при использовании ufw, т.к. при первом запуске без
настроек он блокирует вообще всё, и после выхода с сервера обратно
мы залогиниться не сможем. Если таки это произошло - не беда, идём
в панель управления сервера и делаем сброс, но лучше чтобы всё
получилось с первого раза.
Открываем конфиг ufw в текстовом
редакторе
nano /etc/ufw/before.rules
Прокручиваем до раздела "ok icmp codes for
INPUT"
Закомментируем строку "-A ufw-before-input -p
icmp icmp-type echo-request -j ACCEPT"
И добавляем туда новую строку
-A ufw-before-input -p icmp icmp-type
echo-request -j DROP
Это нужно для успешного прохождения теста
Определение туннеля (двусторонний пинг) https://2ip.io/ru/privacy/
(не помню, на кой ляд оно нужно, но я зачем-то сохранил это у себя
в заметках)
4567 - ранее мы его указывали как порт для
ssh
54321 - любой нестандартный порт для
wireguard (понадобится позднее)
Перезапускаем ufw для применения
изменений
ufw disable && ufw enable
Включаем автоматические обновления
безопасности.
apt-get install
unattended-upgrades
nano
/etc/apt/apt.conf.d/20auto-upgrades
В конфиге прописываем следующие опции
APT::Periodic::Update-Package-Lists
"1";
APT::Periodic::Unattended-Upgrade
"1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval
"7";
Выбор софта для VPN
Существует множество различных технологий для
реализации VPN сетей. Наиболее популярными являются OpenVPN и
Wireguard. Вместе с OpenVPN можно сделать Shadowsocks для
маскировки трафика под https, если требуется обход блокировок VPN.
Есть также готовый софт, который всё сделает для вас, и
автоматически выбирает наиболее подходящие технологии - SoftEther,
Amnezia и тд. Но т.к. у нас пока никакие технологии не запрещены, я
взял самую простую и быструю - Wireguard. Когда её заблокируют,
тогда можно будет накатить что-нибудь посложнее. Вы можете выбрать
любую другую технологию, наиболее простая в установке и
использовании это, наверное, Amnezia VPN, но сам я не пробовал.
Установка Wireguard на сервере
Для упрощения установки воспользуемся готовым
скриптом отсюда:
Конечно же, готовые скрипты - это всегда
источник уязвимости, надо проверять что в них написано, и тд.
Запускаем автоматическую установку. В
процессе нас спросят, через какой порт будет работать wireguard -
пишем тот что ранее открыли в ufw (в примере он указан как
54321). Также нам предложат прописать адреса днс, если
хотите adguard - оставьте дефолтные, в ином случае пропишите адреса
cloudflare 1.1.1.1 и гугла 8.8.8.8.
Далее нужно добавить новых юзеров, отдельно
для каждого устройства на котором собираетесь использовать VPN.
Повторно запускаем ту же команду. Для смартфона будет показан
qr-код, который надо отсканировать с приложения, для ПК будет
сгенерирован конфиг, который необходимо будет скачать к себе.
Настройка Wireguard на клиенте
Эту тему уже миллиард раз везде разбирали, не
буду повторяться и сошлюсь на этот пост, тут в конце есть настройка
на винде и смартфонах, со скриншотами: VPN на собственном сервере без настройки
Для тех кто сам разберется - ссылка на
официальный сайт: https://www.wireguard.com/install/
А вот чего я нигде не видел - как сделать
автоматическое переключение на wireguard только для заблокированных
сайтов, а на обычные сайты ходить напрямую, чтобы не дергать
постоянно переключатель подключений.
Описываю как сделать это на линуксе.
Итак, вот мы создали на серваке юзера и
получили его конфиг, допустим WireGuard.conf
sudo nmcli connection import type
wireguard file WireGuard.conf
sudo nmcli connection modify WireGuard
connection.autoconnect no
Далее воспользуемся утилитой Wireproxy.
Она поднимает локальный socks5-proxy и весь
трафик оттуда перенаправляет на VPN. Таким образом в системе VPN
выключен, но локально в этом прокси он включен.
Остаётся лишь подключиться к этому
socks5-proxy и направить в него трафик.
Устанавливаем wireproxy в дистр любым удобным
способом.
Создаём конфиг wireproxy.conf со следующим
содержимым.
WGConfig = WireGuard.conf
Это мы ссылаемся на конфиг wireguard нашего
юзера.
BindAddress = 127.0.0.1:25565
BindAddress = 127.0.0.1:25344
Единственное, что нас тут интересует - адрес
и порт в последней строке.
Запускаем wireproxy через консоль. Можно
добавить его в автозапуск и он будет работать в фоне.
Ставим в браузере расширение SwitchyOmega
Создаём там New Profile - Proxy profile -
прописываем имя - Create.
В настройках Protocol - SOCKS5, сервер
127.0.0.1, порт 25344 (всё как в конфиге).
Применяем изменения кнопкой Apply
Changes.
Теперь, при заходе на любой сайт у расширения
появится счетчик ошибок загрузки. Жмем на кнопку расширения, а там
- N failed resources.
Затем выбираем, какие сайты должны всегда
ходить по VPN:
Перезагружаем страницу (иногда необходимо
несколько раз перезагрузить) и сайт прогрузится через VPN.
Работает идеально, за исключением инсты и
фейсбука. Там лучше не добавлять условия в это расширение, а
переключать VPN на уровне системы.
Заключение
Гайд получился объемным, я мог что-то
упустить, так что задавайте вопросы, делитесь своим опытом, что
можно улучшить, дополнить, оптимизировать и тд.
Душно? Да, душно, сложно, много жопочасов
уходит на настройку всего этого. Зато оно своё, работает как часы,
за год использования вообще не потребовало внимания и не падало,
скорость максимальная. Кароче, лично я доволен.