Порт Centos firewall-cmd, перенаправляющий на диапазон портов Dest, не работает
Я пытаюсь настроить правило firewalld для пересылки 80/tcp на 8080-8081, правило было настроено правильно, но, кажется, только частично работает.
Проблема в том, что трафик всегда пересылается на 8080, а не на 8081, что-то не так?
Ниже мой env:
- создать два http-сервера на 192.168.30.30, прослушивая на 8080 и 8081
установить правило firewalld для перенаправления порта
firewall-cmd --add-forward-port='port=80:proto=tcp:toport=8080-8081' --permanent
от клиента, curl http://192.168.30.30/ (который всегда перенаправляет на порт 8080)
ниже мои настройки firewalld:
firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: ssh dhcpv6-client
ports: 80/tcp
protocols:
masquerade: yes
forward-ports: port=80:proto=tcp:toport=8080-8081:toaddr=
source-ports:
icmp-blocks:
rich rules:
sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
1 ответ
tl;dr Firewalld не указывает при использовании диапазона DNAT.
Диапазон портов передается в
iptables
/
nftables
который, в свою очередь, использует отслеживание соединений в ядре. Отслеживание соединений - это то, что на самом деле делает DNAT (прямой порт). Он выбирает порт из диапазона. По умолчанию поиск выполняется линейно. Поэтому, если отслеживание соединений в настоящее время не имеет записи для кортежа (dip, sip, dprot, sport и т. Д.), То будет использоваться. Только если все пары (
8080
, спорт) уже используются, только потом будет dport
8081
быть на рассмотрении.
Вы должны подать апстрим о проблеме с firewalld . Я думаю, используя
random
в сгенерированном правиле DNAT даст ожидаемые результаты.