К своему стыду или счастью не имел дел с WG до текущего момента.
Вынудили тут установить на роутер для входа в частную сеть.
Вроде настроил и запустил. Вроде запустилось, но клиенты не могут поднять Handshake. Причём заметил, что не могут это сделать только те клиенты, у которых интернет через NAT.
В tcpdump на роутере с NAT это видно вот так:
00:16:53.196597 ppp0 Out IP <client.router.ip>.60641 > <wg.server.ip>.51820: UDP, length 148
00:16:53.371485 ppp0 In IP <wg.server.ip>.33438 > <client.router.ip>.60641: UDP, length 92
со стороны клиента за NAT конечно же второй пакет (ответ от сервера WG) не приходит. Я вижу в этом логику NAT роутера такую, что это какой-то неизвестный ему пакет, такого в conntrack нету и он его отбрасывает, ибо не знает кому в сети его передать. Это и логично.
А как это должно работать? Есть какой-то WG conntrack helper? Не нашёл, да и как он узнает какие порты то пробрасывать? Можно как-то «заморозить» порт ответа от сервера? А как? тоже не нашёл...
Пример конфига сервера:
[Interface]
Address = 192.168.9.1/24
ListenPort = 51820
PrivateKey = 8KuFf8BE9dV/WQwCOTYhEjaNGIQKI5/VdyEfYyg4WHY=
[Peer]
# Client 1
PublicKey = e0p9r6uAZBMeZgEHT2YiflkPCQEdV3c4UhlfC/jahjo=
AllowedIPs = 192.168.9.2/32
PersistentKeepAlive = 25
Пример конфига клиента:
[Interface]
PrivateKey = sNF9d5uBmiK6HuuTA0enPf0nNZ6hKsBAvm/ug0LT7UU=
Address = 192.168.9.2/32, fd00:9::2/128
ListenPort = 51820
DNS = 192.168.9.1
[Peer]
PublicKey = LZEOHsadmY84S+dlL3sdRybTg64BJdnyAnfK/ld7slE=
# PresharedKey not used
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = router.org:51820
PersistentKeepAlive = 25


