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

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

RHEL8. Мне нужно перенаправлять только sip/tcp и rtp/udp пакеты с ens192 на ens0. Но для тестирования я пытаюсь перенаправить весь трафик с ens192 на ens0. ens192 – основной интерфейс ВМ, IP – 10.10.10.3

ens0 создан с помощью команды:

nmcli connection add type macvlan ifname ens0 con-name ens0 dev ens192 mode bridge
nmcli connection modify ens0 ipv4.method manual ipv4.addresses 10.10.10.60/24
nmcli connection up ens0
#ip a
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:97:92:95 brd ff:ff:ff:ff:ff:ff
    altname enp11s0
    inet 10.10.10.3/24 brd 10.5.76.255 scope global noprefixroute ens192
       valid_lft forever preferred_lft forever
    inet 10.10.10.40/24 brd 10.5.76.255 scope global secondary ens192
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe97:9295/64 scope link
       valid_lft forever preferred_lft forever
8: ens0@ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether c2:8b:80:c5:80:9c brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.60/24 brd 10.5.76.255 scope global noprefixroute ens0
       valid_lft forever preferred_lft forever
    inet 10.10.10.40/24 brd 10.5.76.255 scope global secondary ens0
       valid_lft forever preferred_lft forever
    inet6 fe80::57ab:83c3:8a99:230d/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

10.10.10.40 – это виртуальный адрес кластера между 2 узлами.

перенаправление включено net.ipv4.ip_forward = 1

firewalld остановлен, буду использовать iptables:

iptables -t nat -A PREROUTING -j DNAT --to-destination 10.10.10.60
iptables -A FORWARD -i ens192 -o ens0 -j ACCEPT 
iptables -A FORWARD -i ens0 -o ens192 -j ACCEPT
iptables-save

Эта конфигурация не работает… tcpdump -i ens0 пуст, только ARP пакеты… помогите, что не так?

ip route
default via 10.10.10.1 dev ens192 proto static metric 100
10.10.10.0/24 dev ens192 proto kernel scope link src 10.10.10.3 metric 100
10.10.10.0/24 dev ens0 proto kernel scope link src 10.10.10.60 metric 410

Также пытался создать tap/tun интерфейсы с различными сетями. Пытался использовать firewalld… не работает

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

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

В данном ответе мы рассмотрим шаги, необходимые для успешного перенаправления трафика с интерфейса ens192 на ens0 в системе RHEL8. Поскольку ваше первоначальное решение не работает, это может быть связано с несколькими факторами, включая неправильные правила iptables, настройки интерфейсов или маршрутизацию. Давайте разберем это подробнее.

Шаг 1: Проверка конфигурации интерфейсов

У вас настроены два интерфейса: ens192 с IP-адресом 10.10.10.3 и ens0 с IP-адресом 10.10.10.60. Убедитесь, что оба интерфейса находятся в одной подсети и что они правильно настроены:

ip a

Убедитесь, что оба интерфейса имеют корректные состояния и IP адреса. Выглядит, что это у вас так, поскольку IP адреса между интерфейсами находятся в пределах одной подсети 10.10.10.0/24.

Шаг 2: Включение IP-адресации / маршрутизации

Вы упомянули, что параметр net.ipv4.ip_forward = 1 установлен. Проверьте его еще раз, чтобы убедиться в правильности:

sysctl net.ipv4.ip_forward

Если вывод не показывает 1, выполните команду:

echo "1" > /proc/sys/net/ipv4/ip_forward

Или измените файл /etc/sysctl.conf, добавив или раскомментировав строку:

net.ipv4.ip_forward = 1

Шаг 3: Конфигурация iptables

Проверим ваши правила iptables. Правила, которые вы указали, выглядят следующим образом:

iptables -t nat -A PREROUTING -j DNAT --to-destination 10.10.10.60
iptables -A FORWARD -i ens192 -o ens0 -j ACCEPT 
iptables -A FORWARD -i ens0 -o ens192 -j ACCEPT
  1. Правило DNAT: Ваша команда DNAT применяется ко всему трафику, что может не сработать должным образом. Уточните, какие пакеты вы хотите перенаправить. Например, только SIP и RTP:

    iptables -t nat -A PREROUTING -p tcp --dport 5060 -j DNAT --to-destination 10.10.10.60
    iptables -t nat -A PREROUTING -p udp --dport 10000:20000 -j DNAT --to-destination 10.10.10.60
  2. Правила FORWARD: Убедитесь, что ваше первое правило FORWARD позволяет зависимость обработки трафика от ens192 к ens0:

    iptables -A FORWARD -i ens192 -o ens0 -j ACCEPT 

    И для обратного направления:

    iptables -A FORWARD -i ens0 -o ens192 -m state --state ESTABLISHED,RELATED -j ACCEPT

    Обратите внимание на использование -m state, что позволяет возвратному трафику проходить через интерфейс.

Шаг 4: Проверка маршрутизации

Проверьте маршруты в вашей системе:

ip route

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

Шаг 5: Тестирование

После применения всех предложений перезапустите службы или перезагрузите систему, если это нужно. Затем используйте команду tcpdump для мониторинга трафика:

tcpdump -i ens0

Если вы видите пакеты, то перенаправление работает. Если нет, проверьте еще раз все настройки и логи системы на предмет ошибок.

Заключение

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

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

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