Краткая инструкция по быстрому запуску и начальной настройке VPN-сервера и клиента WireGuard на ОС Debian GNU/Linux 11 и Ubuntu Server 22.04
На сервере и клиенте устанавливаем пакет wireguard
# apt install wireguard
и переходим в каталог /etc/wireguard/
# cd /etc/wireguard/
Затем на сервере установим iptables
# apt install iptables
Далее откроем файл /etc/sysctl.conf
# nano /etc/sysctl.conf
и раскомментируем строку:
net.ipv4.ip_forward=1
Проверяем
# /sbin/sysctl -p
консоль должна показать сообщение:
net.ipv4.ip_forward = 1
Теперь необходимо сгенерировать ключи
# wg genkey | tee privatekey | wg pubkey | tee publickey
консоль покажет примерно такое сообщение:
V7EWBnlhpBTAB8l6VI6qRGtiAWme1cbNr4bSZjIFySY=
Затем понадобится открыть файл с приватным ключом. Для этого выведем содержимое файла privatekey
# cat privatekey
и консоль покажет нам этот ключ:
EKz3dmgbimPjAX3UpQSjTWgy1xzOsqpwqgRdmHRB6Hs=
Его необходимо скопировать в буфер для вставки в конфигурационный файл.
Создадим и откроем конфигурационный файл сервера wg0.conf
# touch wg0.conf # nano wg0.conf
и внесём такое содержимое:
[Interface] PrivateKey = EKz3dmgbimPjAX3UpQSjTWgy1xzOsqpwqgRdmHRB6Hs= Address = 192.168.100.1/24 SaveConfig = true PostUp = /sbin/iptables -A FORWARD -i %i -j ACCEPT; /sbin/iptables -A FORWARD -o %i -j ACCEPT; /sbin/iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE PostDown = /sbin/iptables -D FORWARD -i %i -j ACCEPT; /sbin/iptables -D FORWARD -o %i -j ACCEPT; /sbin/iptables -t nat -D POSTROUTING -o enp0s3 -j MASQUERADE ListenPort = 51820
После этого зададим права на все файлы в этом каталоге
# chmod 600 *
И также нам понадобится публичный ключ. Выводим его в сообщение в консоли
# cat publickey
консоль покажет его нам:
V7EWBnlhpBTAB8l6VI6qRGtiAWme1cbNr4bSZjIFySY=
Его необходимо будет скопировать в буфер.
Теперь на клиенте сгенерируем ключи
# wg genkey | tee privatekey | wg pubkey | tee publickey
консоль покажет:
4MfvfJaz1xmAErmVfX+8J/AhDdibm87tReUTzAuYDxM=
После этого понадобится открыть файл с приватным ключом. Для этого выведем содержимое файла privatekey
# cat privatekey
консоль покажет его:
cGahpRN7gAtOAhJBRmz2j3TvWNVT8CqS9bCtdxDFZ18=
Скопируем этот ключ в буфер.
Далее создадим и откроем файл конфигурации клиента wg-client.conf
# touch wg-client.conf # nano wg-client.conf
и пропишем в него такие параметры:
[Interface] PrivateKey = cGahpRN7gAtOAhJBRmz2j3TvWNVT8CqS9bCtdxDFZ18= Address = 192.168.100.11/32 [Peer] PublicKey = V7EWBnlhpBTAB8l6VI6qRGtiAWme1cbNr4bSZjIFySY= Endpoint = 192.168.1.30:51820 AllowedIPs = 192.168.100.0/24
Endpoint — «белый» IP-адрес сервера
Теперь выведем на экран публичный ключ
# cat publickey
консоль покажет нам его:
4MfvfJaz1xmAErmVfX+8J/AhDdibm87tReUTzAuYDxM=
Скопируем его в буфер.
После этого на сервере снова открываем файл конфигурации wg0.conf
# nano wg0.conf
и в конце файла допишем конфигурацию клиента (peer)
[Peer] PublicKey = 4MfvfJaz1xmAErmVfX+8J/AhDdibm87tReUTzAuYDxM= AllowedIPs = 192.168.100.11/32
Теперь запустим сервер
# wg-quick up wg0
Консоль должна показать нам примерно такое сообщение:
[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 192.168.100/24 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] /sbin/iptables -A FORWARD -i wg0 -j ACCEPT; /sbin/iptables -A FORWARD -o wg0 -j ACCEPT; /sbin/iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
Переходим на клиент и запустим его
# wg-quick up wg-client
Здесь консоль должна показать такое сообщение:
[#] ip link add wg-client type wireguard [#] wg setconf wg-client /dev/fd/63 [#] ip -4 address add 192.168.100.11/32 dev wg-client [#] ip link set mtu 1420 up dev wg-client [#] ip -4 route add 192.168.100.0/24 dev wg-client
Проверяем конфигурации сетевых интерфейсов
# ip a
консоль должна показать:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:68:38:85 brd ff:ff:ff:ff:ff:ff inet 192.168.1.33/24 brd 192.168.1.255 scope global enp0s3 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe68:3885/64 scope link valid_lft forever preferred_lft forever 4: wg-client: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 192.168.100.11/32 scope global wg-client valid_lft forever preferred_lft forever
И также — на сервере
# ip a
консоль покажет:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:d8:c5:17 brd ff:ff:ff:ff:ff:ff inet 192.168.1.30/24 brd 192.168.1.255 scope global enp0s3 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fed8:c517/64 scope link valid_lft forever preferred_lft forever 8: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 192.168.100.1/24 scope global wg0 valid_lft forever preferred_lft forever
Чтобы убедиться, что обе машины видят друг друга, пропингуем их:
на клиенте
# ping 192.168.100.1
на сервере
# ping 192.168.100.11
Запустим команду wg на сервере
# wg
Она покажет нам в консоли краткую статистику текущих подключений
И в самом конце нам понадобится включить службы в автозагрузку. Для этого выполняем такие команды:
на сервере
# systemctl enable wg-quick@wg0
и на клиенте
# systemctl enable wg-quick@wg-client
На этом первоначальная настройка завершена. В YouTube есть отличный ролик, где описаны более тонкие моменты в конфигурациях. Ссылка — https://www.youtube.com/watch?v=Buv3dEQ8IZA