Jump to content

Wireguard и IP roaming - не работает на стороне сервера


Recommended Posts

Добрый день. Wireguard не отрабатывает смену IP адреса сервера (при переключении между основным и резервным провайдерами), хотя должен, исходя из описания (см. ниже).

Конфигурация: два провайдера, один основной, второй резервный, оба дают белые публичные IP адреса. К обоим можно подключиться через Wireguard, используя IP или привязанное к нему KeenDNS имя.

Тестирование смены IP адресов у клиентов (переход с мобильного Интернет на другой Wi-Fi другого провайдера и обратно) отрабатывает без проблем, Wireguard клиент моментально переподключается вообще без видимой задержки.

Тестирование смены IP адресов у сервера (роутера Кинетик) посредством смены провайдера не проходит - пакеты по туннелю перестают идти, пока не разорвешь соединение вручную, и не подключишь заново - тогда восстанавливается, и пакеты идут, как раньше. Но автоматического переключения, по аналогии с клиентами, не происходит.

Читаем описание с сайта Wireguard:

Built-in Roaming: The client configuration contains an initial endpoint of its single peer (the server), so that it knows where to send encrypted data before it has received encrypted data. The server configuration doesn't have any initial endpoints of its peers (the clients). This is because the server discovers the endpoint of its peers by examining from where correctly authenticated data originates. If the server itself changes its own endpoint, and sends data to the clients, the clients will discover the new server endpoint and update the configuration just the same. Both client and server send encrypted data to the most recent IP endpoint for which they authentically decrypted data. Thus, there is full IP roaming on both ends.

Предполагаем, что смена IP сервера должна отрабатываться так же незаметно, как и смена IP клиента. Но этого не происходит.

Нагуглил вот это обсуждение, относящееся к идентичной, кажется, проблеме с DD-WRT: https://forum.dd-wrt.com/forum/viewtopic.php?p=1221446 . Если я правильно понял, там проблема решилась только после того, как насильно соединение разрывалось и переподключалось (скрипт https://forum.dd-wrt.com/phpBB2/viewtopic.php?p=1202631#1202631 ). Но это так себе решение по ряду причин.

Почему не работает IP роуминг для сервера, и куда копать?

3.6.10

 

 

 

Edited by Дмитрий Лебедев
Link to comment
Share on other sites

5 часов назад, Дмитрий Лебедев сказал:

If the server itself changes its own endpoint, and sends data to the clients, the clients will discover the new server endpoint

Так может проблема в том, что сервер не шлёт никакие данные после перехода, а ждёт их от клиента, который не знает нового ендпоинта? Попробуйте включить keepalive на стороне сервера для пира клиента. Тогда сервер будет периодически слать пакеты клиенту, и при смене ip это позволит клиенту увидеть новый адрес.

Link to comment
Share on other sites

2 часа назад, werldmgn сказал:

Так может проблема в том, что сервер не шлёт никакие данные после перехода, а ждёт их от клиента, который не знает нового ендпоинта? Попробуйте включить keepalive на стороне сервера для пира клиента. Тогда сервер будет периодически слать пакеты клиенту, и при смене ip это позволит клиенту увидеть новый адрес.

Нет, непохоже. Во-первых, я включал Keep alive 3 секунды в конфигурации на сервере и клиенте - не влияет на переподключение никак. Во-вторых, во время теста идёт непрерывный пинг с клиента на внутренний IP за роутером, так что туннель сам по себе держится и активен. Тут что-то другое.

Link to comment
Share on other sites

Вот, что нашел в Интернете. Мы можем что-то похоже сделать? Я так понимаю это делается на клиенте, и в нашем случае будет работать только тогда, когда и клиентом и сервером выступает Кинетик?

 

Endpoint with changing IP

After resolving a server's domain, WireGuard will not check for changes in DNS again (https://lists.zx2c4.com/pipermail/wireguard/2017-November/002028.html).

If the WireGuard server is frequently changing its IP-address due DHCP, Dyndns, IPv6, etc., any WireGuard client is going to lose its connection, until its endpoint is updated via something like wg set "$INTERFACE" peer "$PUBLIC_KEY" endpoint "$ENDPOINT".

Also be aware, if the endpoint is ever going to change its address (for example when moving to a new provider/datacenter), just updating DNS will not be enough, so periodically running reresolve-dns might make sense on any DNS-based setup.

Luckily, wireguard-tools (https://archlinux.org/packages/?name=wireguard-tools) provides an example script /usr/share/wireguard-tools/examples/reresolve-dns/reresolve-dns.sh, that parses WG configuration files and automatically resets the endpoint address.

One needs to run the /usr/share/wireguard-tools/examples/reresolve-dns/reresolve-dns.sh /etc/wireguard/wg.conf periodically to recover from an endpoint that has changed its IP.

One way of doing so is by updating all WireGuard endpoints once every thirty seconds[6] (https://git.zx2c4.com/WireGuard/tree/contrib/examples/reresolve-dns/README) via a systemd timer:
/etc/systemd/system/wireguard_reresolve-dns.timer

[Unit]
Description=Periodically reresolve DNS of all WireGuard endpoints

[Timer]
OnCalendar=*:*:0/30

[Install]
WantedBy=timers.target
/etc/systemd/system/wireguard_reresolve-dns.service

[Unit]
Description=Reresolve DNS of all WireGuard endpoints
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'for i in /etc/wireguard/*.conf; do /usr/share/wireguard-tools/examples/reresolve-dns/reresolve-dns.sh "$i"; done'

Afterwards enable (https://wiki.archlinux.org/title/Enable) and start (https://wiki.archlinux.org/title/Start) wireguard_reresolve-dns.timer

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...