Встала задача настроить VPN для использования на телефоне, которая была успешно выполнена и теперь не нарадуюсь :)
Шаг 1. Заказываем сервер для VPN
В первую очередь необходимо найти сервер, на котором будем поднимать VPN. Воспользовавшись поиском, нашел самый более менее дешевый вариант, так как нам по сути нужно по минимуму ресурсов и нормальный интернет канал без ограничений на объем передаваемых данных.
Мой выбор пал на - https://hexcore.ru/v11176, необходимо зарегистрироваться и далее добавить виртуальный сервер.
Далее выбираем в форме регион
В качестве ОС выбираем Ubuntu
Тариф можно выбрать самый дешевый, каких то проблем с ним я не заметил, все работает очень быстро
Завершаем создание виртуального сервера, нажав на кнопку создать сервер.
После создания вас перекинет на страницу пополнения счета. Как только баланс пополнен можно перейти на страницу виртуальных серверов и подтвердить создание.
Через пару минут на почту придут данные для подключения к серверу. Соответственно нужно подключиться к нему по 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