Оказывается, что бы реализовать что-то дельное с сетью, надо уметь работать с сетями 🤔
Изначально пошёл по вообще неверному пути, так как вообще не было представления о конечной реализации. Поэтому тут есть tun, а значит для запуска клиента нужно sudo, как и тестов. Потому что программа создаст сетевой интерфейс на время своей жизни. Зато сервер работает от обычного пользователя.
Реализовано:
- Сервер прослушивает заданный в конфиге порт и парсит пакеты от клиента
- Клиент подключается к серверу и отправляет пакеты
- Каждые N секунд клиент отправляет пинг серверу, а тот отвечает
- Перед авторизацией клиент и сервер обмениваются ключами; Используется chacha20poly1305
- После авторизации пакеты шифруются при помощи сессионного ключа
- Тесты коннекта клиента и сервера
Формально реализовано, но не протестировано:
- Когда интерфейс получает данные, они отправляются определённым пакетом на сервер
Тесты на своей машине:
cargo test
Запустить:
sudo cargo run -- --config example-config.yml
. На макоси интерфейсы должны начинаться с utun, на линуксе не тестировалось.cargo run -- --config example-config.yml
- запуск сервера
Запуск в докере:
docker compose up
(Но увы, чё-то с ним не то :()