Как написать VPN-сервер

Я решил написать свой собственный легкий 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 на стороне клиента, я уверен, что не нужно делать это для моих нужд.

Ответы

Ответ 1

Я бы начал, посмотрев OpenVPN исходный код. Это не java, но должно быть достаточно, чтобы понять принципы.