Как установить НЕ статическое соединение через сокет L2TPv3 через IP между двумя машинами - PullRequest
0 голосов
/ 27 июня 2019

Я не нашел примеров, как реализовать L2TPv3 поверх IP

Я нашел только пару реализаций L2TP с открытым исходным кодом:

L2TPv3 rfc ничего не говорит о том, как это реализовано в linux, что очевидно

документация по ядру: https://github.com/torvalds/linux/blob/master/Documentation/networking/l2tp.txt говорит, что мы должны использовать netlink + стандартные сокеты, что нам что-то говорит. Но я не понимаю, почему мы должны использовать netlink вместе со стандартными сокетами?

файл заголовка ядра: https://github.com/torvalds/linux/blob/master/include/uapi/linux/l2tp.h он имеет тонны перечислений и команд для структуры netlink + l2tpip для. Я не понимаю, как правильно их использовать.

И заключительная часть установления контрольного обмена L2TPv3 (SCCRQ, SCCRP, SCCCN). Прочитав документацию по ядру, у меня есть только собственное понимание, которое может быть неверным, но вот оно.

сторона сервера:

  1. Подготовить туннель 0, розетка
  2. Создание гнезда genl для l2tp
  3. Создать стандартную структуру сокета, заполняющую l2tpip (socket create + bind), где tunnel_id равно 0
  4. Использование гнезда genl создать туннель 0
  5. Ожидание SCCRQ (насколько я понимаю, заголовок будет иметь контрольный идентификатор соединения, равный нулю)

  6. На полученном SCCRQ в туннеле 0, сокет

  7. Из полученного SCCRQ захватить идентификатор назначенного контрольного соединения AVL, который получен_туннелем_идей на другой стороне
  8. Создать local_tunnel_id для нашей стороны
  9. Создать стандартную структуру сокетов, заполняющую l2tpip (socket create + bind), где tunnel_id - local_tunnel_id
  10. Используя сокет genl, создайте туннель с помощью local_tunnel_id
  11. Отправка SCCRP с идентификатором контрольного соединения заголовка, равным Receive_tunnel_id, и идентификатором назначенного контрольного соединения AVL, равным local_tunnel_id
  12. Подождите, пока SCCN на этом сокете

на стороне клиента

  1. Я не знаю, как это делается на этой стороне

Как я понимаю, дальнейшая связь будет осуществляться через второй стандартный сокет, а нулевой идентификатор туннеля получает ТОЛЬКО SCCRQ

Было бы здорово получить разъяснения по этим деталям

...