Краткая инструкция по быстрой настройке VPN-сервера и клиента WireGuard на ОС Gentoo GNU/Linux.
На сервере и клиенте устанавливаем wireguard-tools
# emerge --ask net-vpn/wireguard-tools
и переходим в каталог /etc/wireguard/
# cd /etc/wireguard/
Затем на сервере откроем файл /etc/sysctl.conf
# nano /etc/sysctl.conf
и исправим строку net.ipv4.ip_forward=0 на
net.ipv4.ip_forward=1
Проверяем
# sysctl -p
консоль должна показать сообщение:
net.ipv4.ip_forward = 1
Теперь необходимо сгенерировать ключи
# wg genkey | tee privatekey | wg pubkey | tee publickey
консоль покажет примерно такое сообщение:
OkcHUyWEzcMk9WjzqyXuSRAWO1mGfaaxSsqNr+pkbkk=
Затем понадобится открыть файл с приватным ключом. Для этого выведем содержимое файла privatekey
# cat privatekey
и консоль покажет нам этот ключ:
wDRR2HwdAapFPosmM6FU6cmxBlLjPmCpe3TmJb1M9WY=
Его необходимо скопировать в буфер для вставки в конфигурационный файл.
Создадим и откроем конфигурационный файл сервера wg0.conf
# touch wg0.conf # nano wg0.conf
и внесём такое содержимое:
[Interface] PrivateKey = wDRR2HwdAapFPosmM6FU6cmxBlLjPmCpe3TmJb1M9WY= Address = 192.168.100.1/24 SaveConfig = true PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s3 -j MASQUERADE ListenPort = 51820
После этого зададим права на все файлы в этом каталоге
# chmod 600 *
И также нам понадобится публичный ключ. Выводим его в сообщение в консоли
# cat publickey
консоль покажет его нам:
OkcHUyWEzcMk9WjzqyXuSRAWO1mGfaaxSsqNr+pkbkk=
Его необходимо будет скопировать в буфер.
Теперь на клиенте сгенерируем ключи
# wg genkey | tee privatekey | wg pubkey | tee publickey
консоль покажет:
l7OUNaVuPz5Rrb/7KHaDf+XqUMm7nFjPrSREPM6lATw=
После этого понадобится открыть файл с приватным ключом. Для этого выведем содержимое файла privatekey
# cat privatekey
консоль покажет его:
AHF6JMaah3dvp4+QxjV/jeaARrKxJu8FX7hGEeqU1kg=
Скопируем этот ключ в буфер.
Далее создадим и откроем файл конфигурации клиента wg-client.conf
# touch wg-client.conf # nano wg-client.conf
и пропишем в него такие параметры:
[Interface] PrivateKey = AHF6JMaah3dvp4+QxjV/jeaARrKxJu8FX7hGEeqU1kg= Address = 192.168.100.11/32 [Peer] PublicKey = OkcHUyWEzcMk9WjzqyXuSRAWO1mGfaaxSsqNr+pkbkk= Endpoint = 192.168.1.45:51820 AllowedIPs = 192.168.100.0/24
Endpoint — «белый» IP-адрес сервера
Теперь выведем на экран публичный ключ
# cat publickey
консоль покажет нам его:
l7OUNaVuPz5Rrb/7KHaDf+XqUMm7nFjPrSREPM6lATw=
Скопируем его в буфер.
После этого на сервере снова открываем файл конфигурации wg0.conf
# nano wg0.conf
и в конце файла допишем конфигурацию клиента (peer)
[Peer] PublicKey = l7OUNaVuPz5Rrb/7KHaDf+XqUMm7nFjPrSREPM6lATw= 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.1/24 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; 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
Проверяем конфигурации сетевых интерфейсов
# ifconfig
консоль должна показать:
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.55  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::a00:27ff:fe57:93b2  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:57:93:b2  txqueuelen 1000  (Ethernet)
        RX packets 18465  bytes 14673438 (13.9 MiB)
        RX errors 0  dropped 1933  overruns 0  frame 0
        TX packets 6481  bytes 742203 (724.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 50  bytes 10200 (9.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 50  bytes 10200 (9.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
wg-client: flags=209<UP,POINTOPOINT,RUNNING,NOARP>  mtu 1420
        inet 192.168.100.11  netmask 255.255.255.255  destination 192.168.100.11
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)
        RX packets 9  bytes 1020 (1020.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 1044 (1.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
И также — на сервере
# ifconfig
консоль покажет:
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.45  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::a00:27ff:fe0c:8998  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:0c:89:98  txqueuelen 1000  (Ethernet)
        RX packets 32574  bytes 30238230 (28.8 MiB)
        RX errors 0  dropped 1971  overruns 0  frame 0
        TX packets 16215  bytes 2167354 (2.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 10  bytes 1120 (1.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10  bytes 1120 (1.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
wg0: flags=209<UP,POINTOPOINT,RUNNING,NOARP>  mtu 1420
        inet 192.168.100.1  netmask 255.255.255.0  destination 192.168.100.1
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)
        RX packets 8  bytes 1044 (1.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9  bytes 1020 (1020.0 B)
        TX errors 10  dropped 0 overruns 0  carrier 0  collisions 0
Чтобы убедиться, что обе машины видят друг друга, пропингуем их:
на клиенте
# ping 192.168.100.1
на сервере
# ping 192.168.100.11
Запустим команду wg на сервере
# wg
Она покажет нам в консоли краткую статистику текущих подключений
И в самом конце нам понадобится включить службы в автозагрузку. Для этого выполняем такие команды:
на сервере
# ln -s /etc/init.d/wg-quick /etc/init.d/wg-quick.wg0 # rc-update add wg-quick.wg0 default
и на клиенте
# ln -s /etc/init.d/wg-quick /etc/init.d/wg-quick.wg-client # rc-update add wg-quick.wg-client default
На этом первоначальная настройка завершена.