Firewalld: Маршрутизация трафика виртуальной машины через другую виртуальную машину – проблема “Пакет отфильтрован”

Вопрос или проблема

Привет, я новичок,

Я пытаюсь направить трафик одной виртуальной машины (VM2) через другую виртуальную машину (VM1) с использованием firewalld, но у меня возникли проблемы. Когда я пытаюсь ping с VM2, я получаю Packet filtered, и я не уверен, в чем проблема.

VM1 имеет прямой доступ к интернету (enp7s0) и виртуальную сеть (enp1s0), которая соединяет обе виртуальные машины.

Я удалил пустые переменные и IPv6 (не используется) из конфигурации.

sysctl net.ipv4.ip_forward=1 установлен на обеих виртуальных машинах.

Конфигурация зоны Firewalld:

VM1

in (default, active)
  target: default
  ingress-priority: 0
  egress-priority: 0
  icmp-block-inversion: no
  interfaces: enp7s0
  forward: yes
  masquerade: yes

out (active)
  target: default
  ingress-priority: 0
  egress-priority: 0
  icmp-block-inversion: no
  interfaces: enp1s0
  forward: yes
  masquerade: no

VM2

in (default, active)
  target: default
  ingress-priority: 0
  egress-priority: 0
  icmp-block-inversion: no
  interfaces: enp1s0
  forward: yes
  masquerade: no

Конфигурация сети:

VM1

Адреса

enp1s0 <BROADCAST,MULTICAST,UP,LOWER-UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  inet 192.168.101.2/24 brd 192.168.101.255 scope global noprefixroute enp1s0
    valid_lft forever preferred_lft forever
enp7s0 <BROADCAST,MULTICAST,UP,LOWER-UP> mtu 1500 qdisc mq state UP group default qlen 1000
  inet 192.168.0.100/24 brd 192.168.0.255 scope global dynamic noprefixroute enp7s0
    valid_lft 6820sec preferred_lft 6820sec

Маршруты

default via 192.168.0.1 dev enp7s0 proto dhcp src 192.168.0.100 metric 101
192.168.0.0/24 dev enp7s0 proto kernel scope link src 192.168.0.100 metric 101
192.168.101.0/24 dev enp1s0 proto kernel scope link src 192.168.101.2 metric 100

VM2

Адреса

enp1s0 <BROADCAST,MULTICAST,UP,LOWER-UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  inet 192.168.101.3/24 brd 192.168.101.255 scope global noprefixroute enp1s0
    valid_lft forever preferred_lft forever

Маршруты

default via 192.168.101.2 dev enp1s0 proto static metric 100
192.168.101.0/24 dev enp1s0 proto kernel scope link src 192.168.101.3 metric 100

Я также пробовал добавить некоторые прямые правила, и мой direct.xml на VM1 выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<direct>
  <passthrough ipv="ipv4">-t nat -A POSTROUTING -o enp7s0 -j MASQUERADE</passthrough>
  <passthrough ipv="ipv4">-A FORWARD -i enp1s0 -o enp7s0 -j ACCEPT</passthrough>
  <passthrough ipv="ipv4">-A FORWARD -i enp7s0 -o enp1s0 -m state --state ESTABLISHED,RELATED -j ACCEPT</passthrough>
</direct>

Чего мне не хватает, что вызывает Packet filtered? Заранее спасибо за любую помощь! 😊

РЕДАКТИРОВАТЬ: Я могу пинговать enp1s0 и enp7s0 с VM1, но не внешние, например, 8.8.8.8

РЕДАКТИРОВАТЬ: Я установил target=ACCEPT в Зонах, теперь работает, я просто недогадался.

Ответ или решение

Чтобы понять и решить проблему маршрутизации трафика одной виртуальной машины (VM2) через другую (VM1) с использованием firewalld, необходимо тщательно проанализировать конфигурацию, сетевые настройки и применять надлежащие практики маршрутизации и настройки фаервола. Похоже, что первоначальная проблема, возникающая при попытке выполнить ping с VM2, заключалась в состоянии "Packet filtered", что указывает на проблемы настройки фаервола или маршрутизации.

Теория

Использование firewalld в данном сценарии включает в себя правильную настройку зон и правил, чтобы обеспечить корректную передачу пакетов через межсетевые интерфейсы виртуальных машин. Важные аспекты настройки включают:

  • Перенаправление IP-пакетов: Для достижения цели маршрутизации необходимо, чтобы функция перенаправления IP-пакетов была включена, как это сделано с настройкой sysctl net.ipv4.ip_forward=1.
  • Настройка NAT: Для того чтобы пакеты могли покидать локальную сеть и взаимодействовать с интернетом, они должны проходить через процесс трансляции сетевых адресов (NAT). Это достигается с помощью MASQUERADE в таблице POSTROUTING nat.
  • Межсетевой экран (фильтрация пакетов): Файрволд может блокировать пакеты на основании настроек зон. Правильные правила должны быть установлены для разрешения входящего и исходящего трафика через требования forwarding и masquerading.

Пример

Рассмотрим вашу специфическую конфигурацию:

VM1 (в виде маршрутизатора)

  • Интерфейсы:

    • enp7s0: Подключен к Интернету / внешней сети.
    • enp1s0: Виртуальная сеть соединяющая VMs.
  • Настройки маршрутизации (fw):

    <passthrough ipv="ipv4">-t nat -A POSTROUTING -o enp7s0 -j MASQUERADE</passthrough>
    <passthrough ipv="ipv4">-A FORWARD -i enp1s0 -o enp7s0 -j ACCEPT</passthrough>
    <passthrough ipv="ipv4">-A FORWARD -i enp7s0 -o enp1s0 -m state --state ESTABLISHED,RELATED -j ACCEPT</passthrough>

VM2

  • Интерфейс:

    • enp1s0: Соединяет VM с использованием VM1 в качестве шлюза.
  • Настройки маршрута:

    • default via 192.168.101.2 dev enp1s0 proto static metric 100

Применение

Первоначальная проблема, с которой вы столкнулись с "Packet filtered", была связана со стандартными целями (targets) зон в firewalld, которые занимали значение default. Это значение могло блокировать или фильтровать пакеты, не отвечающие стандартным критериям фильтрации.

Как выяснилось, установка target=ACCEPT для зон в firewalld решает проблему:

  • Конфигурация зон:
    • Зона, связанная с enp7s0 интерфейсом на VM1, должна иметь masquerade включённым, чтобы поддерживать работу NAT.
    • Forwarding трафика между enp1s0 и enp7s0 требует, чтобы пакеты из внутренней сети могли свободно проходить в сеть через VM1.

Практические шаги:

  1. Подтверждение forwarding пакетов: На обеих VMs, убедитесь, что net.ipv4.ip_forward=1, что позволяет транзитное прохождение пакетов.

  2. Настройка masquerading: Проверьте наличие записи MASQUERADE в конфигурации firewalld или IPTables на VM1.

  3. Проверка целей Zone: Убедитесь, что используемые firewalld зоны настроены с учетом правильных целей. Зона, используемая на интерфейсе, подключенном к интернету (VM1 enp7s0), должна иметь masquerade активированным.

  4. Диагностика: Если проблема все еще сохраняется, используйте инструменты вроде tcpdump или wireshark для отслеживания трафика и понимания, какой этап приводит к фильтрации пакетов.

Резюмируя, решение таких проблем требует системного подхода и внимательной настройки сетевых интерфейсов и правил фаервола, чтобы обеспечить сквозную маршрутизацию и поддержку NAT. Комбинация правильной настройки firewalld, masquerading и forwarding является ключевой для успешной маршрутизации через виртуальные машины.

Оцените материал
Добавить комментарий

Капча загружается...