Краткая инструкция по быстрой настройке 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
На этом первоначальная настройка завершена.