«Обход блокировок с полной маскировкой:3X-UI: Shadowsocks-2022 & XRay (XTLS), настройка сервера на Debian 12» и «Настройка сервера IKEv2 VPN с StrongSwan в Ubuntu 20.04»: разница между страницами

Материал из Шпаргалка знаний
(Различия между страницами)
Перейти к навигации Перейти к поиску
Нет описания правки
 
(Новая страница: «Ручная пошаговая настройка сервера описана в статье: '''https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-20-04-ru''' Мы же все действия произведем с помощью скрипта. Видео по установки и настройки скрипта: '''https://www.youtube.com/watch?v=93oJ5fF1mE0''' Хостинг европ...»)
 
Строка 1: Строка 1:
После установки на сервер Debian 12 (Minimal) (x86_64) 2Gb RAM, 1 CPU, 20Gb SSD, приступаем к подготовке сервера.
Ручная пошаговая настройка сервера описана в статье: '''https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-20-04-ru'''


'''Выбор провайдера:'''
Мы же все действия произведем с помощью скрипта.


https://hostkey.ru/vps/#preconfigured  -300р самый простой VPS/VDS сервер.
Видео по установки и настройки скрипта: '''https://www.youtube.com/watch?v=93oJ5fF1mE0'''


https://ishosting.com/ru/vps/nl  -5$ самый простой VPS/VDS сервер.
Хостинг европейских серверов из России:  


=== 3X-UI. Основные возможности ===
'''https://timeweb.cloud/?i=104329'''
Шифрование трафика: VLESS, Shadowsocks-2022 и XRay (XTLS) позволяют шифровать пользовательский трафик, что делает его невозможным для чтения или мониторинга со стороны провайдера Интернета или других третьих лиц.


Многофакторная аутентификация: поддержка многофакторной аутентификации повышает уровень безопасности и защищает пользовательские данные от несанкционированного доступа.
'''https://bit.ly/3urB78d'''


Гибкие настройки: возможность настраивать параметры соединения, такие как тип шифрования, порты и протоколы, что обеспечивает гибкость в настройке соединения и удобство использования.
Не российский хостинг (Эстония) с очень большой географией серверов и возможностью пополнения с российской карты. При оплате за год еще 3 месяца дают бесплатно:


Оптимизация скорости: оптимизация для быстрого соединения по сети. Они могут использовать различные технологии, такие как TCP Fast Open и Congestion Control, что позволяет ускорить передачу данных и улучшить качество соединения.
'''https://bit.ly/3rOqvPE'''


Поддержка различных операционных систем: Windows, MacOS, Linux, Android и iOS. Это обеспечивает универсальность и доступность продукта для пользователей на любой платформе.
== Подготовка сервера. ==
 
Открытый исходный код: предоставляет возможность разработчикам изучить код и внести свои изменения, что может помочь улучшить продукт и его функциональность.
 
Надежность и стабильность: VLESS, Shadowsocks-2022 и XRay (XTLS) являются надежными и стабильными протоколами. Они предоставляют высокую скорость и стабильность соединения, а также защиту пользовательских данных.
 
=== Установка ===
Официальный репозиторий 3X-UI: https://github.com/MHSanaei/3x-ui
 
Официальный репозиторий форка X-UI: https://github.com/alireza0/x-ui
 
Итак, дано: VPS с IPv4 (неплохо бы иметь еще IPv6, но не обязательно) и Debian либо Ubuntu Linux (на других дистрибутивах суть будет примерно та же самая). И установленные Docker и docker-compose (если вдруг нет - следуйте инструкциям для вашего дистрибутива - '''https://docs.docker.com/engine/install/''' , у меня без проблем установилось простым "'''apt install docker.io docker-compose'''"). Ну и git в придачу.
 
Задаем права пользователю Debian:
<pre>
<pre>
su
sudo apt update && sudo apt upgrade -y
apt install sudo
su - root
adduser username sudo
reboot
</pre>
''* где '''username''' имя пользователя под которым зашли в систему.''
 
<pre>
sudo apt-get update
sudo apt-get upgrade
</pre>
 
==== Устанавливаем Docker. на Debian 12 ====
<pre>
# Add Docker's official GPG key:
 
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
</pre>
</pre>


<pre>
Скрипт находится по данной ссылке: '''https://github.com/AdelKudryashev/Strongswan-installation-script'''
# Add the repository to Apt sources:
 
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
</pre>


=== Установка. ===
Перед запуском скрипта узнайте свой сетевой интерфейс, используя команду
<pre>
<pre>
sudo apt-get update
ip route show default
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo apt install docker.io docker-compose
</pre>
</pre>
 
После применения команды вы увидите вывод вида
или
 
==== Устанавливаем Docker. на Debian 11 ====
<pre>
<pre>
apt-get update -y
Output
default via your_server_ip dev eth0  proto static
</pre>
</pre>
Когда вы закончите, установите другие необходимые зависимости, используя следующую команду:
После '''dev''' будет нужный интерфейc, в данном случае это '''eth0'''. Вставьте в скрипте ваш интерфейс, используйте поиск для этого. Замените в скрипте все '''eth0''' на ваш сетевой интерфейс.
<pre>
<pre>
apt-get install apt-transport-https software-properties-common ca-certificates curl gnupg lsb-release -y
sudo wget https://github.com/AdelKudryashev/Strongswan-installation-script/blob/master/startswan.sh
</pre>
</pre>
==== Установить Докер ====
Далее заходим в скрипт и меняем в нем все записи '''eth0''' на наш интерфейс.
По умолчанию последняя версия Docker не включена в официальный репозиторий Debian 11. Поэтому вам нужно будет добавить репозиторий Docker CE в APT. Вы можете добавить его с помощью следующей команды:
<pre>
<pre>
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
sudo nano ~/startswan.sh
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
</pre>
</pre>
После добавления репозитория Docker обновите репозиторий и установите Docker CE с помощью следующей команды:
<pre>
apt-get update -y
apt-get install docker-ce docker-ce-cli -y
</pre>
После установки проверьте версию Docker CE с помощью следующей команды:
<pre>
docker version
</pre>
Вы должны получить следующий результат:
<pre>
Client: Docker Engine - Community
Version:          20.10.8
API version:      1.41
Go version:        go1.16.6
Git commit:        3967b7d
Built:            Fri Jul 30 19:54:22 2021
OS/Arch:          linux/amd64
Context:          default
Experimental:      true
Server: Docker Engine - Community
Engine:
  Version:          20.10.8
  API version:      1.41 (minimum version 1.12)
  Go version:      go1.16.6
  Git commit:      75249d8
  Built:            Fri Jul 30 19:52:31 2021
  OS/Arch:          linux/amd64
  Experimental:    false
containerd:
  Version:          1.4.9
  GitCommit:        e25210fe30a0a703442421b0f60afac609f950a3
runc:
  Version:          1.0.1
  GitCommit:        v1.0.1-0-g4144b63
docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
</pre>
==== Управление службами Docker ====
Вы можете легко управлять службой Docker с помощью утилиты systemd.


Чтобы запустить службу Docker, выполните следующую команду:
Для запуска скрипта используйте команду
<pre>
<pre>
sudo systemctl start docker
yes | sudo sh startswan.sh
</pre>
</pre>
Чтобы перезапустить службу Docker, выполните следующую команду:
<pre>
sudo systemctl restart docker
</pre>
Чтобы остановить службу Docker, выполните следующую команду:
<pre>
sudo systemctl stop docker
</pre>
Чтобы служба Docker запускалась при перезагрузке системы, выполните следующую команду:
<pre>
sudo systemctl enable docker
</pre>
Чтобы проверить статус Docker, выполните следующую команду:
<pre>
sudo systemctl status docker
</pre>
Вы должны увидеть статус Docker в следующем выводе:
<pre>
? docker.service - Docker Application Container Engine
    Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
    Active: active (running) since Fri 2021-09-10 07:19:35 UTC; 27s ago
TriggeredBy: ? docker.socket
      Docs: https://docs.docker.com
  Main PID: 29018 (dockerd)
      Tasks: 7
    Memory: 32.6M
        CPU: 407ms
    CGroup: /system.slice/docker.service
            ??29018 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock


Sep 10 07:19:34 debian11 dockerd[29018]: time="2021-09-10T07:19:34.809035575Z" level=info msg="scheme \"unix\" not registered, fallback to def>
Если скрипт не скачался, то вот тело скрипта:
Sep 10 07:19:34 debian11 dockerd[29018]: time="2021-09-10T07:19:34.809219999Z" level=info msg="ccResolverWrapper: sending update to cc: {[{uni>
Sep 10 07:19:34 debian11 dockerd[29018]: time="2021-09-10T07:19:34.809410545Z" level=info msg="ClientConn switching balancer to \"pick_first\">
Sep 10 07:19:34 debian11 dockerd[29018]: time="2021-09-10T07:19:34.897972507Z" level=info msg="Loading containers: start."
Sep 10 07:19:35 debian11 dockerd[29018]: time="2021-09-10T07:19:35.186940748Z" level=info msg="Default bridge (docker0) is assigned with an IP>
Sep 10 07:19:35 debian11 dockerd[29018]: time="2021-09-10T07:19:35.298681937Z" level=info msg="Loading containers: done."
Sep 10 07:19:35 debian11 dockerd[29018]: time="2021-09-10T07:19:35.356364773Z" level=info msg="Docker daemon" commit=75249d8 graphdriver(s)=ov>
Sep 10 07:19:35 debian11 dockerd[29018]: time="2021-09-10T07:19:35.357524464Z" level=info msg="Daemon has completed initialization"
Sep 10 07:19:35 debian11 systemd[1]: Started Docker Application Container Engine.
Sep 10 07:19:35 debian11 dockerd[29018]: time="2021-09-10T07:19:35.401626151Z" level=info msg="API listen on /run/docker.so
</pre>


==== Установить Docker Compose В Debian 11 ====
Первое, что нужно сделать, это обновить систему. Выполните следующую команду:
<pre>
<pre>
sudo apt update && sudo apt upgrade -y
#You must change the eth0 interface to your own in this script in /etc/ufw/before.rules in three places
</pre>
#Вы должны изменить интерфейс eth0 на свой в этом скрипте в /etc/ufw/before.rules в трех местах
Вы можете скачать текущую стабильную версию Docker Compose, выполнив следующую команду:
#!/bin/bash
<pre>
apt update
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
myip=$(wget -qO - eth0.me)
</pre>
apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins -y
Чтобы сделать двоичный файл исполняемым, предоставьте следующие разрешения:
mkdir -p ~/pki/cacerts
<pre>
mkdir -p ~/pki/certs
sudo chmod +x /usr/local/bin/docker-compose
mkdir -p ~/pki/private
</pre>
В случае сбоя установки вам, возможно, придется создать символическую ссылку между «/usr/bin» и любой другой папкой. Это можно сделать с помощью следующей команды.
<pre>
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
</pre>
Теперь пришло время протестировать установку. Для подтверждения вывода используйте следующую команду:
<pre>
docker-compose --version
</pre>
 
=== Установка самой программы 3X-UI ===
 
Сначала клонируем исходники. Лучше всего использовать последнюю стабильную версию, можно проверить в "Releases" на гитхабе.
 
Для 3X-UI:
<pre>
git clone https://github.com/MHSanaei/3x-ui.git
cd 3x-ui
</pre>
или
 
Для X-UI:
<pre>
git clone https://github.com/alireza0/x-ui.git
cd x-ui
</pre>
 
Запускаем docker-compose:
<pre>
sudo docker-compose up -d
</pre>
Готово! Панель установлена и работает.
 
Для 3X-UI идем браузером по адресу '''http://yourserverip:2053/panel/''', где '''yourserverip''' - IP-адрес вашего сервера или доменное имя, если оно у вас есть и настроено (обратите внимание, протокол http://, а не https://). Для X-UI нужно сначала посмотреть с помощью команды "docker logs x-ui", на каком именно порту запустилась панель.
 
Логинимся под стандартными реквизитами '''admin / admin''' и видим нашу прекрасную панель управления:
 
=== Создание протоколов в графической панели 3X-UI ===
Чтобы войти в веб версию панели, в браузере идём по адресу:
 
http://xxx.xxx.xxx.xxx:PORT/panel/, где xxx.xxx.xxx.xxx — IP-адрес вашего сервера, а PORT - номер вашего порта. В моём случае это порт 5580.
 
[[File:Shadowsocks_01.png|link=]]
 
Логинимся и видим вот такую красивую панель управления 3X-UI
 
[[File:Shadowsocks_02.png|link=]]
 
Переходим в '''"Settings"''' (настройки) и там:
 
Изменить порт на котором работает панель со стандартного '''2053''' на какой-нибудь другой (лучше всего где-нибудь в верхнем конце диапазона, до '''65235''');
 
Изменить корневой путь URL-адреса панели с / на что-то типа '''/mysecretpanelroot/''';
 
При желании переключить язык на русский (но имейте в виду, в русском переводе есть некоторые неточности сбивающие с толку);
 
На второй вкладке "Настройки безопасности" изменить стандартный админский пароль на свой;
 
После чего сохраняем настройки и рестартуем панель. Нужно будет изменить URL с учетом нового порта и пути, заданных в настройках.
 
[[File:Shadowsocks_03.png|link=]]
 
[[File:Shadowsocks_04.png|link=]]
 
=== Создаем подключения ===
Идем в раздел меню Inbounds (в русском переводе он почему-то называется "Пользователи", это неправильно и сбивает с толку). Нажимаем "Add Inbound" ("Добавить пользователя"):
 
[[File:Shadowsocks_05.png|link=]]
 
Появляется милое окошко. Сначала добавим возможность подключаться через '''Shadowsocks-2022'''.
 
'''"Remark"''' (Примечание) - ввести что угодно, это просто человекочитаемое название;
 
'''"Протокол"''' выбираем shadowsocks;
 
'''"Listening IP"''' (в русском переводе называется "Порт IP", и это тоже неправильно и запутывает) можно оставить пустым, тогда сервер будет слушать на всех IP-адресах, либо можно явно указать требуемый;
 
'''"Порт"''' - панель выберет рандомный.
 
==== Далее настраиваем пользователя (в момент создания inbound'а создается один, других при желании можно добавить позже): ====
 
Поле '''"Email"''' на самом деле не обязательно должно содержать емайл, может быть любой текст (имя пользователя) - панель генерирует рандомный набор символов, если вы хотите создавать несколько разных пользователей (например, раздать аккаунты друзьям, смотреть кто сколько накачал и при желании блокировать доступ), то лучше вбить сюда что-то человекочитаемое и понятное;
 
'''"Subscription"''' - пока что можно вбить тот же самый юзернейм (о подписках я расскажу чуть позже).
 
Дальше снова идут настройки протокола:
 
'''"Шифрование"''' - выбираем что-нибудь что начинается с "2022", вариант по умолчанию вполне неплох;
 
'''"Пароль"''' (ключ) панель сгенерирует автоматически с правильной длиной для выбранного метода шифрования.
 
Нажимаем '''"Создать"''' и на этом настройка для Shadowsocks закончена, им уже можно пользоваться.
 
[[File:Shadowsocks_06.png|link=]]
 
==== Теперь переходим к настройке VLESS с XTLS-Reality. ====
Тут все будет чуточку сложнее, но в целом так же просто.
 
'''"Remark"''' (Примечание) - любое название;
 
'''"Протокол"''' - "vless",
 
'''"Listening IP"''' ("Порт IP", который на самом деле не порт, а адрес) - оставляем пустым, либо задаем вручную если надо;
 
'''"Порт"''' - вместо рандомного ставим 443;
 
[[File:Shadowsocks_07.png|link=]]
 
==== Далее переходим к настройкам клиента. ====
'''"Email"''' - как в и в прошлом пункте, лучше указать что-то человекочитаемое и понятное. Важно: пользователи разных подключений не могут иметь один и тот же емайл (например, наш новый VLESS и старый Shadowsocks созданный в предыдущем пункте), поэтому можно добавить какой-нибудь префикс (например user1vl) для избежания конфликтов.
 
'''"Subscription"''' - тут наоборот, лучше будет если текст в этом поле будет совпадать с тем, что вы задали для Shadowsocks (подробности ниже). Внимание: в отличие от 3X-UI, в X-UI поле Subscription по умолчанию не отображается, нужно сначала активировать функционал подписок в настройках панели.
 
'''"Flow"''' - надо выбрать "xtls-rprx-vision". Обратите внимание, поле Flow (см. скриншот) появится только после того, как чуть ниже вы поставите галочку на пункте "Reality". То есть лучше всего настривать так: сначала ставите галочку Reality, а потом заполняете поля с настройками пользователя.
 
==== Дальше у нас идут настройки транспорта: ====
'''"Reality"''' - как уже сказано выше, должно быть активно;
 
'''"XTLS"''' - наоборот, должно быть неактивно (это немного запутывает, не смотря на то, что Reality тоже относится к XTLS, здесь под XTLS подразумеваются только устаревшие версии протокола, и галочки "XTLS" и "Reality" в панели являются взаимоисключающими);
 
'''"uTLS"''' - по умолчанию "firefox", я обычно выбираю "chrome", по факту особо без разницы (главное чтобы не "android", могут быть проблемы с клиентами);


'''"Домен"''' - на самом деле это не домен, а адрес для подключения к вашему серверу. Можно оставить пустым, тогда панель автоматически подставит IP-адрес или домен, по которому вы обращаетесь в панели на сервере.
chmod 700 ~/pki


'''"ShortIds"''' - панель сгенерирует рандомный ID;
pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem


'''"Public Key", "Private Key"''' - можно кликнуть на "Get new keys", и панель сама сгенерирует новые для вас;
pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
--type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem


'''"Dest" и "Server names"''' - вот это самое интересное, это домен, под который вы будете маскироваться. По умолчанию панель предлагает маскировку под yahoo.com и www.yahoo.com с переадресацией на yahoo.com:443, но лучше выбрать какой-нибудь другой домен.
pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem


'''Sniffing, HTTP, TLS, QUIC, fakedns''' — оставьте включённым.
pki --pub --in ~/pki/private/server-key.pem --type rsa \
    | pki --issue --lifetime 1825 \
        --cacert ~/pki/cacerts/ca-cert.pem \
        --cakey ~/pki/private/ca-key.pem \
        --dn "CN=$myip" --san @$myip --san $myip \
        --flag serverAuth --flag ikeIntermediate --outform pem \
    >  ~/pki/certs/server-cert.pem


[[File:Shadowsocks_08.png|link=]]
cp -r ~/pki/* /etc/ipsec.d/


Сохраняем введенную форму, и - всё! Настройка завершена.
mv /etc/ipsec.conf{,.original} #Создаем резервную копию файла настроек


После этого на странице видим примерно вот это:
cat << EOF > /etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no


[[File:Shadowsocks_09.png|link=]]
conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=$myip
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024,aes256-sha256-modp2048!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
EOF


Если тыкнуть на кнопочку '''"Меню"''' соответствующую нужному протоколу, можно его активировать/деактивировать, сбросить счетчики трафика, добавить пользователей (в том числе сгенерировать разом N аккаунтов по шаблону), и самое главное - раскрыв (плюсиком) список пользователей, можно посмотреть настройки подключения для вбивания в клиенты для этого пользователя.
cat << EOF > /etc/ipsec.secrets
: RSA "server-key.pem"
# your_username : EAP "your_password" - use this format for create new user
# sudo systemctl restart strongswan-starter - for the changes to take effect, after adding a new user, close the file and restart the server with this command
EOF


Нажав на значок '''QR-кода''', панель покажет QR-код, который можно отсканировать камерой в мобильных клиентах ('''v2rayNG''' или '''Nekobox''' на Android, Wings X/'''FoXray''' или '''Shadowrocket''' или '''V2BOX''' на iOS).


Нажав на иконку информации (с буквой "i") можно посмотреть настройки для вбивания в десктопные клиенты Windows, Linux, MacOS, в том числе и URL, который можно скопировать и вставить.
ufw allow OpenSSH
ufw enable
ufw allow 500,4500/udp


[[File:Shadowsocks_10.png|link=]]
cat << EOF > /etc/ufw/before.rules
*nat
#change eth0 interface to yours
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE                           
COMMIT


Там же вы можете найти "subscription URL". Это - специальным образом сгенерированный список подключений для клиентов. Помните, вы указывали "Subscription" при создании пользователя? При запросе по такому subscription URL, сервер выдаст список настроек (сервера, ключи) для всех подключений с этим ID в поле subscription. Многие клиенты (включая v2rayNG, v2rayN, Nekobox, и другие) умеют автоматически либо по запросу скачивать настройки с таких URL и добавлять их к себе - таким образом, если вы добавили какие-то новые протоколы или решили поменять конфигурацию, пользователи могут легко получить новые параметры с вашего сервера.
*mangle
#change eth0 interface to yours
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#  ufw-before-input
#  ufw-before-output
#  ufw-before-forward
#


Внимание: в отличие от 3X-UI, в X-UI поле Subscription по умолчанию не отображается и вообще функционал подписок по умолчанию отключен, его нужно активировать в настройках панели.
# Don't delete these required lines, otherwise there will be errors
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
# End required lines
-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT


# allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT


Если нажать на '''меню''', то можно изменить, добавить одного или нескольких пользователей, сбросить трафик, экспортировать ключи и т. д.
# quickly process packets for which we already have a connection
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT


[[File:Shadowsocks_11.png|link=]]
# drop INVALID packets (logs these in loglevel medium and higher)
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP


=== Подключение клиентов ===
# ok icmp codes for INPUT
==== Подключение устройств на iOS (но не ниже 16 версии) ====
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
1. Скачайте приложение FoXray из AppStore по ссылке: https://apps.apple.com/ru/app/foxray/id6448898396?ref=dtf.ru
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT


2. В графической панели 3X-UI создайте нового клиента. Для этого: нажмите на кнопку Меню в ранее созданной конфигурации, далее Добавить пользователя. В поле Email напишите название клиента, например "Мой iPhone", а в пункте Flow выберите xtls-rprx-vision.
# ok icmp code for FORWARD
-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT


3. Раскройте (плюсиком) список клиентов и под «Меню» рядом с только что созданным клиентом «Мой iPhone» нажмите на иконку QR-кода:
# allow dhcp client to work
-A ufw-before-input -p udp --sport 67 --dport 68 -j ACCEPT


[[File:Shadowsocks_12.png|link=]]
#
# ufw-not-local
#
-A ufw-before-input -j ufw-not-local


4. Запустите приложение FoXray и в левом верхнем углу нажмите значок сканирования QR-кода и отсканируйте его с экрана компьютера.
# if LOCAL, RETURN
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN


[[File:Shadowsocks_13.png|link=]]
# if MULTICAST, RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN


5. Всё, профиль добавлен! Теперь нажмите на кнопку «Play», далее разрешите добавление конфигурации VPN, введите пароль и можете пользоваться VPN соединением.
# if BROADCAST, RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN


==== Подключение устройств на Windows ====
# all other non-local packets are dropped
1. Скачайте архив с программой Invisible Man XRay c GitHub и распакуйте его ('''https://github.com/InvisibleManVPN/InvisibleMan-XRayClient''')
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP


2. В графической панели 3X-UI создайте нового клиента. Для этого: нажмите на кнопку Меню в ранее созданной конфигурации, далее Добавить пользователя. В поле Email напишите название клиента, например "Мой Windows", а в пункте Flow выберите xtls-rprx-vision.
# allow MULTICAST mDNS for service discovery (be sure the MULTICAST line above
# is uncommented)
-A ufw-before-input -p udp -d 224.0.0.251 --dport 5353 -j ACCEPT


3. Раскройте (плюсиком) список клиентов и под «Меню", рядом с только что созданным клиентом "Мой Windows» и нажмите на иконку Информация:
# allow MULTICAST UPnP for service discovery (be sure the MULTICAST line above
# is uncommented)
-A ufw-before-input -p udp -d 239.255.255.250 --dport 1900 -j ACCEPT


[[File:Shadowsocks_14.png|link=]]
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
EOF


4. Скопируйте ссылку для подключение под надписью URL, нажав на кнопку копирования, как на скриншоте ниже:
cat << EOF >> /etc/ufw/sysctl.conf
 
net/ipv4/ip_forward=1
[[File:Shadowsocks_15.png|link=]]
net/ipv4/conf/all/accept_redirects=0
 
net/ipv4/conf/all/send_redirects=0
5. Отправьте любым удобным способом данную ссылку на ваш компьютер, и там также её скопируйте.
net/ipv4/ip_no_pmtu_disc=1
 
EOF
6. Запустите программу Invisible Man XRay и перейдите в Manage server configuration.
 
[[File:Shadowsocks_16.png|link=]]
 
7. Нажмите на кнопку "плюс" в правом нижнем углу окна.
 
[[File:Shadowsocks_17.png|link=]]
 
8. Выберите Import from link и вставьте вашу ссылку, которую вы ранее скопировали в поле, как на скрине:
 
[[File:Shadowsocks_18.png|link=]]
 
9. Если вы всё правильно сделали, должна добавиться новая конфигурция. Закройте этот менеджер и нажмите кнопку Run.
 
[[File:Shadowsocks_19.png|link=]]
 
10. Готово! VPN на компьютере под управлением операционной системы Windows мы тоже настроили без проблем.
 
=== Пропускаем трафик через Tor ===
'''Torghost'''
 
Начала получим репозиторий из гитхаба (кстати, сначала нужно установить git):
<pre>
sudo apt update && sudo apt upgrade
git clone https://github.com/SusmithKrishnan/torghost.git
</pre>
</pre>
После этого заходим в папку torghost (она появится после клонирования репозитория) и делаем файл build.sh исполняемым:
<pre>
cd torghost
sudo chmod +x build.sh
</pre>
Запускаем установку:
<pre>
sudo ./build.sh
</pre>
Установщик сам подтянет все зависимости и поставит Тор. На этом установка закончена!


Далее ставим обновление:
=== Использование. ===
Вам нужно будет добавить логин и пароль пользователя. Отредактируйте файл
<pre>
<pre>
pip3 install -r requirements.txt
sudo nano /etc/ipsec.secrets
wget -c https://github.com/SusmithKrishnan/torghost/releases/download/v3.0.2/torghost-3.0.2-amd64.deb
sudo dpkg -i torghost-*-amd64.deb
</pre>
Открываем файл torghost.py на редактирование и комментируем 15 -ю строку.
<pre>
nano torghost.py
</pre>
 
<pre>
 
'''
from packaging import version
'''
 
</pre>
</pre>
Внутри файла есть шаблон как добавлять нового пользователя.


Запускаем утилиту '''torghost''', ip адрес будет меняться автоматически через каждые 10 минут:
Пример:
<pre>
<pre>
sudo python3 torghost.py -s
User1 : EAP "Qwerty"
</pre>
</pre>
'''* где '''User1''' - это логин, а '''Qwerty''' - это пароль.'''


Варианты использования:
'''Для каждого пользователя или устройства свой логин и пароль!'''
<pre>
sudo python3 torghost.py -x (to stop Torghost - the tool will go back to you Ip ADDRESS from your ISP)


sudo python3 torghost.py -u (to update the tool - this is not required to do it every day)


sudo python3 torghost.py -r (to switch the IP Address - you will notice that the IP address that Torghost assigned you at the beginning will change again)
После сохранения файла перезагрузите Strongswan используя команду
 
sudo python3 torghost.py -h (to open the help menu)
</pre>
 
Скрипт чтобы IP адреса менялись через каждую минуту, если нужно:
<pre>
<pre>
#!/bin/bash
sudo systemctl restart strongswan-starter
a=1
x=60
while [[ $a -gt 0 ]]
do
python3 torghost.py -s
sleep $x
done
</pre>
</pre>


=== Дополнительная информация из другого источника ===
=== Получение сертификата. ===
Команда для запуска установки панели 3X-UI:
Получить сертификат можно с помощью команды:
 
https://github.com/MHSanaei/3x-ui?ysclid=lstfiw45v6910325792
 
 
Скачать NekoBox:
 
https://github.com/MatsuriDayo/NekoBoxForAndroid/releases
 
 
Скачать V2RayN:
 
https://github.com/2dust/v2rayN/releases
 
 
Настройка ssh-ключей:
 
https://simplelinux.ru/nastrojka-podklyucheniya-k-serveru-po-ssh-klyucham/
 
 
== Получение SSL сертификата. ==
<pre>
sudo apt-get install certbot -y
sudo certbot certonly --standalone --agree-tos --register-unsafely-without-email -d yourdomain.com
sudo certbot renew --dry-run
</pre>
Или вариант само подписываемого сертификата для docker
 
Сгенерируйте самоподписанный TLS-сертификат и скопируйте его в панель 3X-UI
<pre>
sudo openssl req -x509 -newkey rsa:4096 -nodes -sha256 -keyout private.key -out public.key -days 3650 -subj "/CN=APP"
sudo docker cp private.key 3x-ui:private.key
sudo docker cp public.key 3x-ui:public.key
</pre>
Указываем путь в панели:
 
[[File:VPN_4.png|link=]]
 
== Создания туннеля через несколько VPN серверов. ==
Для того чтобы пропустить наш трафик например через 2 сервера делаем следующее:
 
1) Копируемым ссылку на подключения например Shadowsocks на конечном сервере.
 
ss://MjAyMi1GFrZTMtYWVzLTI1Ni1nY206UlA0TTJWbHVudHlpUFdiWEdxdk1ieGd4SVNVOEZnaXUUxDN3ladU82bz06T0NJYkl2c1ZxZ2oyTmw5QVZG9KZUtMTjBzb25TSGprZDU90akxrOD0@135.120.45.13:22467?type=tcp#SS-Vasya_ss
 
2) Заходим на первый наш сервер, В правом меню нажимаем на '''"Настройка Xray" --> "Исходящие" --> "Добавить исходящий" --> JSON'''
 
И в поле '''"Link"''' вставляем нашу ссылку.
 
[[File:VPN_1.png|link=]]
 
[[File:VPN_2.png|link=]]
 
3) Нажимаем '''"Сохранить настройки" --> "Перезапустить Xray"'''
 
4) Далее опять в правом меню нажимаем на '''"Настройка Xray" --> "Правила маршрутизации" --> "Добавить правило"
 
5) Выбираем в поле "Network" --> "TCP,UDP", и в поле "Outbound" --> наш второй сервер.
 
[[File:VPN_3.png|link=]]
 
6) Нажимаем '''"Сохранить настройки" --> "Перезапустить Xray"'''
 
Все, Трафик идет последовательно через 2 сервера. На выходе мы видим IP последнего сервера.
 
-----------------------------------------------------------------------------------------------------------------
 
== Установка 3X-UI НЕ через Docker, а напрямую на сервер Ubuntu 22.04 LTS с правами и пользователем root. ==
 
Подготовка сервера.
<pre>
<pre>
apt update && apt upgrade -y
sudo cat /etc/ipsec.d/cacerts/ca-cert.pem
clear
</pre>
</pre>
Меняем root пароль, если нужно:
Сохраните текст, заключенный между
<pre>
<pre>
passwd
-----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----
</pre>
</pre>
Устанавливаем скрипт:
на локальный компьютер включая эти две строки в файл с расширением '''.pem'''
<pre>
<pre>
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
sert.pem
</pre>
</pre>


При установки скрипт попросит Модифицировать, отвечаем- '''Y'''
Все! Сервер поднят!
 
Имя пользователя: '''admin'''
 
Пароль: '''Qwerty'''
 
Порт (35000 - 65000): '''62457'''
 
 
Готово! Панель установлена и работает.
 
Для 3X-UI идем браузером по адресу http://yourserverip:62457, где yourserverip - IP-адрес вашего сервера или доменное имя, если оно у вас есть и настроено (обратите внимание, протокол http://, а не https://).

Версия от 20:14, 22 марта 2024

Ручная пошаговая настройка сервера описана в статье: https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-20-04-ru

Мы же все действия произведем с помощью скрипта.

Видео по установки и настройки скрипта: https://www.youtube.com/watch?v=93oJ5fF1mE0

Хостинг европейских серверов из России:

https://timeweb.cloud/?i=104329

https://bit.ly/3urB78d

Не российский хостинг (Эстония) с очень большой географией серверов и возможностью пополнения с российской карты. При оплате за год еще 3 месяца дают бесплатно:

https://bit.ly/3rOqvPE

Подготовка сервера.

sudo apt update && sudo apt upgrade -y

Скрипт находится по данной ссылке: https://github.com/AdelKudryashev/Strongswan-installation-script

Установка.

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

ip route show default

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

Output
default via your_server_ip dev eth0  proto static

После dev будет нужный интерфейc, в данном случае это eth0. Вставьте в скрипте ваш интерфейс, используйте поиск для этого. Замените в скрипте все eth0 на ваш сетевой интерфейс.

sudo wget https://github.com/AdelKudryashev/Strongswan-installation-script/blob/master/startswan.sh

Далее заходим в скрипт и меняем в нем все записи eth0 на наш интерфейс.

sudo nano ~/startswan.sh

Для запуска скрипта используйте команду

yes | sudo sh startswan.sh

Если скрипт не скачался, то вот тело скрипта:

#You must change the eth0 interface to your own in this script in /etc/ufw/before.rules in three places
#Вы должны изменить интерфейс eth0 на свой в этом скрипте в /etc/ufw/before.rules в трех местах
#!/bin/bash
apt update
myip=$(wget -qO - eth0.me)
apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins -y
mkdir -p ~/pki/cacerts
mkdir -p ~/pki/certs
mkdir -p ~/pki/private

chmod 700 ~/pki

pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
--type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

pki --pub --in ~/pki/private/server-key.pem --type rsa \
    | pki --issue --lifetime 1825 \
        --cacert ~/pki/cacerts/ca-cert.pem \
        --cakey ~/pki/private/ca-key.pem \
        --dn "CN=$myip" --san @$myip --san $myip \
        --flag serverAuth --flag ikeIntermediate --outform pem \
    >  ~/pki/certs/server-cert.pem

cp -r ~/pki/* /etc/ipsec.d/

mv /etc/ipsec.conf{,.original} #Создаем резервную копию файла настроек

cat << EOF > /etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=$myip
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024,aes256-sha256-modp2048!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
EOF

cat << EOF > /etc/ipsec.secrets
: RSA "server-key.pem"
# your_username : EAP "your_password" - use this format for create new user
# sudo systemctl restart strongswan-starter - for the changes to take effect, after adding a new user, close the file and restart the server with this command
EOF


ufw allow OpenSSH
ufw enable
ufw allow 500,4500/udp

cat << EOF > /etc/ufw/before.rules
*nat
#change eth0 interface to yours
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE                             
COMMIT

*mangle
#change eth0 interface to yours
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# Don't delete these required lines, otherwise there will be errors
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
# End required lines
-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT

# allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT

# quickly process packets for which we already have a connection
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# drop INVALID packets (logs these in loglevel medium and higher)
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP

# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT

# ok icmp code for FORWARD
-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT

# allow dhcp client to work
-A ufw-before-input -p udp --sport 67 --dport 68 -j ACCEPT

#
# ufw-not-local
#
-A ufw-before-input -j ufw-not-local

# if LOCAL, RETURN
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN

# if MULTICAST, RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN

# if BROADCAST, RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN

# all other non-local packets are dropped
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP

# allow MULTICAST mDNS for service discovery (be sure the MULTICAST line above
# is uncommented)
-A ufw-before-input -p udp -d 224.0.0.251 --dport 5353 -j ACCEPT

# allow MULTICAST UPnP for service discovery (be sure the MULTICAST line above
# is uncommented)
-A ufw-before-input -p udp -d 239.255.255.250 --dport 1900 -j ACCEPT

# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
EOF

cat << EOF >> /etc/ufw/sysctl.conf
net/ipv4/ip_forward=1
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1
EOF

Использование.

Вам нужно будет добавить логин и пароль пользователя. Отредактируйте файл

sudo nano /etc/ipsec.secrets

Внутри файла есть шаблон как добавлять нового пользователя.

Пример:

User1 : EAP "Qwerty"

* где User1 - это логин, а Qwerty - это пароль.

Для каждого пользователя или устройства свой логин и пароль!


После сохранения файла перезагрузите Strongswan используя команду

sudo systemctl restart strongswan-starter

Получение сертификата.

Получить сертификат можно с помощью команды:

sudo cat /etc/ipsec.d/cacerts/ca-cert.pem

Сохраните текст, заключенный между

-----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----

на локальный компьютер включая эти две строки в файл с расширением .pem

sert.pem

Все! Сервер поднят!