Пример организации STUN вручную

TODO дописать и обмазать примерами

Пример организации STUN вручную (не успеем).

Протокол установдения «соединения» между клиентом1 и клиентом2 (все «пакеты» далее — UDP):

  1. клиент1 сообщает координатору, что хочет установить соединение с клиентом2; клиент2 (который тоже на связи с координатором) узнаёт от этом

  2. клиент2 отправляет пакет Iip2:Iport2 → координатор

    • На сервере2 образуется запись в conntrack

      • Iip2:Iport2 ⇒ координатор:… / Eip2:Eport2

  3. координатор получает этот пакет и отправляет клиенту1 информацию о Eip2:Eport2

  4. клиент1 отправляет пакет Iip1:Iport1 → координатор

    • На сервере1 образуется запись в conntrack

      • Iip1:Iport1 → координатор:… / Eip1:Eport1

  5. координатор получает этот пакет и отправляет клиенту2 информацию о Eip1:Eport1

  6. клиент2 отправляет пакет Iip2:Iport2 → Eip1:Eport1

    • На сервере2 образуется запись в conntrack

      • Iip2:Iport2 → Eip1:Eport1 / Eip2:Eport2

  7. клиент1 отправляет пакет Iip1:Iport1 → Eip2:Eport2

    • На сервере1 образуется запись в conntrack

      • Iip1:Iport1 → Eip2:Eport2 / Eip1:Eport1

  8. Этот пакет доходит до сервера2, и согласно записи в conntrack передаётся клиенту2 как «ответ» на пакет (5)

  9. клиент2 отправляет пакет Iip2:Iport2 → Eip1:Eport1

  10. Этот пакет доходит до сервера1, и согласно записи в conntrack передаётся клиенту1 как «ответ» на пакет (6)

Если клиент1 и клиент2 не будут тупить дольше времени жизни записи в conntrack, процесс будет продолжаться без участия координатора

По концам такого туннеля можно организовать ip over UDP с помощью ip fou

Простой пример для linux iptables … -j MASQUERADE, в котором

client - nat2[NAT:10.3.0.4] - stun - [NAT:10.2.0.2]nat1 - srv

FrBrGeorge/STUN by hands (последним исправлял пользователь FrBrGeorge 2025-03-30 22:59:39)