1. Для просмотра полной версии форума нужно Войти или зарегистрироваться
    Скрыть объявление
  2. В период военного положения в Украине рекомендуем сохранять трезвость, это жизненно важно как вам так и вашим близким, возможно вам придётся их защищать и для этого лучше оставаться трезвыми! Нужно пережить это не лёгкое время, помогайте друг другу чем можете, мы с вами! Гуманитарная помощь жителям Украины
    Скрыть объявление

Ответ на пост «Создаём свой VPN-сервер IPsec / L2TP за пару минут на бесплатном VPS сервере...

Тема в разделе "Автоматически добавленные приколы", создана пользователем Бот:, 24/1/21.

  1. TS
    Бот:

    Бот: Legalizer BOT

    Регистрация:
    11/2/17
    Сообщения:
    102.360
    Карма:
    433
    Репутация:
    547
    Оценки:
    +8.991/79/-102
    В посте, на который идет данный ответ, автор не упомянул такую штуку как WireGuard. Хотя в комментариях он упоминался. Как по мне, это реально самый простой метод поднять VPN туннель с высокой и стабильной скоростью.
    Из реального опыта пользования:
    Уже год ввиду некоторой специфики держу на нем сервера игры Minecraft + MySql + DiscordApps + HTTP траффик, ну и парочка девайсов для общего пользования интернетом.
    Общая картина сети выглядит примерно так (paint master ON):


    [​IMG]


    Извиняюсь за "пэинтность" картинки, нарисовал по быстрому в сплане.
    Для общего понимания - через построенный VPN туннель на базе WireGuard у меня в месяц идет трафик порядка 4ТБ. Аптайм каналов равняется аптайму самих серверов. За год было только три сбоя с самим WG - два раза это обновления/патчи ПО, связанного с сетью, после чего трафик заворачивался в "дулю", и один раз хостер на основной VPS изменил настройки сети и у меня "отвалился" порт.
    Пинги у игроков выходят крайне низкие, скорость доступа высокая, никаких заморочек для повторных соединений не требуется.
    Из минусов WireGuard стоит отметить дополнительную нагрузку на ЦП, что на мобильных устройствах сказывается на повышенном потреблении заряда батареи.

    Так что же это за зверь такой, WireGuard?

    WireGuard - это бесплатное программное приложение с открытым исходным кодом и протокол связи, который реализует методы виртуальной частной сети (VPN) для создания безопасных соединений точка-точка в маршрутизируемых или мостовых конфигурациях​

    А теперь проще. Для запуска VPN-туннеля нам потребуется только 1 сервер, с которым мы будем соединятся и с которого мы будем "ходить" в сеть. На клиентских устройствах нет необходимости иметь "белый" Ip, пробрасывать порты и заниматься подобным безобразием, так как WG работает с помощью широковещательной рассылки - основной сервер "слушает" нужный порт и отвечает на приходящие запросы.
    На примере ниже опишу как настроить канал клиент-сервер на примере Ubuntu 18.04 и Android, но для других ОС процесс практически не отличается, почитать можно на английском
    В качестве заметки - рекомендую использовать для SSH Bitvise SSH Client, как по мне он очень удобный.



    (Далее текст частично копипаста)



    WireGuard поддерживает свой собственный репозиторий APT, из которого мы будем устанавливать пакет и обновлять его при появлении новой версии.

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

    sudo apt update
    sudo apt install software-properties-common​

    Добавьте репозиторий WireGuard:

    sudo add-apt-repository ppa:wireguard/wireguard​

    При появлении запроса нажмите Enter, чтобы продолжить. add-apt-repository также автоматически обновит список пакетов.

    Установите пакет WireGuard:

    sudo apt install wireguard​

    WireGuard работает как модуль ядра, который скомпилирован как модуль DKMS. В случае успеха вы увидите следующий вывод:

    wireguard:
    Running module version sanity check.
    - Original module
    - No original module exists within this kernel
    - Installation
    - Installing to /lib/modules/4.15.0-88-generic/updates/dkms/
    depmod...
    DKMS: install completed.​

    При обновлении ядра модуль WireGuard будет скомпилирован с новым ядром.


    Настройка.

    WireGuard поставляется с двумя инструментами командной строки: wg и wg-quick, которые позволяют вам настраивать и управлять интерфейсами вашего туннеля.

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

    wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey​

    Файлы будут сгенерированы в каталоге /etc/wireguard. Вы можете просматривать файлы с помощью cat или less. Закрытый ключ никогда не должен никому передаваться.
    Теперь, когда ключи сгенерированы, нам нужно настроить туннельное устройство, которое будет маршрутизировать трафик VPN.

    Устройство можно настроить либо из командной строки с помощью ip и wg, либо путем создания файла конфигурации с помощью текстового редактора.

    Создайте новый файл с именем wg0.conf и добавьте следующее содержимое:

    sudo nano /etc/wireguard/wg0.conf
    /etc/wireguard/wg0.conf
    [Interface]
    Address = 10.0.0.1/24
    SaveConfig = true
    ListenPort = 51820
    PrivateKey = SERVER_PRIVATE_KEY
    PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
    PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE​

    Интерфейс может быть назван как угодно, однако рекомендуется использовать что-то вроде include wg0 или wgvpn0. Настройки в разделе интерфейса имеют следующее значение:

    Адрес – разделенный запятыми список IP-адресов v4 или v6 для интерфейса wg0. Используйте IP-адреса из диапазона, зарезервированного для частных сетей (10.0.0.0/8, 172.16.0.0/12 или 192.168.0.0/16).

    ListenPort – порт, на который WireGuard будет принимать входящие соединения.

    PrivateKey – закрытый ключ, сгенерированный командой wg genkey. (Чтобы увидеть содержимое файла запуска: sudo cat /etc/wireguard/privatekey)

    SaveConfig – при значении true текущее состояние интерфейса сохраняется в файле конфигурации при завершении работы.

    PostUp – команда или скрипт, который выполняется до запуска интерфейса. В этом примере мы используем iptables для включения маскировки. Это позволит трафику покинуть сервер, предоставив VPN-клиентам доступ в Интернет. Обязательно замените ens3 после -A POSTROUTING, чтобы соответствовать имени вашего общедоступного сетевого интерфейса. Вы можете легко найти интерфейс, выполнив следующую команду:

    ip -o -4 route show to default | awk '{print $5}'​

    PostDown – команда или сценарий, который выполняется перед выключением интерфейса. Правила iptables будут удалены после отключения интерфейса.

    Файлы wg0.conf и privatekey не должны быть доступны для чтения для обычных пользователей. Используйте chmod для установки разрешений 600:

    sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}​

    Когда закончите, приведите wg0 интерфейс в действие, используя атрибуты, указанные в файле конфигурации:

    sudo wg-quick up wg0​

    Команда выдаст вывод, подобный следующему:

    [#] ip link add wg0 type wireguard
    [#] wg setconf wg0 /dev/fd/63
    [#] ip -4 address add 10.0.0.1/24 dev wg0
    [#] ip link set mtu 1420 up dev wg0
    [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE​

    Запустите wg show wg0 для проверки состояния интерфейса и конфигурации:


    sudo wg show wg0

    interface: wg0

    public key: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=

    private key: (hidden)

    listening port: 51820


    Чтобы вывести интерфейс WG во время загрузки системы, выполните следующую команду:

    sudo systemctl enable wg-quick@wg0



    Сеть сервера и настройка брандмауэра

    Чтобы NAT работал, нам нужно включить IP-пересылку. Откройте файл /etc/sysctl.conf и добавьте или раскомментируйте следующую строку:

    sudo nano /etc/sysctl.conf
    /etc/sysctl.conf
    net.ipv4.ip_forward=1​

    Сохраните файл и примените изменения:

    sudo sysctl -p
    net.ipv4.ip_forward = 1​

    Если вы используете UFW для управления брандмауэром, вам нужно открыть UDP-трафик через порт 51820:

    sudo ufw allow 51820/udp​

    Вот и все. Пир Ubuntu, который будет действовать как сервер, был настроен.



    Настройка клиентов Linux и других ОС.

    Инструкции по установке для всех поддерживаемых платформ доступны по адресу . В системах Linux вы можете установить пакет с помощью менеджера дистрибутива и в MacOS с помощью brew. После установки WireGuard выполните следующие действия, чтобы настроить клиентское устройство.

    Процесс настройки клиента Linux и macOS практически такой же, как и для сервера. Начните с создания открытого и закрытого ключей:

    wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey​

    Создайте файл wg0.conf и добавьте следующее содержимое:

    sudo nano /etc/wireguard/wg0.conf
    /etc/wireguard/wg0.conf
    [Interface]
    PrivateKey = CLIENT_PRIVATE_KEY
    Address = 10.0.0.2/24
    [Peer]
    PublicKey = SERVER_PUBLIC_KEY
    Endpoint = SERVER_IP_ADDRESS:51820
    AllowedIPs = 0.0.0.0/0​

    Настройки в разделе интерфейса имеют то же значение, что и при настройке сервера:

    Адрес – разделенный запятыми список IP-адресов v4 или v6 для интерфейса wg0.

    PrivateKey – Чтобы увидеть содержимое файла на клиентском компьютере, выполните: sudo cat /etc/wireguard/privatekey

    Одноранговый раздел содержит следующие поля:

    PublicKey – открытый ключ партнера, к которому вы хотите подключиться. (Содержимое файла сервера /etc/wireguard/publickey).

    Конечная точка – IP-адрес или имя хоста узла, к которому вы хотите подключиться, за которым следует двоеточие, а затем номер порта, который прослушивает удаленный узел.

    AllowedIPs – разделенный запятыми список IP-адресов v4 или v6, с которых разрешен входящий трафик для узла и на который направляется исходящий трафик для этого узла. Мы используем 0.0.0.0/0, потому что мы маршрутизируем трафик и хотим, чтобы одноранговый сервер отправлял пакеты с любым исходным IP.

    Если вам нужно настроить дополнительные клиенты, просто повторите те же шаги, используя другой частный IP-адрес.



    Добавьте клиентский узел на сервер

    Последний шаг – добавить открытый ключ и IP-адрес клиента на сервер (выполнить команду на сервере):

    sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2

    Убедитесь, что вы изменили открытый ключ CLIENT_PUBLIC_KEY, сгенерированный на клиентском компьютере ( sudo cat /etc/wireguard/publickey), и измените IP-адрес клиента, если он другой. Пользователи Windows могут скопировать открытый ключ из приложения WireGuard.

    После этого вернитесь на клиентский компьютер и откройте туннельный интерфейс.

    Клиенты Linux

    На клиентах Linux выполните следующую команду, чтобы открыть интерфейс:

    sudo wg-quick up wg0​

    Теперь вы должны быть подключены к серверу Ubuntu, и трафик с вашего клиентского компьютера должен направляться через него. Вы можете проверить соединение с:

    sudo wg
    interface: wg0
    public key: sZThYo/0oECwzUsIKTa6LYXLhk+Jb/nqK4kCCP2pyFg=
    private key: (hidden)
    listening port: 48052
    fwmark: 0xca6c
    peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
    endpoint:
    allowed ips: 0.0.0.0/0
    latest handshake: 1 minute, 22 seconds ago
    transfer: 58.43 KiB received, 70.82 KiB sent​

    Теперь осталось только открыть браузер, зайти на сайт (или аналогичный), и увидеть Ip своего сервера VPN.

    Чтобы остановить туннелирование, отключите интерфейс wg0:

    sudo wg-quick down wg0

    Теперь про Android.
    Здесь все проще некуда. Для начала идем в плеймаркет и устанавливаем приложение WireGuard:


    [​IMG]


    Далее жмем синий плюс внизу


    [​IMG]


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


    [​IMG]


    Остался только пункт "Все приложения". Если его оставить как есть - то VPN будет работать для всех приложений на вашем смартфоне. В случае, если вы хотите чтобы только некоторые приложения ходили в сеть через VPN, нажмите на данный пункт и выберете раздел "Исключить" или "Только включить". В первом случае, из VPN-туннеля будут исключены выбранные вами приложения, во втором случае в туннеле будут работать только указанные.
    После завершения настройки останется в главном меню только включить ползунок напротив вашего туннеля. На сервере можно будет проверить подключившегося клиента как в мануале выше:
    sudo wg​
    При смене сети (мобильный интернет/wifi) траффик автоматически будет перенаправлятся на новые адреса устройств.
    Достаточно длинный и скомканый пост вышел. Но все же, WireGuard позволяет реализовывать достаточно сложные сети с малейшими усилиями.
    P.S. Minecraft тут чисто для примера. Адрес сервера не дам, ибо трафик с пикабу будет хуже ддоса)