Рейтинг:0

Firewalld блокирует SSH между клиентами в локальной сети WireGuard

флаг gb

Что нужно разрешить в firewalld, чтобы клиенты WireGuard могли подключаться друг к другу через SSH?


Установка

У меня есть два клиента и сервер в сети WireGuard VPN. Все они работают под управлением Debian 11.

КЛИЕНТ А -------- СЕРВЕР -------- КЛИЕНТ Б
10.0.1.2 10.0.1.1 10.0.1.3

Что может быть сделано

  • Я могу использовать SSH с любого клиента на сервер.
  • Я могу SSH с сервера на любой клиент.

Проблема: Но когда я пытаюсь подключить SSH-клиент к клиенту, я получаю «ssh: подключиться к хосту 10.0.1.2, порт 22: нет маршрута к хосту».


Исправление проблем

  1. Путь между машинами открыт, потому что я могу пинговать...
    • клиент на сервер,
    • сервер к клиенту,
    • и клиент к клиенту.
  2. Порты доступны, потому что я могу телнет...
    • с сервера на любой клиент через порт 22.
    • с любого клиента на сервер через порт 22.

Проблема: Но когда я пытаюсь подключить клиент по telnet к клиенту, я получаю «telnet: невозможно подключиться к удаленному хосту: нет маршрута к хосту»


Что было подтверждено

  • SSH указан в сервисе firewalld: брандмауэр-cmd --список-служб возвращается ssh
  • ip-foward установлен в ядре: sysctl -а возвращается net.ipv4.ip_forward = 1
  • Проброс настроен на iptables: iptables-сохранить возвращается -A ВПЕРЕД -i wg0 -o wg0 -j ПРИНЯТЬ
  • Отключение firewalld на сервере разрешает SSH-соединение между двумя клиентами WireGuard.

Спасибо за вашу помощь и указатели.

флаг fr
Покажите нам вывод `ip route show` от клиентов.
Рейтинг:1
флаг cn

В то время как firewalld, как правило, является отличным инструментом для настройки брандмауэра на компьютере с Linux, для этого конкретного случая использования — перенаправления трафика на другие хосты — использовать его довольно сложно. Я бы предложил отключить его на вашем сервере и просто использовать iptables (или nftables) напрямую.

Однако, если вы действительно хотите использовать firewalld, попробуйте это (как root):

1. Создайте пользовательскую зону для вашего интерфейса WireGuard, которая принимает весь трафик:
брандмауэр-cmd --permanent --new-zone=mywg
firewall-cmd --permanent --zone=mywg --set-target=ПРИНЯТЬ
брандмауэр-cmd --перезагрузить
2. Добавьте в зону «богатые» правила для отклонения входящих подключений от WireGuard к самому серверу:
firewall-cmd --zone=mywg --add-rich-rule='rule family="ipv4" priority="30001" значение протокола="tcp" reject'
firewall-cmd --zone=mywg --add-rich-rule='rule family="ipv4" priority="30002" значение протокола="udp" reject'
firewall-cmd --zone=mywg --add-rich-rule='rule family="ipv6" priority="30003" значение протокола="tcp" reject'
firewall-cmd --zone=mywg --add-rich-rule='rule family="ipv6" priority="30004" значение протокола="udp" reject'
3. Добавьте «прямые» правила, чтобы разрешить переадресацию SSH-соединений IPv4 между другими хостами WireGuard и отклонить все остальное:
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i wg0 -m state --state ESTABLISHED, RELATED -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter FORWARD 1 -i wg0 -o wg0 -m state --state NEW -p tcp --dport 22 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter FORWARD 2 -i wg0 -j REJECT
firewall-cmd --direct --add-rule ipv6 filter FORWARD 0 -i wg0 -j REJECT
4. Привяжите зону к вашему интерфейсу WireGuard и сохраните изменения:
брандмауэр-cmd --zone=mywg --add-interface=wg0
firewall-cmd --runtime-to-permanent

Вы можете добавить дополнительные прямые правила IPv4 от 0 до 2 (перенумеровав ОТКЛОНЯТЬ правило должно быть последним), если вы хотите разрешить другие типы трафика между вашими хостами WireGuard (или просто замените правила 0 и 1 одним правилом, например -i wg0 -o wg0 -J ПРИНЯТЬ если вы хотите разрешить серверу пересылать любой трафик между вашими хостами WireGuard).

См. раздел «Втулка и спица». Как использовать WireGuard с Firewalld статью для полного объяснения (узел C — это ваш сервер в этой статье).

user371793 avatar
флаг gb
Спасибо за вашу помощь @JustinLudwig

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.