Как перенаправить сетевой трафик на другой интерфейс компьютера?

Добрый день! 

У меня возникла необходимость настроить форвардинг входящего SIP/RTP трафика с основного интерфейса виртуальной машины ens192 на вручную созданный интерфейс ens100. В рамках тестирования я пытаюсь настроить форвардинг только для ICMP, но пока безуспешно. 

Вот шаги, которые я предпринял: 

1) Я создал интерфейс с помощью команды: 
<pre><code>nmcli connection add type macvlan dev ens192 ifname ens100 mode bridge ethernet.cloned-mac-address 00:50:56:95:19:67 ipv4.method manual ipv4.addresses 1.1.1.1</code></pre> 

2) Включил форвардинг, установив значение <code>net.ipv4.ip_forward = 1</code>. 

3) Добавил маскировку в зону firewall: 
<pre><code>firewall-cmd --zone=public --add-masquerade --permanent</code></pre> 

4) Включил форвардинг в зоне firewall: 
<pre><code>firewall-cmd --zone=public --add-forward --permanent</code></pre> 

5) Добавил правило для ICMP: 
<pre><code>firewall-cmd --zone=public --add-protocol=icmp --permanent</code></pre> 

6) Перезагрузил конфигурацию firewall: 
<pre><code>firewall-cmd --reload</code></pre> 

7) Просмотрел все настройки firewall: 
<pre><code>firewall-cmd --list-all</code></pre> 
Результат: 
<pre><code>public (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: ens100 ens192
  sources:
  services: cockpit dhcpv6-client ssh zabbix-agent zabbix-server
  ports: 8443/tcp
  protocols: icmp
  forward: yes
  masquerade: yes
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:</code></pre> 

8) При попытке пинга с другой машины на IP интерфейса ens192, я вижу, что ICMP пакеты приходят на интерфейс ens192, но не доходят до ens100. 

Что может быть не так в настройках? Также я пробовал создать tap и dummy интерфейсы, но результаты остались прежними.
  • 24 октября 2024 г. 10:42
Ответы на вопрос 2
Для того чтобы перенаправить сетевой трафик с одного интерфейса на другой на уровне ОС, важно правильно настроить маршрутизацию и NAT (если требуется) для вашего конкретного случая. Разберём шаги и возможные проблемы в ваших настройках.

### Настройка маршрутизации

1. **Убедитесь, что маршрутизация настроена правильно.** Для того чтобы указать, что трафик, приходящий на `ens192`, должен быть переадресован на `ens100`, нужно добавить соответствующее правило маршрутизации. Например, можно использовать `iptables` для настройки перенаправления:

   ```bash
   iptables -t nat -A PREROUTING -i ens192 -p icmp -j DNAT --to-destination 1.1.1.1
   iptables -A FORWARD -p icmp -i ens192 -o ens100 -j ACCEPT
   iptables -A FORWARD -p icmp -i ens100 -o ens192 -m state --state RELATED,ESTABLISHED -j ACCEPT
   ```

   Эти правила должны перенаправлять ICMP-пакеты, приходящие на `ens192`, к интерфейсу `ens100`.

2. **Проверьте наличие правильных IP-адресов.** Убедитесь, что интерфейс `ens100` действительно имеет IP-адрес, к которому вы хотите перенаправлять ICMP-пакеты. В вашем случае это `1.1.1.1`. Пинг на этот адрес должен возвращать ответ.

3. **Проверьте состояние интерфейсов.** Убедитесь, что оба интерфейса `ens192` и `ens100` находятся в состоянии `UP`. Это можно сделать с помощью команды:

   ```bash
   ip addr show
   ```

4. **Проверьте настройки вашего firewall-a.** Если вы используете `firewalld`, убедитесь, что правила для ICMP-пакетов действительно применяются к обоим интерфейсам. Попробуйте временно отключить firewall для проверки:

   ```bash
   systemctl stop firewalld
   ```

   После этого протестируйте пинг и проверьте, работает ли перенаправление.

### Дополнительные советы

- Если вам нужно сохранить настройки `iptables` после перезагрузки, обязательно установите их в файл по умолчанию, так как они могут сбрасываться.

- Обратите внимание, что иногда интеграция с виртуализированными сетевыми системами (например, VMware, KVM) может потребовать настройки на уровне гипервизора.

- Убедитесь, что другой хост, с которого вы выполняете пинг, имеет правильный маршрут к вашему серверу. Если он находится в другой подсети, может понадобиться настроить маршрутизацию и на этом хосте.

- Проверьте журналы системы и `iptables` на наличие каких-либо заблокированных или неуспешных пакетов:

  ```bash
  dmesg | grep -i iptables
  tail -f /var/log/messages  # или другой лог-файл, в зависимости от дистрибутива
  ```

Эти шаги и советы должны помочь вам настроить форвардинг ICMP и другие протоколы между интерфейсами. Если проблема сохраняется, предоставьте больше информации о том, какие сообщения вы видите в логах при попытке пинга.
Форвардинг происходит не "на интерфейс", а "на адрес". Если добавлено корректное правило фаерволла и разрешён форвардинг - пакет сам улетит в нужный интерфейс в соответствии с таблицей маршрутизации.
Похожие вопросы