Софт Самописный VPN протокол клиент/сервер

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
12 Май 2023
Сообщения
29
Реакции
27
Всем привет, решил тут ради забавы написать свой впн туннель. Т.к на языке руби таких нет.
На данный момент клиент работает только под линуксом, но в будещем планирую запилить и под винду с андройдом.

Вот скрины:
main.gif

Если что клиент работает на gtk3

Тестировал я его на Ubuntu 22.04 и на Arch c 6.3.5 kernel'ом. Все работает хорошо.
Для корректной установки вам понадобятся следущие пакеты: ruby, ruby-dev, build-essential

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


Кто по английски читать не умеет предоставлю инструкцию и здесь:

Клиент
Важно! Не забудьте создать конфиг файл, он должен быть в json формате. Вот пример конфига:
JSON:
Expand Collapse Copy
{
        "interface": "wlan0",
        "tun_interface": "tun0",
        "max_buffer": 655360,
        "ip": "167.99.236.107",
        "sni_host": "example.com",
        "port": 9578,
        "login": "ryuk",
        "password": "123456789"
}

Установка:
Bash:
Expand Collapse Copy
sudo apt update && sudo apt install -y ruby ruby-dev build-essential
git clone https://github.com/lightswisp/RbVPN.git
cd RbVPN
sudo bundle install
cd bin/
./client

Сервер
Перед установкой, создайте конфиг и сгенерируйте самоподписной сертификат.

Для генерации сертификата: openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365

Пример конфига:
JSON:
Expand Collapse Copy
{
        "certificate": "cert.pem",
        "private_key": "key.pem",
        "network": "192.168.0.0/24",
        "interface": "eth0",
        "tun_interface": "tun0",
        "max_buffer": 655360,
        "port": 9578,
        "login": "ryuk",
        "password": "123456789"
}



Установка:
Bash:
Expand Collapse Copy
sudo apt update && sudo apt install -y ruby ruby-dev build-essential
git clone https://github.com/lightswisp/RbVPN.git
cd RbVPN
sudo bundle install
cd bin/
./server -c config.json -v


Если у кого-то возникнут вопросы, спрашивайте.
На этом пожалуй все, всем спасибо!
 
also, почему конфиг именно в жсоне? отвратительный формат с ебучей ошибкой в спецификации

почему не yaml?
Это уже вкусовщина, я же не конкретно для тебя писал тунель :) да и много кто юзает json формат так-то
не увидел тут "твоего" протокола
Сейчас расскажу что я вкладывал в понятие "протокола". Протокол - в первую очередь это своего рода сводка правил т.е определенный формат. В данном случае, это то как должен взаимодействовать клиент с моим сервером. Из этого следует что какой-нибудь опенвпн или вайргард клиентЫ не смогут подключиться к моему серваку, т.к спецификации разные. Ведь опенвпн и вайргард это тоже протоколы, из этого я и делаю вывод что моя реализация - это другой протокол, НО одной и той же технологии, под названием VPN (Virtual private network)
 
Последнее редактирование:
Это уже вкусовщина, я же не конкретно для тебя писал тунель :) да и много кто юзает json формат так-то
это не вкусовщина, жсон как конфиг файл это technical debt


В данном случае, это то как должен взаимодействовать клиент с моим сервером.
то бишь апи =)

я ж не умаляю твоих заслуг, просто удивился с формулировки "свой протокол", зашёл в репозиторий и получил гулькин хуй
 
это не вкусовщина, жсон как конфиг файл это technical debt



то бишь апи =)

я ж не умаляю твоих заслуг, просто удивился с формулировки "свой протокол", зашёл в репозиторий и получил гулькин хуй
Нет, не api. У api и протокола есть разница. Я не предоставлял никому никаких библиотек, статичных методов и вообще ничего с этим связанного чтоб кто-то мог спокойно использовать это как API.

Банально, на любом языке человек сможет написать клиент и общаться с моим сервером, главное подподать под то как именно коммуникация построена, т.е под протокол

Если моих объяснений недостаточно, можешь почитать и обновить свой словарь чтоб знать разницу челибубрик :)

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

это не вкусовщина, жсон как конфиг файл это technical debt

Чем именно yaml был бы лучше или любой другой конфиг формат. Производительность бы улучшил на одну наносекунду? ))))

то бишь апи =)

я ж не умаляю твоих заслуг, просто удивился с формулировки "свой протокол", зашёл в репозиторий и получил гулькин хуй
это не вкусовщина, жсон как конфиг файл это technical debt



то бишь апи =)

я ж не умаляю твоих заслуг, просто удивился с формулировки "свой протокол", зашёл в репозиторий и получил гулькин хуй
Чем именно yaml был бы лучше, или любой другой конфиг формат. Производительность бы улучшил на одну наносекунду? ))))
Что именно в техническом плане json формат делает пагубного для моего софта?
 
ну там tap9 вирт адаптер а он сука ломается постоянно то иза опенвна то ещё иза чего)
Я заметил что виртуальные адаптеры не всегда дружат между собой. Тот же виртуалбокс создает tun/tap адаптер который может некорректно работать с другими впн протоколами (т.е ломать работоспособность).
ну там tap9 вирт адаптер а он сука ломается постоянно то иза опенвна то ещё иза чего)
Насчет v2ray клиента. Придётся не просто клиент делать, но ещё и сервер в придачу. Хотелось бы поинтересоваться, а зачем тебе весь трафик гонять по v2ray?

Upd: попробуй sing-box, он умеет tun интерфейсы создавать.
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Последнее редактирование:
Я заметил что виртуальные адаптеры не всегда дружат между собой. Тот же виртуалбокс создает tun/tap адаптер который может некорректно работать с другими впн протоколами (т.е ломать работоспособность).

Насчет v2ray клиента. Придётся не просто клиент делать, но ещё и сервер в придачу. Хотелось бы поинтересоваться, а зачем тебе весь трафик гонять по v2ray?

Upd: попробуй sing-box, он умеет tun интерфейсы создавать.
Пожалуйста, авторизуйтесь для просмотра ссылки.
упадешь когда узнаешь XD обход dpi операторов ахах) ws 80 порт, есть нетмод но там tap9 но так то с ним проблем нету если у тебя только на пк не стоит вмвар опенвпн и тд шляпы)
сингбокс зачекаю
 
упадешь когда узнаешь XD обход dpi операторов ахах) ws 80 порт, есть нетмод но там tap9 но так то с ним проблем нету если у тебя только на пк не стоит вмвар опенвпн и тд шляпы)
сингбокс зачекаю
У тебя 80 порт блокируют? Или ты хочешь весь трафик пустить по 80 порту?
 
У тебя 80 порт блокируют? Или ты хочешь весь трафик пустить по 80 порту?
ну и весь трафик и завернуть его с хостом как это делает в2рей, ну или как это проихсодит с ссш тунелем с нагрузкой через GET заголовок и хост
 
ну и весь трафик и завернуть его с хостом как это делает в2рей, ну или как это проихсодит с ссш тунелем с нагрузкой через GET заголовок и хост
На самом деле тебе не обязательно использовать tun интерфейсы для подобных вещей. Можешь просто поставить system-wide proxy (не зависит от твоей оси). А если у провайдера стоит transparent dns или какое-либо подобное говно, то просто юзай dnscrypt, либо DOH. Cloudflare'овские ребята вроде как имеют в наличии несколько dns серверов которые поддерживают dns over https (если ты фаерфоксом не пользуешься). Если все таки пользуешься фаером, то там есть встроенный dns over https.
 
Назад
Сверху Снизу