Вы можете использовать Wireguard для объединения локальных сетей офисов с помощью site-to-site VPN. В этой статье мы настроим site-to-site VPN на Wireguard и настроим маршрутизацию между сетями на примере rpm-based дистрибутивов Linux (RHEL/CentOS/Oracle/Rocky Linux).
В нашей конфигурации будет два сервера:
- Главный сервер в центральном офисе (респондер);
- Сервер в удаленном офисе (инициатор). Сервер инициатор может находится за NAT и не иметь белого IP адреса.
Начнем с настройки центрального сервера-респондера.
Установите репозитории EPEL и Elrepo:
$ sudo dnf -y install epel-release elrepo-release
Проверьте, что подключены следующие драйверы:
$ sudo lsmod | grep 8021q
8021q 40960 0 garp 16384 1 8021q mrp 20480 1 8021q
Если эти строки отсутствуют в выводе, установите драйвер в ядро:
$ sudo modprobe 8021q
Теперь можно установить Wireguard:
$ sudo dnf makecache
$ sudo dnf install -y kmod-wireguard wireguard-tools
Создайте пару ключей (приватный и публичный)
$ wg genkey | sudo tee /etc/wireguard/privatekey
$ wg pubkey | sudo tee /etc/wireguard/publickey
Создайте конфигурационный файл интерфейса wg0:
$ sudo touch /etc/wireguard/wg0.conf
$ sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}
Включите маршрутизацию:
$ echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.d/99-sysctl.conf
$ echo "net.ipv4.conf.all.forwarding=1" | sudo tee -a /etc/sysctl.d/99-sysctl.conf
$ echo "net.ipv6.conf.all.forwarding=1" | sudo tee -a /etc/sysctl.d/99-sysctl.conf
$ sysctl -p
Откройте порт в firewalld (в нашем примере для Wireguard сервера мы будем использовать порт UDP/32211):
$ sudo firewall-cmd --permanent --zone=public --add-port=32211/udp
$ sudo firewall-cmd --reload
Скопируйте значения частного и публичного ключа сервера:
$ sudo cat /etc/wireguard/privatekey
responder-privatekey-thumb
$ sudo cat /etc/wireguard/publickey
responder-publickey-thumb
Настройте интерфейс wg0:
$ sudo nano /etc/wireguard/wg0.conf
[Interface] Address = 10.25.1.1/24 # Отклюите перезапись конфига клиентом SaveConfig = false ListenPort = 32211 # Закрытый ключа респондеоа PrivateKey = responder-privatekey-thumb PostUp = firewall-cmd --zone=public --add-port 32211/udp PostUp = firewall-cmd --zone=public --add-masquerade PostDown = firewall-cmd --zone=public --remove-port 32211/udp PostDown = firewall-cmd --zone=public --remove-masquerade [Peer] # Публичный ключ инициатора PublicKey = initiator-publickey-thumb AllowedIPs = 10.25.1.2/32
Запустите сервис:
$ sudo systemctl enable --now wg-quick@wg0
Проверьте, что в списке интерфейсов появится wg0 и открыт порт:
$ ip a
$ ss -nltup
Для управления wireguard используются следующие команды:
$ sudo wg-quick up wg0
$ sudo wg-quick down wg0
$ sudo wg show wg0
Теперь установите те же пакеты на сервере-инициаторе в удаленном офисе:
$ sudo dnf -y install epel-release elrepo-release
$ sudo dnf makecache
$ sudo dnf install -y kmod-wireguard wireguard-tools
Создайте пару ключей:
$ sudo cat /etc/wireguard/privatekey
initiator-privatekey-thumb
$ sudo cat /etc/wireguard/publickey
initiator-publickey-thumb
Настройте интерфейс wg0:
$ sudo nano /etc/wireguard/wg0.conf
[Interface] Address = 10.25.1.2/32 SaveConfig = true ListenPort = 32211 # Закрытый ключ инициатора PrivateKey = initiator-privatekey-thumb [Peer] # Открытый ключ основного сервера (респондера) PublicKey = responder-publickey-thumb AllowedIPs = 10.25.2.1/32 Endpoint = xx.xx.xx.xx:32211 # Если VPN инициатор находится за NAT, добавьте опцию PersistentKeepalive PersistentKeepalive = 25
Добавьте wireguard в автозапуск:
$ sudo systemctl enable --now wg-quick@wg0
Или можете поднимать и опускать VPN туннель вручную:
$ sudo wg-quick up wg0
$ sudo wg-quick down wg0
$ sudo wg show wg0