Я пытаюсь понять, как только пакет достигает интерфейса WireGuard ( wg0
), как он отправляется на порт UDP, откуда его можно отправить принимающему партнеру.
Я читал технический документ WireGuard, в котором говорится:
Сам интерфейс имеет закрытый ключ и порт UDP, на котором он прослушивает (подробнее об этом позже), за которым следует список пиров.
У меня есть только элементарное понимание работы в сети, но я думал, что процессы прослушивают порты, так что же означает, что сетевой интерфейс прослушивает порт UDP?
Если есть способ прослушивания порта сетевым интерфейсом, то на принимающем узле , пакет также может быть получен через интерфейс WireGuard из порта UDP. Это правильное понимание?
WireGuard создает сокет UDP и привязывает его к адресу с помощью специальных функций ядра: sock_create_kern
и kernel_bind
.
Вот исходный код WireGuard для создания сокета IPv4. Аналогичный код есть и для сокета IPv6.
WireGuard также привязывает сокет к туннелю UDP с помощью вызова setup_upd_tunnel
.