Настраивать сервер WireGuard будем на OpenBSD 6.6.
Условимся, что VPN сеть будет
10.10.202.0/24. На стороне сервера будет задействован интерфейс tun1. К серверу будет подключаться два клиента. Один из них будет иметь доступ к локальной сети предприятия
192.168.0.0/24. Второй клиент помимо доступа к локальной сети предприятия будет выпускать весь свой IPv4 трафик через VPN.
1. В /etc/sysctl.conf включим форвардинг сетевых пакетов между интерфейсами. Необходимо для NAT. Раскомментируем строку:
net.inet.ip.forwarding=1
2. настроим файерволл PF с помощью /etc/pf.conf. Трафик на tun1 условно безопасный, его фильтровать не будем:
set skip on { lo, tun1 }
Настроим NAT:
match out on vether0 inet from !(vether0:network) to any nat-to (vether0:0)
Здесь vether0 - сетевой интерфейс, имеющий выход в локальную сеть и интернет.
3. Установим WireGuard
# pkg_add wireguard-go wireguard-tools
4. Сгенерируем ключи. Можно вручную:
# wg genkey | tee server-private.key | wg pubkey > server-public.key
# wg genkey | tee client-private.key | wg pubkey > client-public.key
А лучше написать небольшой bash-скрипт:
#!/usr/local/bin/bash
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/sbin:/usr/local/bin
keys=/etc/wireguard/keys
mkdir -p $keys
wg genkey | tee $keys/server-private.key | wg pubkey > $keys/server-public.key
for i in {1..5}
do
wg genkey | tee $keys/client${i}-private.key | wg pubkey > $keys/client${i}-public.key
done
И сохранить как wg_genkeys.sh. Одним запуском он сгенерирует ключи для сервера и 5 клиентских.
4. Настроим интерфейс tun1.
Интерфейсы tun создавались как точка-точка. Настройка по мануалу выглядит так:
up
10.10.202.1 10.10.202.2 netmask
255.255.255.0И это будет замечательно работать в случае одного клиента. Но у нас их два, потому придётся придумывать обходной манёвр:
# touch /etc/hostname.tun1
# cat /etc/hostname.tun1
inet
10.10.202.1 255.255.255.0!/sbin/route add -inet
10.10.202.0/24 10.10.202.15. Запустим tun1 и WireGuard:
# sh /etc/netstart tun1
# rcctl enable wireguard_go
# rcctl set wireguard_go flags tun1
# rcctl start wireguard_go
6. Создадим конфигурацию сервера WireGuard:
# touch /etc/wireguard/tun1.conf
# cat /etc/wireguard/tun1.conf
[Interface]
PrivateKey = <содержимое server-private.key>
ListenPort = 8081
[Peer]
PublicKey = <содержимое client1-public.key>
AllowedIPs =
10.10.202.2/32[Peer]
PublicKey = <содержимое client2-public.key>
AllowedIPs =
10.10.202.3/327. Загрузим конфигурацию WireGuard:
# wg setconf tun1 /etc/wireguard/tun1.conf
8. Сделаем так, чтобы конфигурация загружалась сама после старта системы:
# cat /etc/rc.local
if [ -x /usr/local/bin/wireguard-go ]; then
echo -n ' wireguard-go '; /usr/local/bin/wg setconf tun1 /etc/wireguard/tun1.conf
fi
9. Напишем конфигурацию первого клиента. Файл client001.conf:
[Interface]
PrivateKey = <содержимое client1-private.key>
Address =
10.10.202.2/32[Peer]
PublicKey = <содержимое server-public.key>
AllowedIPs =
192.168.0.0/24Endpoint =
vpn.myserver.ru:8081PersistentKeepalive = 25
10. Напишем конфигурацию второго клиента. Файл client002.conf:
[Interface]
PrivateKey = <содержимое client2-private.key>
Address =
10.10.202.3/32[Peer]
PublicKey = <содержимое server-public.key>
AllowedIPs =
0.0.0.0/0Endpoint =
vpn.myserver.ru:8081PersistentKeepalive = 25
11. Импортируем созданные конфигурации client001.conf и client002.conf.
Для мобильных платформ имеется возможность текст конфигурации преобразовать в QR код и отсканировать с помощью камеры. Получить QR код может программа Zint Barcode Generator.
12. Активируем туннель и проверяем его работу.