NAT и файрвол траверсал в WireGuard работают следующим образом: 1
- С обеих сторон соединения примерно одновременно отправляют пакет UDP. 1 В этом случае с точки зрения обоих NAT соединение будет «исходящим», что позволяет хостам общаться. 1
- Адреса и порты источника и назначения пакета, передаваемые с разных сторон соединения, должны зеркально отражать друг друга сразу после первого перевода, но до любых преобразований вторым NAT. 1 Независимо от того, какие исходные адрес и порт использует NAT на одной стороне для исходящих пакетов, другая сторона должна отправлять свои пакеты на эти же адрес и порт, и наоборот. 1
- Пакет с другой стороны должен достичь NAT до того, как исчезнут данные о исходящих соединениях. 1 Время хранения зависит от NAT и может варьироваться от половины минуты до нескольких минут. 1
Для определения, какие преобразования будет использовать NAT при общении с пирами WireGuard, используется внешняя служба, например STUN. 1
Если WireGuard находится за NAT, могут возникнуть проблемы со стабильностью связи. 5 Это связано с тем, что протокол молчалив, поэтому записи в таблице трансляции NAT могут устаревать. 5 Чтобы избежать такой ситуации, в секцию Peer нужного узла добавляют дополнительную опцию, например PersistentKeepalive = 25, которая заставляет раз в 25 секунд посылать на другой конец туннеля служебный пакет, поддерживая данные в таблице трансляции актуальными. 5