Привет, Мир! Пора нам продолжить настройку наших серверов. Так сложилось что я привык разделять "каналы" обращения к своим серверам на несколько. Один из таких каналов - соединение между серверами через канал 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
На этом данную статью я буду завершать, а ознакомление с этим сервисом оставлю Вам на самоизучение по документации.