Найти тему
AnyKey.blog

Два варианта установки Wireguard под разные задачи

Привет, Мир! Пора нам продолжить настройку наших серверов. Так сложилось что я привык разделять "каналы" обращения к своим серверам на несколько. Один из таких каналов - соединение между серверами через канал Wireguard с политикой site-to-site. В этой статье я как раз опишу как организовать такое подключение, а так же бнусом покажу очень интересный способ развертывания Wireguard. Поехали!

Первый способ - классическая установка

Для первого развёртывания я выбрал способ классической установки пакета. Ранее я развертывал Docker контейнер для данной задачи, но после пришел к выводу что использовать контейнер избыточно. Установка производится единожды и не занимает много времени. Первая команда - установка небходимого пакета:

sudo yum -y install wireguard-tools

Далее нам необходимо сгенерировать ключевую пару. Для этого переходим в каталог:

cd /etc/wireguard

Назначаем папке необходимые права:

sudo umask 077

Генерируем пару ключей сервера и клиента:

wg genkey | tee server-private.key
chmod go= server-private.key
cat server-private.key | wg pubkey | tee server-public.key

wg genkey | tee client-private.key
chmod go= client-private.key
cat client-private.key | wg pubkey | tee client-public.key

*Команда sudo chmod go= сбрасывае все разрешения, кроме пользователя root. Таким образом только пользователь root сможет получить доступ к закрытому ключу.

Далее нам необходимо создать конфигурационный файл сервера (используйте Ваш вариант редактора, в моей привычке использовать nano или mcedit):

sudo mcedit /etc/wireguard/wg0.conf

Ниже привожу пример типового конфигурационного файла:

[Interface]
PrivateKey = содержимое файла
server-private.key Address = 10.0.0.1/24
ListenPort = 51820
[Peer]
PublicKey = содержимое файла
client-public.key AllowedIPs = 10.0.0.2/32

Запускаем wireguard и ставим его в автозагрузку:

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

Проверяем состояние запущенной службы:

sudo systemctl status wg-quick@wg0

Поздравляем, сервер настроен с одним клиентом. Для добавления клиента необходимо вписать его следующим в конфигурационный файл или выполнить команду:

sudo wg set wg0 peer public allowed-ips 10.0.0.3

Для удаления клиента:

sudo wg set wg0 peer public remove

*вместо public вписываем публичный ключ клиента, который можно сгенерировать командами описанными выше.

Чтобы изменения появились в конфиге /etc/wireguard/wg0.conf, необходимо выполнить две команды:

sudo wg-quick down wg0
sudo systemctl restart wg-quick@wg0

Вроде бы все, но, если Вы настраивали сервер по написанной мной ранее инструкции, то нам необходимо настроить файрволл:

sudo firewall-cmd --permanent --add-service=wireguard
sudo firewall-cmd --reload

Создадим файл конфигурации клиента:

[Interface]
PrivateKey = содержание файла
client-private.key Address = 10.0.0.2/32

[Peer]
PublicKey = содержание файла server-public.key
AllowedIPs = 0.0.0.0/0 #сервер WireGuard будет в качестве шлюза для всего трафика.
Endpoint =
внешний IP сервера

Настройка файрвла для минимальной работоспособности wireguard на клиенте такая же как и на сервере.

Бонусом могу предложить Вам ознакомиться с одним из вариантов скриптов для запуска Wireguard по ссылке. Но в данном случае я Вам настоятельно рекомендую настроить все ручками.

Настройка site-to-site

Первоначальная задача установки Wireguard - соединение нескольких серверов в общую сеть. Так давайте внесем необходимые изменения.

На сервере и клиенте в нашем случае стоят ОС CentOS Stream 9. Производим настройку файрвола:

sudo firewall-cmd --permanent --new-zone=mywg
sudo firewall-cmd --permanent --zone=mywg --set-target=ACCEPT
sudo firewall-cmd --reload
sudo firewall-cmd --zone=mywg --add-interface=wg0
sudo firewall-cmd --runtime-to-permanent

Первой командой мы добавляем новую зону. Второй разрешаем весь трафик внутри этой зоны. Четвертой мы добавляем интерфейс Wireguard в эту зону.

В конфигурацию сервера добавляем строчки в блок [Interface] для включение переадресации:

# IP forwarding
PreUp = sysctl -w net.ipv4.ip_forward=1

Конфигурации клиента и сервера в блок [Peer] добавляем IP адреса которые необходимо пробросить за клиентом:

AllowedIPs = 10.0.0.0/24, 192.168.1.0/24, 192.168.2.0/24

10.0.0.0/24 - сеть wireguard.

192.168.1.0/24, 192.168.2.0/24 - сети за клиентом. Для каждого клиента настраеваем отдельно эти параметры.

Перезапускаем на клиенте и сервере службу Wireguard:

sudo systemctl restart wg-quick@wg0

На этом наша настройка завершена.

Wireguard с доступами, WEB интерфейсом и прочие прелести.

Я относительно недавно познакомился с таким прекрасным методом развертывания VPN Wireguard на собственном сервере как FireZone.

Чем же хорош этот метод? Во первых все разворачивается в Docker, во вторых - Вы можете дать доступ, к примеру, другу, а он может наклепать сколько хочет себе конфигураций под разные девайсы, в третьих - все настраивается через WEB интерфейс, что лучше при создании большого количества конфигураций, тем более к интерфейсу можно ограничить доступ двухфакторной аутентификацией. Заинтересовались? Тогда поехали!

Устанавливаем зависимости необходимые для Docker:

sudo dnf install -y yum-utils device-mapper-persistent-data lvm2

Устанавливаем репозиторий:

sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Устанавливаем Docker:

sudo dnf install -y docker-ce --nobest

Запускаем:

sudo systemctl enable --now docker

Можно добавить права пользователю для удобства:

sudo usermod -aG docker user

На этом установка Docker завершена, можно проверить ее командой:

sudo systemctl status docker
sudo docker --version

Но для продолжения нам еще необходим compose, он устанавливается двумя командами:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Проверяем установку:

docker-compose --version

Так же нам необходимо открыть порты для развертывания:

80/tcp: для автоатического запроса сертификата
443/tcp: для доступа к WEB интерфейсу
51820/udp: сам порт wireguard

Делаем это командами описанными в предыдущей статье:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=wireguard

Или:

sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --permanent --add-port=51820/udp

Теперь перейдем к установке Firezone. Создадим папку для нашего контейнера:

sudo mkdir -p /app/vpn/firezone/
cd /app/vpn/firezone/

А теперь просто запустим скрипт установки:

sudo bash <(curl -fsSL https://github.com/firezone/firezone/raw/legacy/scripts/install.sh)

Если Вы согласно инструкции выше создавали внутреннюю сеть для связи с серверами на основе wireguard, тогда выполните ручную установку Firezone и поменяйте порт wireguard создав docker-compose.yml файл и поправив его :

sudo curl -fsSL https://raw.githubusercontent.com/firezone/firezone/legacy/docker-compose.prod.yml -o docker-compose.yml

И запустив командой:

sudo docker compose up -d

На этом данную статью я буду завершать, а ознакомление с этим сервисом оставлю Вам на самоизучение по документации.