переадресация портов firewalld прерывает исходящий трафик на этом порту

переадресация портов firewalld прерывает исходящий трафик на этом порту

Я использую компьютер с Linux в качестве шлюза/брандмауэра между более широкой сетью и несколькими серверами.

WAN -> [ 192.x | GATEWAY (Linux) | 10.x ]  -> [ 10.0.0.100 | SERVER (Linux) ]

Эта конфигурация отлично работает как шлюз. Нижестоящие узлы могут нормально подключаться к Интернету, и я могу перенаправлять запросы на 80шлюзе на сервер 8000с помощью firewall-cmd.

firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.0.0.100:toport=8000

Однако, как только я запускаю эту команду и начинается переадресация портов, сервер ( 10.0.0.100) больше не может связаться с WANпортом on 80. Это проблема, поскольку это означает, что сервер не может получить доступ ни к какому HTTP-трафику в Интернете.

Сервер может curlлюбой интернет ресурскромеесли он находится на порту, 80пока действует это правило переадресации.

Шлюз имеет только одну физическую сетевую карту и находится в externalзоне, что позволяет осуществлять маскировку.

gateway:$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether dc:a6:32:1b:40:9e brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.0.0.1/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::dea6:32ff:fe1b:409e/64 scope link
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether dc:a6:32:1b:40:9f brd ff:ff:ff:ff:ff:ff
gateway:$ ip route
default via 192.168.0.1 dev eth0 onlink
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.1
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2

Вероятно, я упускаю какие-то фундаментальные принципы работы сетей, что мешает мне понять эту проблему.

Я предполагаю, что правило пересылки делает это таквсеТрафик порта 80 (входящий или исходящий) искажается, хотя на самом деле мне нужно, чтобы входящий трафик с 80 перенаправлялся на порт 8000 для моего сервера.

Может быть, конфигурация сети неверна? Или есть что-то в том, как я использую, firewalldчто недопустимо?

решение1

Возможно iptables, или его firewalldможно использовать в моем сценарии для переадресации портов на определенные машины в нисходящей подсети, но я не смог понять, как заставить это работать.

Это может быть неидеальным решением, но я создал на своей gatewayмашине службу systemd, которая socatперенаправляет трафик с определенного порта на определенный IP-адрес.

Это скрипт, который запускается на моем компьютере для gatewayпереадресации портов 80и 443.10.0.0.100

firewall-cmd --zone=external --add-port=80/tcp
socat TCP4-LISTEN:80,fork TCP4:10.0.0.100:80 &
firewall-cmd --zone=external --add-port=443/tcp
socat TCP4-LISTEN:443,fork TCP4:10.0.0.100:443 &
wait

Связанный контент