Камрады, столкнулся со странной проблемой, вроде делаю всё по букварю, но никак.
Есть сервер с реальным IP, есть клиенты (железки, стоящие на всяком интернете за nat’ом), к которым надо подключаться из разных мест (я выбрал wireguard), для упрощения соединения - людям, подключающимся через тот же wireguard откуда угодно (например, ноутбук)
На сервере wireguard запущен через systemd-шный юнит wg-quick@wg0.service, файл /etc/wireguard/wg0.conf:
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = $PRIV
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source $SERVER_IP
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source $SERVER_IP
[Peer]
PublicKey = $PUB
PresharedKey = $PSK
AllowedIPs = 10.0.0.3/32 #laptop1
[Peer]
PublicKey = $PUB
PresharedKey = $PSK
AllowedIPs = 10.0.0.101/32 #client1
[Peer]
PublicKey = $PUB
PresharedKey = $PSK
AllowedIPs = 10.0.0.102/32 #client2
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 SERVER_IP 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wg0
SERVER_IP 0.0.0.0 255.255.255.240 U 0 0 0 eth0
Client1 поднимается так:
ip link add dev wg0 type wireguard
ip addr add 10.0.0.101/24 dev wg0
wg set wg0 private-key /etc/wireguard/client1.priv peer $PUB preshared-key /etc/wireguard/client1.psk endpoint SERVER_IP:51820 allowed-ips 10.0.0.0/24 persistent-keepalive 60
ip link set wg0 up
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 205 0 0 eth3
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wg0
192.168.0.0 0.0.0.0 255.255.255.0 U 205 0 0 eth3
Client2/3/4/etc отличаются только ключами и IP.
У laptop1 AllowedIPs прописан 0.0.0.0/0, при подключении он пингуется и с самого сервера и с клиентов.
C clientX можно пинговать только шлюз (или клиентов, у которых AllowedIPs = 0.0.0.0/0), с соседних клиентов его - никак. Если я пытаюсь подключить через wg-quick, меняя AllowedIPs на 0.0.0.0/0, то всё работает, но весь трафик идёт через vpn-сервер, а это не хотелось бы.
Как пустить только одну подсеть через wireguard? ЧЯДНТ?