Подключение Outline VPN на сервере без графического интерфейса

от автора

Вступление

Привет, дорогой читатель! В своей первой статье я разобрался как подключить Outline VPN на сервере без графического интерфейса.

Начну немного издалека. Меня зовут Сергей и я :[||наркоман||]: сисадмин, плавно дрейфующий с Windows в сторону Linux. У меня хорошая работа, неплохая зарплата, но всегда хочется чего-то новенького, так вот случилось и у меня. С Linux у меня связано много приятного, но раньше это всегда было на уровне курения манулов, в какой-то момент что-то щёлкнуло у меня в голове и я начал изучать Bash и собственно углубляться в *NIX-подобные системы. Надеюсь, не сильно утомил таким введением, потому что, в общем-то перехожу к сути. Скриншотов будет мало, воды — много.

TL:DR

Используйте shadowsocks-libev-local с конфигом на основе дефолтного

Завязка

Есть у меня несколько тестовых серверов, где я опробую всякое. И вот, понадобилось мне уже пользоваться VPN, но, вот беда, РКН научился резать OpenVPN и Wireguard заграницу. А terraform отказывается не только скачиваться, но и работать в России. На мобильном телефоне и десктопах пользуюсь одним отличным сервисом VPN(не реклама) так вот, они предлагают Outline как основной метод, у Outline неплохой клиент, который работает только в графической среде. Но что делать с сервером? Гугление и дакдакление внятного ничего не показало, лишь обрывки информации, которые я и собрал в этой статье. Итак:

Начнём

Для начала у нас должен быть конфиг для подключения вида ss://bla-bla-bla, ss://bla-bla-bla#name или ss://bla-bla-bla@server.serv:port#name. Поговаривают, что последний вариант тоже существует, я не встречал, поэтому будем работать с первым видом. Его мы должны расшифровать, как говорит автор первой статьи — с помощью сайта-декодировщика. Вставляю только часть bla-bla-bla и вот, что у меня получается:

Base64Decoder screenshot

*данные, конечно же, невалидные*

Ставим пакет shadowsocks и отключаем запуск сервера, он нам не нужен

sudo ‑i apt update && apt install shadowsocks‑libev systemctl stop shadowsocks-libev systemctl disable shadowsocks-libev 

Теперь нам с вами необходимо написать конфиг клиента, напишем мы его на основе дефолтного конфига. Сначала сохраним его. потом переименуем и отредактируем в соответствии выданного нам декодером. Кстати, продолжаем работать под рутом.

cp /etc/shadowsocks-libev/config.json /etc/shadowsocks-libev/config.json.bak mv /etc/shadowsocks-libev/config.json /etc/shadowsocks-libev/myvpn.json vim /etc/shadowsocks-libev/myvpn.json 

В моём случае сервер статичный и сколько я им пользуюсь — не переезжал, поэтому я заранее перевёл доменное имя в IPv4 адрес (так как у меня здесь пример адреса — вставлю IP DNS от Google: 8.8.8.8)
Изменим дефолтный конфиг в соответствии с нужными нам данными, представлю это в виде diff

{ -    "server":["::1", "127.0.0.1"], +    "server":"8.8.8.8",     "mode":"tcp_an_udp", -    "server_port":8388, +    "server_port":50851, +    "local_address":"127.0.0.1", -    "local_port":1080, +    "local_port":631, -    "password":"7vezO2wapZQM", +    "password":"2BBNmjghKUghbf90wshjbfw9uhKUyhfo8uy9w8yfg2yg3djhge8mHkyTcrg", -    "timeout":86400, +    "timeout":300,     "method":"chacha20-ietf-poly1305" } 

В итоге наш конфиг должен выглядеть следующим образом:

{     "server":"8.8.8.8",     "mode":"tcp_an_udp",     "server_port":50851,     "local_address":"127.0.0.1",     "local_port":631,     "password":"2BBNmjghKUghbf90wshjbfw9uhKUyhfo8uy9w8yfg2yg3djhge8mHkyTcrg",     "timeout":300,     "method":"chacha20-ietf-poly1305" } 

Сохраняем и выходим из vim, я надеюсь, что все знают как это делать, если нет — тренируйтесь, очень крутая штука.

Подключение

Мы сконфигурировали клиента shadowsocks и теперь его нужно запустить и проверить. Я надеюсь, вы всё ещё в сессии root

systemctl start shadowsocks-libev-local@myvpn.service curl https://ifconfig.me curl --proxy socks5://127.0.0.1:631 https://ifconfig.me 

Вы должны увидеть сначала свой IP, а потом — IP вашего VPN сервера
Если всё получилось — великолепно, сделаем сервис постоянным (если нужно, если нет — пропустите этот шаг)

systemctl enable shadowsocks-libev-local@myvpn.service exit 

На этом шаге мы выходим из сессии root

Но писать для каждого сервиса, что рвётся в сеть отдельный параметр с прокси — не наш метод, к тому же, такой параметр бывает не у всех.
Пропишем прокси в оружение, и здесь у нас есть выбор: прописать отдельно для пользователя или для всей системы. Тут всё просто, для того, чтобы прописать переменные окружения мы добавляем следующие строки в ~/.bashrc, а для всей системы в /etc/environment (для этого редактор нужно запустить от суперпользователя), только и всего. Обратите внимание, что строки дублируются в верхнем и нижнем регистрах, это сделано для того, чтобы, как поговаривают в сети, всем клиенты был доступен прокси, сам я не проверял, лучше пусть будет лишняя строка, чем что-то не работает.

export HTTP_PROXY="socks5://127.0.0.1:631" export http_proxy="socks5://127.0.0.1:631" export HTTPS_PROXY="socks5://127.0.0.1:631" export https_proxy="socks5://127.0.0.1:631" export FTP_PROXY="socks5://127.0.0.1:631" export ftp_proxy="socks5://127.0.0.1:631" export NO_PROXY="127.0.0.1,localhost,192.168.25.0/24" export no_proxy="127.0.0.1,localhost,192.168.25.0/24" 

В переменную окружения NO_PROXY я прописал как локальный хост и IP, так и IP домашней подсети
Применяем настройки и проверяем работоспособность.

source ~/.bashrc curl --proxy socks5://127.0.0.1:631 https://ifconfig.me 

Заключение

Надеюсь, что вам было интересно читать, буду благодарен любым комментариям. Если у вас всё прошло успешно и моя статья помогла — значит мои изыскания не были напрасны!

И, хочу добавить ещё вот что: чтобы сделать быструю команду отключения прокси добавьте alias в свой .bashrc:

alias no-proxy="unset HTTP_PROXY http_proxy HTTPS_PROXY https_proxy FTP_PROXY ftp_proxy NO_PROXY no_proxy" 

Хотя, можете сделать и 2 скрипта (на включение переменных окружения и на отключение)… Всё в ваших руках, это же GNU/Linux!

Всего вам хорошего и отличного настроения!

PS

Да, я пошутил насчёт воды, то, что я написал — это для меня довольно много, тренируюсь писать больше. Спасибо, что дочитали.


ссылка на оригинал статьи https://habr.com/ru/articles/843638/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *