В данной заметке я расскажу вам про то, как раскатать свой собственный VPN сервер на VDS. В качестве VPN будет использоваться WireGuard, потому что это самая передовая технология VPN которая даёт наибольшую производительность в условиях ограниченных ресурсов. Данная статья не ставит целью разобраться с работой с WireGuard, лишь установить максимально быстро и просто.
Вот что обещает производитель моего мобильного роутера:
Поиск vds
Первое, что нужно сделать, это найти подходящего хостера для покупки VDS. В этом могут помочь специальные сервисы, такие как:
Когда-то давно, когда я выбирал себе хостера, я наткнулся на следующий список компаний принимающих к оплате BTC. Я предпочел использовать HostSailor
.
Установка
-
Берем самый дешёвый vps с приемлемым количеством трафика, тут важный момент, для корректной работы сервиса нужно будет работать с модулями ядра линукса это значит что подайдёт не любой тип виртуализации.
OpenVZ
- не подходит так как это виртуализация на уровне ядра, нам нужна -KVM
, это полноценная виртуалка которая позволит нам запустить хоть шиндус на сервере. -
Ставим debian 11.
Все шаги между этими 2мя пунктами я пропущу, т.к. у любого хостера навалом подобной информации в справке.
Настройка сервера (Debian)
- Подключится через ssh под рутом (
ssh admin@<YOU IP>
) и обновить систему.
apt update
apt upgrade
apt install net-tools sudo wireguard-tools mawk grep iproute2 qrencode iptables
Если сервер с очень маленьким количеством ОЗУ, например 256 или 512 мб, то попытка обновления системы может повалить ее, так что не вводим apt upgrade
, выбора все равно нет.
- Создать нового пользователя.
Это необходимо для того чтобы, было невозможно подключится к серверу из под рута.
useradd -m -s /bin/bash admin
passwd admin
usermod -aG sudo admin
- Проверить какие сервисы висят на портах.
Хостеры часто любят поставить какой-то софт при установке, например Apache. Наша задача удалить его весь, т.к. он потенциальная дыра в безопасности. В результате должен остатся только sshd.
netstat -tulpn
Для отключения лишних сервисов необходимо сделать следующее :
/etc/init.d/apache2 stop
update-rc.d apache2 disable
- Для увелечения безопасности настроить ssh:
nano /etc/ssh/sshd_config
- Сменить порт:
#Port 22 # ---> раскомментировать, сменить на любое число (1024 до 64000)
- Ищем параметр
PermitRootLogin
и ставимno
- Ищем параметр
PermitEmptyPasswords
и ставимno
- Запретить доступ по ssh всем кроме user: добавить внизу
AllowUsers admin
- Перезапускаем sshd и реконектимся.
service sshd restart
Здесь нужно быть крайне внимательным, в случае ошибки в предыдущих пунктах или утери пароля, вы не сможете больше получить доступ к северу. Для коннекта нужно сделать следующее:
ssh -p <PORT> admin@<YOU IP>
Установка WIREGUARD
Здесь нe большое отступление. Мы бы, конечно, могли бы установить VPN с нуля и настроить все ручками, как например тут и тут, но сегодня наша задача получить готовое, а главное удобное для использования решение а не приисполниться в своем познании, поэтому воспользуемся готовым скриптом, который разрулит всю рутину за нас.
- Скачиваем и запускаем скрипт:
wget https://raw.githubusercontent.com/burghardt/easy-wg-quick/master/easy-wg-quick
chmod +x easy-wg-quick
./easy-wg-quick user_1
sudo wg-quick up ./wghub.conf
Ввод предпоследний команды настроит конфиг для первого клиента с именем user_1
. Конфиг будет доступен в виде:
- конфиг файла -
wgclient_user_1.conf
. - qr код -
wgclient_user_1.qrcode.txt
, его можно вывести в терминале командойcat wgclient_user_1.qrcode.txt
- uci -
wgclient_user_1.uci.txt
После добавления нового клиента нужно обязательно перезагрузить интерфейс:
sudo wg-quick down ./wghub.conf
sudo wg-quick up ./wghub.conf
UDP: Дальнейшее было на debian 10, на Debian 11 проблема не воспроизвелась.
После чего я столкнулся с проблемой, при попытки запустится выдавалось такое сообщение:
admin@my-vpn:~$ sudo wg-quick up ./wghub.conf
[#] ip link add wghub type wireguard
RTNETLINK answers: Operation not supported
Unable to access interface: Protocol not supported
[#] ip link delete dev wghub
Cannot find device "wghub"
Также попытка подгрузить модуль wireguard
, тоже не успешна:
admin@my-vpn:~$ sudo modprobe wireguard
modprobe: FATAL: Module wireguard not found in directory /lib/modules/4.19.0-6-amd64
Решение тут:
sudo apt install linux-headers-$(uname -r|sed 's/[^-]*-[^-]*-//')
sudo wg-quick up ./wghub.conf
После установки хедеров, вводим команду запуска сервера и наши конфиги начинают работать.
Клиенты
Интересные ссылки: