Thank you for reading this post, don't forget to subscribe!
Оригинал статьи:
Настройка нескольких подключений (peer) к Wireguard серверу
WireGuard — это протокол связи и бесплатное программное обеспечение с открытым исходным кодом, реализующее зашифрованные виртуальные частные сети, и был разработан с учетом простоты использования, высокой производительности и низкой поверхности для атак.
Устанавливаем Wireguard на каждую машину:
На каждой машине необходимо сгенерить пару ключей (от пользователя root): публичный и приватный
1 2 3 4 |
sudo su # cd /etc/wireguard # wg genkey | tee privatekey | wg pubkey > publickey |
Настраиваем конфиг машины, которая будет в роли Wireguard сервера
Редактируем конфигурационный файл wg0.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
sudo nano /etc/wireguard/wg0.conf [Interface] Address = 172.16.0.1/24 SaveConfig = false ListenPort = 51820 PrivateKey = %Private key Server% # Правила для iptables и маршрутизации PostUp = iptables -I FORWARD -i %i -j ACCEPT PostUp = iptables -I FORWARD -o %i -j ACCEPT PostUp = ip route add 192.168.1.0/24 via 172.16.0.2 dev %i PostUp = ip route add 192.168.2.0/24 via 172.16.0.3 dev %i PostDown = iptables -D FORWARD -i %i -j ACCEPT PostDown = iptables -D FORWARD -o %i -j ACCEPT PostDown = ip route delete 192.168.1.0/24 via 172.16.0.2 dev %i PostDown = ip route delete 192.168.2.0/24 via 172.16.0.3 dev %i Table = off [Peer] # Client 1 PublicKey = %Publick key Client 1% AllowedIPs = 172.16.0.2/32,192.168.1.0/24 #AllowedIPs = 0.0.0.0/0 [Peer] # Client 2 PublicKey = %Publick key Client 2% AllowedIPs = 172.16.0.3/32,192.168.2.0/24 |
В случае нескольких пиров, параметр AllowedIPs должен содержать ip-адрес wireguard-клиента (пира) с маской 32, и разрешенные сети (192.168.х.0/24) не должны пересекаться. Иначе не заработает.
Настраиваем конфиг для Client 1
Редактируем конфигурационный файл wg0.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
sudo nano /etc/wireguard/wg0.conf [Interface] Address = 172.16.0.2/24 SaveConfig = false PrivateKey = %Private key Client 1% # Правила для iptables и маршрутизации PostUp = iptables -I FORWARD -i %i -j ACCEPT; PostUp = iptables -I FORWARD -o %i -j ACCEPT; PostUp = ip route add 192.168.1.0/24 via 172.16.0.1 dev %i; PostDown = iptables -D FORWARD -i %i -j ACCEPT; PostDown = iptables -D FORWARD -o %i -j ACCEPT; PostDown = ip route delete 192.168.1.0/24 via 172.16.0.1 dev %i; Table = off [Peer] PublicKey = %Public key Server% AllowedIPs = 0.0.0.0/0 Endpoint = %ip_server%:51820 PersistentKeepalive = 25 |
Настраиваем конфиг для Client 2
Редактируем конфигурационный файл wg0.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
nano /etc/wireguard/wg0.conf [Interface] Address = 172.16.0.3/24 SaveConfig = false PrivateKey = %Private key Client 3% # Правила для iptables и маршрутизации PostUp = iptables -I FORWARD -i %i -j ACCEPT; PostUp = iptables -I FORWARD -o %i -j ACCEPT; PostUp = ip route add 192.168.2.0/24 via 172.16.0.1 dev %i; PostDown = iptables -D FORWARD -i %i -j ACCEPT; PostDown = iptables -D FORWARD -o %i -j ACCEPT; PostDown = ip route delete 192.168.2.0/24 via 172.16.0.1 dev %i; Table = off [Peer] PublicKey = %Public key Server% AllowedIPs = 0.0.0.0/0 Endpoint = %ip_server%:51820 PersistentKeepalive = 25 |
Проверка подключения клиентов к Wireguard серверу
Для начала поднимаем интерфейс wg0 вначале на Wireguard сервере, а затем на всех клиентах
1 |
sudo wg-quick up wg0 |
Затем смотрим коннекты на Wireguard сервере
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
interface: wg0 public key: %Public key Server% private key: (hidden) listening port: 51820 peer: %Publick key Client 1% endpoint: %ip-client1:port% allowed ips: 172.16.0.2/32, 192.168.1.0/24 latest handshake: 1 minute, 12 seconds ago transfer: 156.40 MiB received, 387.80 MiB sent peer: %Publick key Client 2% endpoint: %ip-client2:port% allowed ips: 172.16.0.3/32, 192.168.2.0/24 latest handshake: 1 minute, 52 seconds ago transfer: 6.10 KiB received, 1.87 KiB sent |
Если в пире присутствует строка endpoint с ip-адресом, значит соединение клиента с сервером установлено.