Найти тему

Свой VPN для телефона или компьютера на собственном сервере на базе Ubuntu, Wireguard без ограничений на количество устройств

Оглавление

Встала задача настроить VPN для использования на телефоне, которая была успешно выполнена и теперь не нарадуюсь :)

Шаг 1. Заказываем сервер для VPN

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

Мой выбор пал на - https://hexcore.ru/v11176, необходимо зарегистрироваться и далее добавить виртуальный сервер.

-2

Далее выбираем в форме регион

-3

В качестве ОС выбираем Ubuntu

-4

Тариф можно выбрать самый дешевый, каких то проблем с ним я не заметил, все работает очень быстро

-5

Завершаем создание виртуального сервера, нажав на кнопку создать сервер.

-6

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

Через пару минут на почту придут данные для подключения к серверу. Соответственно нужно подключиться к нему по ssh.

Для примера предположим что мы получили следующие данные

Сервер: 251.51.71.156
Пользователь root
Пароль Jkgep5gre25er55

Шаг 2. Настраиваем сервер

Далее необходимо сгенерировать ssh ключи для подключения к серверу, так как вход по паролю отключим.

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

ssh-keygen -t rsa -b 4096 -f ~/.ssh/vpn

Отправляем ключ на сервер для дальнейшего подключения без пароля, при запросе пароля вводим пароль от сервера - Jkgep5gre25er55

ssh-copy-id -i ~/.ssh/vpn root@251.51.71.156

Далее подключаемся к сервера, при запросе пароля вводим - Jkgep5gre25er55

ssh root@251.51.71.156

Подключившись к серверу, обновим ПО

sudo apt-get update
sudo apt-get upgrade

Настроим подключение по SSH по ключу, отредактировав файл /etc/ssh/sshd_config. Запретим вход для пользователя root, и разрешим вход по ключу

# PermitRootLogin yes
PubkeyAuthentication yes

Перезапускаем службу

systemctl restart ssh

Настраиваем фаервол

ufw enable
ufw default deny incoming
ufw default allow outgoing
ufw allow 22

В дальнейшем подключаться можно будет по ssh по ключу так

ssh -i ~/.ssh/vpn root@251.51.71.156

Шаг 3 Настраиваем VPN

Будем использовать WIreGuard, для этого установим его.

apt install wireguard

Конфигурация сервера

После установки переходим в папку с настройками и генерируем ключи сервера

cd /etc/wireguard/
wg genkey | sudo tee ./privatekey | wg pubkey | sudo tee ./publickey

Создаем файл конфигурации wg0.conf со следующем содержимым

[Interface]
Address = 10.0.0.1/24
ListenPort = 66001
PrivateKey = cJ/2K0n......7Y9ll2lM=
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Interface] - настройки для сервера VPN

Address - адрес сети в которой будут объединены все клиенты VPN, его можно не менять

ListenPort - порт, произвольный по которому будем подключаться к VPN

PrivateKey - приватный ключ сервера из файла /etc/wireguard/privatekey

PostUp и PostDown - оставляем как есть

Конфигурация WireGuard для клиента

Создаем ключи для подключения клиента к VPN через телефон

mkdir clients
cd clients
wg genkey | sudo tee ./client | wg pubkey | sudo tee ./client.pub

Создаем файл конфигурации для клиента (телефона) /etc/wireguard/clients/client.conf со следующим содержимым

[Interface]
PrivateKey = KNvuXo....x8vQWU=
Address = 10.0.0.2/32
DNS = 8.8.8.8, 1.1.1.1, 1.0.0.1
[Peer]
PublicKey = 49n...WsGcPB0Q=
AllowedIPs = 0.0.0.0/0
Endpoint = 251.51.71.156:66001
PersistentKeepalive = 180

Здесь [Interface] - настройки подключения клиента

PrivateKey - приватный ключ клиента из файл /etc/wireguard/clients/client

Address - локальный адрес клиента с VPN сети, указывать нужно для каждого клиента свой адрес, например 10.0.0.2/32, 10.0.0.3/32, 10.0.0.4/32, ...

[Peer] - настройки подключения к серверу, для всех клиентских конфигурационных файлов подключений этот блок будет одинаковым

PublicKey - публичный ключ сервера, содержимое файла /etc/wireguard/publickey

Endpoint - это IP адрес сервера и порт подключения

Добавляем информации о клиенте в конфигурацию сервера

После добавления клиента, необходимо в конфигурацию сервера внести запись о клиенте. Для этого добавим блок [Peer] для каждого клиента в файл /etc/wireguard/wg0.conf и приведем к следующему виду

[Interface]
Address = 10.0.0.1/24
ListenPort = 66001
PrivateKey = cJ/2K0n......7Y9ll2lM=
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = DTZd....0/R8=
AllowedIPs = 10.0.0.2/32

[Peer] - это настройки подключения для клиентов VPN ( телефона ) . Таких блоков может быть несколько

PublicKey - публичный ключ клиента из файла /etc/wireguard/clients/client.pub

AllowedIPs - IP адрес клиента в сети, который указан в файле конфигурации подключения клиента в файле /etc/wireguard/clients/client.conf в блоке [Interface] параметр - Address.

Запускаем VPN

Для запуска выполним команду

systemctl enable wg-quick@wg0.service

После добавления клиента, сервис необходимо перезапустить

systemctl restart wg-quick@wg0.service

Добавляем правило в фаервол

ufw allow 66001/udp

Подключаем телефон к VPN

Подготовим qr код с настройками подклчюения, для использования на телефоне.

Установим необходимую утилиту для генерации qr кода

apt install qrencode

После этого переходим в директорию с настройками для клиентов и генерируем qr code

qrencode -t ansiutf8 < /etc/wireguard/clients/client.conf

В результате появится в консоли qr код

На телефона устанавливаем приложение WireGuard. После установки запускаем его. На главном экране будет предложение добавить туннель - нажимаем и выбираем добавить по QR коду.

Сканируем qr код из консоли, который получили ранее. Далее интуитивно понятно все в телефоне. Соглашаемся с добавлением конфигурации VPN и включаем его.

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

Дальше можно проверить свой IP адрес - он должен быть тот же что и IP адрес сервера. Проверить свой IP можно через любой доступный сервис в интернете.

WireGuard клиент на Arch Linux

Устанавливаем wiregaurd

sudo pacman -S wireguard-tools
sudo pacman -S resolvconf

На локальной машине создаем файл /etc/wireguard/client.conf для подключения к vpn. Содержимое файла копируем из файла настроек для клиента, которые создавали на сервере с vpn (/etc/wireguard/clients/client.conf)

Далее запускаем vpn на клиенте

wg-quick up client

Для остановки vpn выполняем

wg-quick down client

Проверить свой ip можно перейдя по ссылке - https://ifconfig.me/ip

WireGuard Клиент на Centos 7

При настройке wireguard клиента на сервера с centos 7 часто возникает проблема

RTNETLINK answer: Operation not supported

Для решения необходимо выполнить следующее

yum install kernel-headers-"$(uname -r)" kernel-devel-"$(uname -r)" -y
dkms status

В ответ будет выведено что-то наподобие следующего

wireguard/1.0.20211208: added

Соовтетственно выполняем команды

sudo dkms build wireguard/1.0.20211208
sudo dkms install wireguard/1.0.20211208
sudo modprobe wireguard

После этого все прекрасно запускается, wg-client - название файла конфигурации подклчюения к vpn - wg-client.conf

wg-quick up wg-client

WireGuard Клиент на Ubuntu

Устнаовка

sudo apt install wireguard

Далее разрешаем перенаправление, добавив в конец файла /etc/sysctl.conf соответствующие параметры

sudo vi /etc/sysctl.conf

Парамтеры

net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0

Применяем изменения

sudo sysctl -p

На локальной машине создаем файл /etc/wireguard/client.conf для подключения к vpn. Содержимое файла копируем из файла настроек для клиента, которые создавали на сервере с vpn (/etc/wireguard/clients/client.conf)

Для работы vpn нужно выполнить еще следюущее

sudo ln -s /usr/bin/resolvectl /usr/local/bin/resolvconf

Далее запускаем vpn на клиенте

wg-quick up client

Для остановки vpn выполняем

wg-quick down client

Проверить свой ip можно перейдя по ссылке - https://ifconfig.me/ip