Как настроить персональный VPN

Как поднять свой VPN?


Зачем я вообще решил сделать свой VPN? 1. Я хочу быть уверен, что никто не пишет логи и не знает куда и что я отправил. 2. Я могу пользоваться ВПН без ограничений на количество устройств, скорости и объема траффика. 3. Если скинуться группой, то выйдет дешевле.

Что же, приступим к запуску персонального VPN. Расскажу как это делал я:


Для начала нам нужен какой-нибудь хостинг с локацией, которую мы хотим. Например, можно купить сервер на aeza.net. Берем виртуальную машину на Ubuntu.
Дальше нам нужно зайти на эту машину и настроить ее. Обычно на хостингах нам будет дан ip сервера и пароль от root. Заходим по ssh


ssh root@

Тут у нас попросит пароль, копируем и вставляем его (пароль не будет отображаться при вставке, не будет даже звездочек, это нормально)


Первым делом я бы настроил доступ к машине и какой-нибудь фаервол. Создадим своего юзера, под которым будем заходить на машину в будущем:


useradd -G root -m diphantxm -s /bin/bash

Запретим вход на машину под рутом, разрешим аутентификацию по публичному ключу и запретим вход по паролю:


sed -i "s/PermitRootLogin yes/PermitRootLogin no/g" /etc/ssh/sshd_config
sed -i "s/PubkeyAuthentication no/PubkeyAuthentication yes/g" /etc/ssh/sshd_config
sed -i "s/PasswordAuthentication yes/PasswordAuthentication no/g" /etc/ssh/sshd_config

Настроим фаервольные правила. По умолчанию запретим весь входящий траффик, откроем порт для подключения по ssh и порт 443 для нашего приложения.


ufw default deny incoming
ufw default allow outgoing
ufw allow OpenSSH
ufw allow 22
ufw allow 443
ufw enable
ufw reload

Дальше нам нужен инструмент, который будет роутить наш траффик. Самые популярные из них это v2ray или xray, поэтому будем использовать их. Скачиваем:


wget https://github.com/XTLS/Xray-core/releases/download/v25.3.6/Xray-linux-64.zip
unzip Xray-linux-64.zip
chmod +x xray
mv xray /usr/bin/xray

Теперь для удобства создадим systemd сервис. Для этого можно просто скопировать файл сервиса и положить его в /lib/systemd/system/xray.service


echo "[Unit]
Description=XRay Service
After=network.target nss-lookup.target

[Service]
User=root
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ExecStart=/usr/bin/xray run -config /etc/xray/config.json
Restart=on-failure
RestartPreventExitStatus=23

[Install]
WantedBy=multi-user.target"

Вместо TLS будем использовать Reality, это так же безопасно, но не требует сертификатов. Поэтому сгенерируем приватный и публичный ключи, сделать это можно при помощи самого Xray:


xray x25519

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


Для правильной работы Xray напишем конфиг. Тут мы должны указать какие клиенты могут к нам подключиться, по какому порту, куда и как их роутить и прочее. Ниже минимальный конфиг для начала работы. В нем нужно указать id клиента в формате uuid v4 и только клиенты с этим id смогут подключаться к нашему прокси.


{
    "inbounds": [
        {
            "tag": "input",
            "port": 443,
            "listen": "0.0.0.0",
            "protocol": "vless",
            "settings": {
                "clients": [
                    {
                        "id": "<СЮДА ВСТАВЛЯЕМ ЛЮБУЮ СТРОКУ ВИДУ xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx>"
                    }
                ],
                "decryption": "none"
            },
            "streamSettings": {
                "network": "tcp",
                "security": "reality",
                "realitySettings": {
                    "show": false,
                    "dest": "github.com:443",
                    "privateKey": "<СЮДА ВСТАВЛЯЕМ НАШ ПРИВАТНЫЙ КЛЮЧ>",
                    "serverNames": ["github.com"],
                    "shortIds": [""],
                    "type": "tcp"
                }
            }
        }
    ],
    "outbounds": [
        {
            "protocol": "freedom",
            "tag": "direct",
            "settings": {
                "domainStrategy": "UseIP"
            }
        },
        {
            "protocol": "blackhole",
            "tag": "block"
        }
    ]
}

Запускаем Xray:


systemctl start xray.service

Наша прокся слушает порт 443, теперь нужно к нему подключиться.


Подключиться к нему можно с любого устройства, но нужны специальные приложения:
На Android/IOS: V2Box
На Windows: V2rayN


Разберем на примере IOS:
Приложение будет выглядеть следующим образом:


image


Мы являемся клиентом нашего прокси сервера, поэтому нам нужно написать еще один конфиг, теперь для клиентской части. В приложении нужно нажать на + и выбрать «Add manual config», в выпавшем списке выбираем наш транспортный протокол «VLESS». Заполняем его, пример моего конфига есть ниже:


image image

Вуаля, наш ВПН готов, можно пользоваться :)
Надеюсь моя статья была хоть немного полезна тем, кому это могло быть интересным!


image


Ну, а если вам лень всем этим заниматься, то можно попробовать мой VPN через бота в тг: DipVPN

Habrahabr.ru прочитано 3619 раз