Настроил на реальном физическом сервере 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?