Вопрос или проблема
Я пытаюсь настроить UFW, чтобы разрешить подключение от клиента, который подключен через туннель wireguard с выходом на другом компьютере в той же локальной сети.
Назовем машину, к которой я хочу получить доступ: сервер. Клиент, которому необходим доступ снаружи: клиент. Выходная точка туннеля wireguard — маршрутизатор: маршрутизатор.
У меня есть правило:
22 ALLOW IN 192.168.1.0/24 # Разрешить SSH с локальной сети (любой клиент)
Это работает, если клиент физически находится в той же локальной сети, это работает.
Затем клиент подключается снаружи локальной сети, используя туннель wireguard, заканчивающийся на маршрутизаторе. Клиент может получить доступ к любым другим локальным машинам на любом порту без проблем.
Клиент получает другой IP-адрес из туннеля wireguard: 10.10.0.2, поэтому я добавил это правило:
22 ALLOW IN 10.10.0.2 # Разрешить клиенту SSH через туннель Wireguard
Но это не работает.
Я также пробовал 10.10.0.2/32 или 10.10.0.0/24 и даже разрешать в ANYWHERE (так как порт 22 все равно не открыт для внешнего доступа), но ничего не работает.
Что я упускаю? Это проблема с правилами? Или это не связано с UFW?
Ответ или решение
Блокировка локального IP с помощью UFW при подключении через туннель WireGuard
Настройка файрвола для доступа к серверу по SSH через туннель WireGuard может быть непростой задачей, особенно когда нужно учесть различные сети и IP адреса. В этом ответе мы разберем, как правильно настроить UFW (Uncomplicated Firewall) в условиях описанной вами проблемы.
Описание проблемы
У вас есть сервер, к которому вы хотите получить доступ через SSH, используя клиент, подключенный к WireGuard туннелю. Клиент получает IP-адрес в диапазоне 10.10.0.0/24
, а сервер имеет локальный адрес в сети 192.168.1.0/24
. Вы правильно настроили правила для доступа к серверу с локальных машин, но когда клиент подключается через WireGuard, доступ не осуществляется.
Теоретические основы
-
Сетевые маршруты: Когда клиент подключается через WireGuard, его трафик маршрутизируется через
router
, а затем на сервер. Следовательно, сервер видел бы трафик от IP-адреса клиента (например,10.10.0.2
), а не его локальный адрес в сети192.168.1.0/24
. -
Правила UFW: Чтобы UFW пропускал трафик от WireGuard, необходимо явно разрешить входящие соединения от IP-адреса клиента.
Настройка UFW
Вот несколько шагов, которые помогут вам точно настроить UFW для разрешения SSH-доступа с клиентского IP-адреса.
-
Добавление правила для клиента:
Убедитесь, что правило, позволяющее доступ клиенту через WireGuard, выглядит правильно:sudo ufw allow from 10.10.0.2 to any port 22
Если вы хотите разрешить доступ для всего диапазона клиентских IP address:
sudo ufw allow from 10.10.0.0/24 to any port 22
-
Проверка правил:
После добавления правил обязательно проверьте их с помощью команды:sudo ufw status verbose
Убедитесь, что ваше новое правило отображается в выводе.
-
Требования к WireGuard:
Убедитесь, что конфигурация серверной части WireGuard позволяет маршрутизировать пакеты от клиента к серверу. Проверьте настройкиAllowedIPs
на клиенте и убедитесь, что10.10.0.2
может маршрутизироваться к локальной сети. -
Тестирование подключения:
Попробуйте выполнить SSH-вход на сервер из туннеля WireGuard с клиента:ssh user@192.168.1.x
Замените
user
на имя пользователя и192.168.1.x
на IP-адрес вашего сервера. -
Логи UFW:
Если доступ по-прежнему невозможен, просмотрите логи UFW для диагностики. Включите ведение журналов с помощью:sudo ufw logging on
После этого проверьте логи в
/var/log/ufw.log
. Это поможет выявить, блокируется ли трафик на уровне UFW.
Заключение
Настройка UFW для работы с WireGuard требует чёткого понимания маршрутизации трафика и правильных правил для файервола. Следуйте этим шагам и консультируйтесь с журналами UFW для выявления возможных проблем. Если после выполнения всех шагов проблема сохраняется, возможно, потребуется более тщательное изучение маршрутизации и политики безопасности на уровне вашего маршрутизатора или сервера.