LINUX.ORG.RU
решено ФорумAdmin

Wireguard перестаёт работать если Peer долгое время «молчит»

 


2

1

Настроил на реальном физическом сервере Wireguard, так же настроил Wireguard на VDS. Всё хорошо, всё работает, хожу на свой сервер через VDS по внутренней VPN-сети.

Вечером прихожу домой, сажусь за ноутбук, подключаюсь к VDS, затем с VDS подключаюсь к своему серверу по Wireguard и...

# ping 10.8.0.2
PING 10.8.0.2 (10.8.0.2) 56(84) bytes of data.
^C
--- 10.8.0.2 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4094ms

«А что случилось?»

Сейчас ногами дотопал до своего сервера, всё на месте, ещё раз проверяю пинговать с VDS (10.8.0.1) свой сервер (10.8.0.2) — не пингуется.

Теперь следите за рукой, я пингую с сервера (10.8.0.2) свою VDS (10.8.0.1) и всё типа работает!

# ping 10.8.0.1
PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data.
64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=7.83 ms
64 bytes from 10.8.0.1: icmp_seq=2 ttl=64 time=3.26 ms
64 bytes from 10.8.0.1: icmp_seq=3 ttl=64 time=3.21 ms
^C
--- 10.8.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 3.208/4.765/7.831/2.168 ms

Окей, снова возвращаюсь на VDS, снова пингую сервер и о чудо, связь восстановлена!

# ssh root@82.146.53.64
Last login: Fri Apr 15 04:44:08 2022 from X.X.X.X
# ping 10.8.0.2
PING 10.8.0.2 (10.8.0.2) 56(84) bytes of data.
64 bytes from 10.8.0.2: icmp_seq=1 ttl=64 time=3.00 ms
64 bytes from 10.8.0.2: icmp_seq=2 ttl=64 time=3.15 ms
64 bytes from 10.8.0.2: icmp_seq=3 ttl=64 time=3.16 ms
^C
--- 10.8.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 3.002/3.104/3.157/0.072 ms

Что, простите? Связь по Wireguard отваливается сама по себе если Peer продолжительное время никак не пингует шлюз????

О том, что эта проблема не случайная, я вам отвечу, что у меня на реальном физическом сервере два Wireguard wg0 wg1 которые идут на две разные VDS с разными IP и оба эти Wireguard отвалились.

Пока я не пинганул со стороны сервера каждую из VDS по Wireguard, этот сервер с обоих VDS считался в оффлайне и не пинговался, лол.

Как этим Wireguard можно после этого пользоваться? И это считается надёжным решением? Мне что, в cron засунуть ping по одному пакету раз в каждый час?

Конфигурация на сервере:

# cat /etc/rc.local
#!/bin/bash
#
# /etc/rc.local: local multi-user startup script
#

ip link add dev wg0 type wireguard
ip addr add 10.8.0.2/24 dev wg0
wg set wg0 listen-port 51820 private-key /root/.wireguard/peer.key
wg set wg0 peer 4WYdcHokRun38j6/hjUM9RpIgV2NE/tNRDT+W9lRMmU= endpoint 82.146.53.64:51820 allowed-ips 10.8.0.0/24

ip link add dev wg1 type wireguard
ip addr add 10.8.1.2/24 dev wg1
wg set wg1 listen-port 51830 private-key /root/.wireguard/peer.key
wg set wg1 peer 6xGlQ7CW8R8LVOCYh+7N14Kv+b6vyMGvxEMizRCBzxQ= endpoint 82.146.41.144:51830 allowed-ips 10.8.1.0/24

# End of file
# ifconfig wg0
wg0       Link encap:(hwtype unknown)
          inet addr:10.8.0.2  P-t-P:10.8.0.2  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP  MTU:1420  Metric:1
          RX packets:10 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1112  TX bytes:1256

# ifconfig wg1
wg1       Link encap:(hwtype unknown)
          inet addr:10.8.1.2  P-t-P:10.8.1.2  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP  MTU:1420  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1356  TX bytes:948

# wg
interface: wg0
  public key: PoV1YwQr9VjVBSNMVZHkIrw17IKL4I9s9cpQUNNQgms=
  private key: (hidden)
  listening port: 51820

peer: 4WYdcHokRun38j6/hjUM9RpIgV2NE/tNRDT+W9lRMmU=
  endpoint: 82.146.53.64:51820
  allowed ips: 10.8.0.0/24
  latest handshake: 12 minutes, 5 seconds ago
  transfer: 1.09 KiB received, 1.23 KiB sent

interface: wg1
  public key: PoV1YwQr9VjVBSNMVZHkIrw17IKL4I9s9cpQUNNQgms=
  private key: (hidden)
  listening port: 51830

peer: 6xGlQ7CW8R8LVOCYh+7N14Kv+b6vyMGvxEMizRCBzxQ=
  endpoint: 82.146.41.144:51830
  allowed ips: 10.8.1.0/24
  latest handshake: 29 minutes, 27 seconds ago
  transfer: 1.32 KiB received, 948 B sent

Конфигурация на первом VDS:

# cat /etc/rc.local
#!/bin/bash
#
# /etc/rc.local: local multi-user startup script
#

ip link add dev wg0 type wireguard
ip addr add 10.8.0.1/24 dev wg0
wg set wg0 listen-port 51820 private-key ~/.wireguard/peer.key
wg set wg0 peer PoV1YwQr9VjVBSNMVZHkIrw17IKL4I9s9cpQUNNQgms= allowed-ips 10.8.0.0/24
ip link set wg0 up

# End of file
# ifconfig wg0
wg0       Link encap:(hwtype unknown)
          inet addr:10.8.0.1  P-t-P:10.8.0.1  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP  MTU:1420  Metric:1
          RX packets:5812 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6344 errors:0 dropped:37 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:572432  TX bytes:1973080

# wg
interface: wg0
  public key: 4WYdcHokRun38j6/hjUM9RpIgV2NE/tNRDT+W9lRMmU=
  private key: (hidden)
  listening port: 51820

peer: PoV1YwQr9VjVBSNMVZHkIrw17IKL4I9s9cpQUNNQgms=
  endpoint: X.X.X.X:51820
  allowed ips: 10.8.0.0/24
  latest handshake: 14 minutes, 24 seconds ago
  transfer: 559.02 KiB received, 1.88 MiB sent

Конфигурация на втором VDS:

# cat /etc/rc.local
#!/bin/bash
#
# /etc/rc.local: local multi-user startup script
#

ip link add dev wg1 type wireguard
ip addr add 10.8.1.1/24 dev wg1
wg set wg1 listen-port 51830 private-key ~/.wireguard/peer.key
wg set wg1 peer PoV1YwQr9VjVBSNMVZHkIrw17IKL4I9s9cpQUNNQgms= allowed-ips 10.8.1.0/24
ip link set wg1 up

# End of file
# ifconfig wg1
wg1       Link encap:(hwtype unknown)
          inet addr:10.8.1.1  P-t-P:10.8.1.1  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP  MTU:1420  Metric:1
          RX packets:15271 errors:1 dropped:0 overruns:0 frame:1
          TX packets:13208 errors:2 dropped:7 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1565444  TX bytes:3344568

# wg
interface: wg1
  public key: 6xGlQ7CW8R8LVOCYh+7N14Kv+b6vyMGvxEMizRCBzxQ=
  private key: (hidden)
  listening port: 51830

peer: PoV1YwQr9VjVBSNMVZHkIrw17IKL4I9s9cpQUNNQgms=
  endpoint: X.X.X.X:51830
  allowed ips: 0.0.0.0/0
  latest handshake: 33 minutes, 9 seconds ago
  transfer: 1.49 MiB received, 3.19 MiB sent

Это вообще нормальное поведение для Wireguard? Шлюз перестаёт видить Peer, пока Peer не отправит шлюзу какой-нибудь ping?

★★★★★

Прошло 25 минут с момента последнего handshake, VDS опять не пингует сервер, пока я с сервера не пинганул VDS!

# ssh root@82.146.53.64
Last login: Fri Apr 15 05:11:50 2022 from X.X.X.X
# wg
interface: wg0
  public key: 4WYdcHokRun38j6/hjUM9RpIgV2NE/tNRDT+W9lRMmU=
  private key: (hidden)
  listening port: 51820

peer: PoV1YwQr9VjVBSNMVZHkIrw17IKL4I9s9cpQUNNQgms=
  endpoint: X.X.X.X:51820
  allowed ips: 10.8.0.0/24
  latest handshake: 25 minutes, 32 seconds ago
  transfer: 559.02 KiB received, 1.88 MiB sent

# ping 10.8.0.2
PING 10.8.0.2 (10.8.0.2) 56(84) bytes of data.
^C
--- 10.8.0.2 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1034ms

???

#
logout
Connection to 82.146.53.64 closed.
# ping 10.8.0.1
PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data.
64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=7.32 ms
64 bytes from 10.8.0.1: icmp_seq=2 ttl=64 time=3.24 ms
^C
--- 10.8.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 3.236/5.276/7.316/2.040 ms
# ssh root@82.146.53.64
Last login: Fri Apr 15 05:23:02 2022 from X.X.X.X
# ping 10.8.0.2
PING 10.8.0.2 (10.8.0.2) 56(84) bytes of data.
64 bytes from 10.8.0.2: icmp_seq=1 ttl=64 time=2.99 ms
64 bytes from 10.8.0.2: icmp_seq=2 ttl=64 time=3.07 ms
^C
--- 10.8.0.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 2.986/3.029/3.073/0.043 ms
!!!

Spoofing ★★★★★
() автор топика

Теперь на сервере, который выступает как Peer подключаясь к двум VDS по wg0 и wg1, так:

- wg set wg0 peer 4WYdcHokRun38j6/hjUM9RpIgV2NE/tNRDT+W9lRMmU= endpoint 82.146.53.64:51820 allowed-ips 10.8.0.0/24
+ wg set wg0 peer 4WYdcHokRun38j6/hjUM9RpIgV2NE/tNRDT+W9lRMmU= endpoint 82.146.53.64:51820 allowed-ips 10.8.0.0/24 persistent-keepalive 60
- wg set wg1 peer 6xGlQ7CW8R8LVOCYh+7N14Kv+b6vyMGvxEMizRCBzxQ= endpoint 82.146.41.144:51830 allowed-ips 10.8.1.0/24
+ wg set wg1 peer 6xGlQ7CW8R8LVOCYh+7N14Kv+b6vyMGvxEMizRCBzxQ= endpoint 82.146.41.144:51830 allowed-ips 10.8.1.0/24 persistent-keepalive 60
# wg
interface: wg0
  public key: PoV1YwQr9VjVBSNMVZHkIrw17IKL4I9s9cpQUNNQgms=
  private key: (hidden)
  listening port: 51820

peer: 4WYdcHokRun38j6/hjUM9RpIgV2NE/tNRDT+W9lRMmU=
  endpoint: 82.146.53.64:51820
  allowed ips: 10.8.0.0/24
  latest handshake: 7 seconds ago
  transfer: 2.23 KiB received, 2.96 KiB sent
  persistent keepalive: every 1 minute

interface: wg1
  public key: PoV1YwQr9VjVBSNMVZHkIrw17IKL4I9s9cpQUNNQgms=
  private key: (hidden)
  listening port: 51830

peer: 6xGlQ7CW8R8LVOCYh+7N14Kv+b6vyMGvxEMizRCBzxQ=
  endpoint: 82.146.41.144:51830
  allowed ips: 10.8.1.0/24
  latest handshake: 2 minutes, 1 second ago
  transfer: 1.79 KiB received, 1.78 KiB sent
  persistent keepalive: every 1 minute
Spoofing ★★★★★
() автор топика

Блин, спуф, ну как можно быть таким балбесом, просто рука-лицо. Ну как можно было умудриться в конфиге из пяти ключевых слов осилить только 4 и нафиг проигнорировать опцию keepalive? Кудесник.

Anoxemian ★★★★★
()