Я решил написать свой собственный легкий VPN-сервер в Java. С точки зрения программирования мне кажется, что VPN-сервер - это просто прокси-сервер, который шифрует трафик от клиента и расшифровывает его на сервере. Может ли кто-нибудь указать мне на скелет написания такого сервера?
Я знаю, что есть много из коробки и даже с открытым исходным кодом, но, к сожалению, хотя я знаю несколько языков веб-программирования, примеры кода C, которые я видел, не документированы/структурированы таким образом, что я могу это понять.
Части, которые я хотел бы представить себе:
- Тема factory для объектов клиента
- Коннектор сокетов для клиентов
- Способ создания заголовка аутентификации IPSec (AH)
- Способ создания IPSec Encapsulating Security Payload (ESP)
- Что-то для Ассоциации интернет-безопасности и протокола управления ключами (ISAKMP)
- Обмен ключами через Интернет (IKE)
- Модули проверки подлинности PKI
- Репозиторий сертификатов (SQLLite)
- Генерация ключей Oakley (для IKE и ISAKMP)
- Некоторые предупреждения о предотвращении повторного использования пакетов
Части, на которых я планирую использовать общие модули для (и создания адаптеров), являются Криптографическими Алгоритмами (AES предпочтительно, хотя кажется, что такие окна, как DES/3DES - Noobs)
Если кто-то может добавить дополнительные детали к частям, которые необходимы для сервера IPSec vpn, не стесняйтесь вносить свой вклад. Поскольку это необходимо для запуска этого на более раннем аппаратном обеспечении Linux из того, что я могу сказать, сервер должен быть IPSec, а не горячей SSLVPN. Целевая платформа - это старая коробка с 1,5 ГГц, которую я нагнетал с 2 ГБ оперативной памяти DDR2, зеркальным жестким диском на 100 ГБ и 2 гигабитными никами.
С яркой стороны, поскольку существует так много типов VPN на стороне клиента, я уверен, что не нужно делать это для моих нужд.