Вопрос или проблема
Я использую небольшой linux VPC для хостинга своего собственного wireguard VPN и недавно добавил еще один VPN для моих друзей. В данный момент у меня есть 2 интерфейса wireguard на сервере wg0 (10.0.0.0/28) и wg1 (10.0.0.16/28), и я хотел бы заблокировать любой трафик между ними. Таким образом, клиенты из wg0 не могут достучаться до чего-либо в wg1 и наоборот, при этом клиенты из каждой из VPN могут выходить в интернет.
Я отказался от попыток сделать это с помощью firewalld и попробовал ufw, и оказалось, что это так же просто, как:
ufw insert 1 deny from 10.0.0.0/28 to 10.0.0.16/28
ufw insert 1 deny from 10.0.0.16/28 to 10.0.0.0/28
insert 1 важен, чтобы убедиться, что это правило блокировки вставлено в верхнюю часть правил и оценивается с наивысшим приоритетом, иначе вы рискуете, что какое-то правило разрешения будет сопоставлено раньше.
Ответ или решение
Изоляция сетей WireGuard на одном сервере
В данной статье рассматривается необходимость изоляции двух интерфейсов WireGuard на сервере Linux — wg0
и wg1
. Существующая архитектура VPN подразумевает, что клиенты из сети 10.0.0.0/28
, связанной с интерфейсом wg0
, не должны иметь доступ к клиентам сети 10.0.0.16/28
, связанной с интерфейсом wg1
. В то же время, оба сегмента сети должны иметь возможность выходить в интернет.
Подход к проблеме
Для успешной реализации данной изоляции предлагается использовать встроенные инструменты управления брандмауэром, такие как ufw
(Uncomplicated Firewall), что значительно упрощает задачу по сравнению с более сложными альтернативами, такими как firewalld
.
-
Установка и активация UFW: Если вы еще не установили
ufw
, выполните следующие команды:sudo apt update sudo apt install ufw sudo ufw allow ssh sudo ufw enable
-
Настройка правил: Для того чтобы обеспечить необходимую изоляцию между двумя интерфейсами WireGuard, можно использовать следующие команды:
sudo ufw insert 1 deny from 10.0.0.0/28 to 10.0.0.16/28 sudo ufw insert 1 deny from 10.0.0.16/28 to 10.0.0.0/28
Здесь команда
ufw insert 1
важна, так как она вставляет правило на первую позицию в списке правил, что гарантирует его первоочередное рассмотрение. Таким образом, даже если в дальнейшем будут добавлены разрешающие правила, эти запрещающие правила останутся действительными. -
Проверка правил: После настройки правил обязательно проверьте их с помощью следующей команды:
sudo ufw status numbered
Это позволит вам убедиться, что правила находятся на своих местах и работают правильно.
-
Дополнительные настройки: Если в будущем вы решите разрешить доступ к определенным сервисам между VPN, вы можете добавить дополнительные правила, учитывая при этом порядок их определения для управления приоритетами.
Выход в интернет
Теперь, чтобы обеспечить выход в интернет для клиентов обоих интерфейсов, убедитесь, что вы настроили NAT (Network Address Translation) через iptables
. Пример базовой настройки может выглядеть таким образом:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
В этой команде eth0
– это имя вашего сетевого интерфейса, через который осуществляется выход в интернет. Убедитесь, что ваши VPN-сети настроены правильно, чтобы маршрутизация могла проходить беспрепятственно.
Заключение
Изоляция сетей WireGuard на одном сервере, как это было продемонстрировано, является довольно простым процессом при правильном использовании инструментов управления брандмауэром. Установка необходимых правил в ufw
, с учетом их приоритета, позволяет избежать не желаемого общения между клиентами разных VPN. Всегда следите за состоянием ваших правил и тестируйте функциональность после внесения изменений, чтобы гарантировать надёжную работу вашей VPN-инфраструктуры.
Такой подход не только упрощает администрирование, но и укрепляет безопасность вашей сетевой архитектуры.