Вопрос или проблема
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
-
Правило 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
-
Правила 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
Если вы видите пакеты, то перенаправление работает. Если нет, проверьте еще раз все настройки и логи системы на предмет ошибок.
Заключение
Эти шаги должны помочь вам успешно перенаправить трафик между двумя интерфейсами на одном хосте. Если у вас останутся вопросы или дополнительные проблемы, не стесняйтесь спрашивать. Применение этих настроек улучшит вашу сетевую инфраструктуру и упростит управление трафиком в вашей среде.