VPN на своём сервере с IP адресом из США за 1$ в месяц
После этого коммента на меня подписалось 10 человек, так что пост специально для вас и для @bugagaggi, @Bs1234, @SvinkiPilki.
Дисклеймер:
Этот пост для тех, кто знает, зачем ему 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-keygen
Через консоль (на линуксе) или ssh-клиент putty (на винде) заходим по тому паролю, что нам предоставил хостер, где 123.123.123.123 - ip адрес VPS.
ssh root@123.123.123.123
Копируем публичный ключ на сервер (UPD: для пользователей Windows - смотрите пункт 2 в комментарии #comment_271568783)
ssh-copy-id root@123.123.123.123
Меняем настройки ssh
sudo nano /etc/ssh/sshd_config
Откроется текстовый редактор, в нём находим следующие строки и прописываем
Port 4567
PasswordAuthentication no
Вместо 4567 - любой нестандартный номер порта по вашему усмотрению.
Сохраняем, выходим из текстового редактора.
Перезагружаем ssh сервис чтобы изменения вступили в силу
sudo service ssh restart
После этого для входа по ssh придется указывать порт ключом -p
ssh root@123.123.123.123 -p 4567
Обновляем сервер
apt update && apt upgrade -y
Далее, необходимо закрыть все порты, кроме тех что нам нужны. Для этого воспользуемся утилитой ufw. Будьте внимательны при использовании ufw, т.к. при первом запуске без настроек он блокирует вообще всё, и после выхода с сервера обратно мы залогиниться не сможем. Если таки это произошло - не беда, идём в панель управления сервера и делаем сброс, но лучше чтобы всё получилось с первого раза.
Устанавливаем ufw
apt install 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/
(не помню, на кой ляд оно нужно, но я зачем-то сохранил это у себя в заметках)
Открываем порты:
ufw allow 80
ufw allow 443
ufw allow 4567
ufw allow 54321
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 на сервере
Для упрощения установки воспользуемся готовым скриптом отсюда:
Конечно же, готовые скрипты - это всегда источник уязвимости, надо проверять что в них написано, и тд.
Устанавливаем качалку
apt install -y curl
Качаем скрипт
Делаем его исполняемым
chmod +x wireguard-install.sh
Запускаем автоматическую установку. В процессе нас спросят, через какой порт будет работать 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 нашего юзера.
[TCPClientTunnel]
BindAddress = 127.0.0.1:25565
Target = localhost:25565
[TCPServerTunnel]
ListenPort = 3422
Target = localhost:25545
[Socks5]
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 на уровне системы.
Заключение
Гайд получился объемным, я мог что-то упустить, так что задавайте вопросы, делитесь своим опытом, что можно улучшить, дополнить, оптимизировать и тд.
Душно? Да, душно, сложно, много жопочасов уходит на настройку всего этого. Зато оно своё, работает как часы, за год использования вообще не потребовало внимания и не падало, скорость максимальная. Кароче, лично я доволен.