У меня есть домашний сервер с системой linux, дистрибутив Arch - 6.7.0
Есть белый IPv4 адрес. На роутере я пробросила несколько портов к нужным сервисам на сервере, точнее, wireguard.
У меня есть приватная сетка:
Взяла блок адресов:
- IPv4 - 172.23.167.64/27
- IPv6 - fda0:decc:6799::/48
У меня настроен BGP (Bird), настроила пиринг с одним человеком через wireguard (wg2). Wireguard туннель (wg2), я поднимала через systemd-networkd (/etc/systemd/network/wg2.netdev):
[NetDev]
Name = wg2
Kind = wireguard
Description = Wireguard tunnel (wg2)
[WireGuard]
PrivateKey = ...
ListenPort = 4444
[WireGuardPeer]
Endpoint = example.com:1234
PublicKey = ...
AllowedIPs = 0.0.0.0/0,::/0
wg2.network:
[Match]
Name = wg2
[Network]
VRF = dn42
[Address]
Address = 172.23.167.66/32
Peer = 172.22.119.1/32
[Address]
Address = fda0:decc:6799::1/128
Peer = fe80::acab/128
После этого я захотела иметь доступ к внутренним сервисам dn42, используя dn42 публичные DNS сервера. Чтобы делать это через свой домашний PC, на котором тот же arch, настроила wireguard туннель со своим сервером (wg1.netdev):
[NetDev]
Name = wg1
Kind = wireguard
Description = Wireguard tunnel with local PC
[WireGuard]
PrivateKey = ...
ListenPort = 4321
[WireGuardPeer]
Endpoint = local_IPv4:1234
PublicKey = ...
AllowedIPs = 0.0.0.0/0,::/0
wg1.network:
[Match]
Name = wg1
[Network]
VRF = dn42
[Address]
Address = 172.23.167.65/32
Peer = 172.23.167.67/32
[Address]
Address = fda0:decc:6799::2/128
Peer = fda0:decc:6799::3/128
На домашнем PC работает wg-quick, который после поднятия соединения с сервером пересылает пакеты предназначенные сети dn42 через wireguard. Всё работает.
Но проблема случилась когда я подняла пиринг с ещё одним соседом (wg3):
[NetDev]
Name = wg3
Kind = wireguard
Description = Wireguard tunnel (...)
[WireGuard]
PrivateKey = ...
ListenPort = 56789
[WireGuardPeer]
Endpoint = example2.com:12345
PublicKey = ...
AllowedIPs = 0.0.0.0/0,fe80::/64,fd00::/8
wg3.network:
[Match]
Name = wg3
[Network]
VRF = dn42
[Address]
Address = 172.23.167.68/32
Peer = 172.20.129.169/32
[Address]
Address = fda0:decc:6799::4/128
Peer = fd42:4242:2601:31::1/128
Все интерфейсы (wg1, wg2, wg3) находятся в vrf dn42
, я хотела изолировать маршруты dn42 от основных.
Всё работало, до тех пор, пока я не поменяла свой адрес на интерфейсе wg1
на другой, в файле конфигурации systemd-networkd.
Следующая проблема возникает ТОЛЬКО при смене адреса на интерфейсе wg1 на любой другой адрес из диапазона 172.23.167.64/27 КРОМЕ 172.23.167.65. То есть, когда я ставлю адрес 172.23.167.65, никаких проблем нет.
Я выявила проблему, при пинге:
ip vrf exec dn42 ping fd42:4242:2601::1 -s 1400
Я не получаю никаких ответов. Ловлю с помощью tcpdump:
21:12:12.069833 wg3 Out IP6 fda0:decc:6799::4 > fd42:4242:2601:31::1: frag (0|1368) ICMP6, echo request, id 6, seq 1, length 1368
21:12:12.069879 wg3 Out IP6 fda0:decc:6799::4 > fd42:4242:2601:31::1: frag (1368|40)
21:12:12.081254 wg3 In IP6 fd42:4242:2601:31::1 > fda0:decc:6799::4: frag (1368|40)
21:12:13.084029 wg3 Out IP6 fda0:decc:6799::4 > fd42:4242:2601:31::1: frag (0|1368) ICMP6, echo request, id 6, seq 2, length 1368
21:12:13.084039 wg3 Out IP6 fda0:decc:6799::4 > fd42:4242:2601:31::1: frag (1368|40)
21:12:13.095642 wg3 In IP6 fd42:4242:2601:31::1 > fda0:decc:6799::4: frag (1368|40)
21:12:14.097680 wg3 Out IP6 fda0:decc:6799::4 > fd42:4242:2601:31::1: frag (0|1368) ICMP6, echo request, id 6, seq 3, length 1368
21:12:14.097693 wg3 Out IP6 fda0:decc:6799::4 > fd42:4242:2601:31::1: frag (1368|40)
21:12:14.109856 wg3 In IP6 fd42:4242:2601:31::1 > fda0:decc:6799::4: frag (1368|40)
С пингом без размера 1400 пинги идут:
PING fd42:4242:2601:31::1 (fd42:4242:2601:31::1) 56 data bytes
64 bytes from fd42:4242:2601:31::1: icmp_seq=1 ttl=64 time=10.1 ms
64 bytes from fd42:4242:2601:31::1: icmp_seq=2 ttl=64 time=10.6 ms
64 bytes from fd42:4242:2601:31::1: icmp_seq=3 ttl=64 time=10.6 ms
Когда ставлю обратно адрес 172.23.167.65 на wg1, всё работает:
21:16:09.033254 wg3 Out IP6 fda0:decc:6799::4 > fd42:4242:2601:31::1: frag (0|1368) ICMP6, echo request, id 1, seq 1, length 1368
21:16:09.033264 wg3 Out IP6 fda0:decc:6799::4 > fd42:4242:2601:31::1: frag (1368|40)
21:16:09.043313 wg3 In IP6 fd42:4242:2601:31::1 > fda0:decc:6799::4: frag (0|1368) ICMP6, echo reply, id 1, seq 1, length 1368
21:16:09.043326 wg3 In IP6 fd42:4242:2601:31::1 > fda0:decc:6799::4: frag (1368|40)
21:16:10.034697 wg3 Out IP6 fda0:decc:6799::4 > fd42:4242:2601:31::1: frag (0|1368) ICMP6, echo request, id 1, seq 2, length 1368
21:16:10.034708 wg3 Out IP6 fda0:decc:6799::4 > fd42:4242:2601:31::1: frag (1368|40)
21:16:10.045285 wg3 In IP6 fd42:4242:2601:31::1 > fda0:decc:6799::4: frag (0|1368) ICMP6, echo reply, id 1, seq 2, length 1368
21:16:10.045294 wg3 In IP6 fd42:4242:2601:31::1 > fda0:decc:6799::4: frag (1368|40)
21:16:11.036837 wg3 Out IP6 fda0:decc:6799::4 > fd42:4242:2601:31::1: frag (0|1368) ICMP6, echo request, id 1, seq 3, length 1368
21:16:11.036848 wg3 Out IP6 fda0:decc:6799::4 > fd42:4242:2601:31::1: frag (1368|40)
PING fd42:4242:2601:31::1 (fd42:4242:2601:31::1) 1400 data bytes
1408 bytes from fd42:4242:2601:31::1: icmp_seq=1 ttl=64 time=10.2 ms
1408 bytes from fd42:4242:2601:31::1: icmp_seq=2 ttl=64 time=10.6 ms
1408 bytes from fd42:4242:2601:31::1: icmp_seq=3 ttl=64 time=10.6 ms
Я не понимаю как это возможно, как какой-то адрес на wg1 может иметь какое-то отношение к wg3. Хотелось бы узнать куда копать, и в чём может быть проблема.
Буду благодарна за хотя бы малейшие зацепки.