방화벽 포트 전달은 해당 포트의 아웃바운드 트래픽을 중단합니다.

방화벽 포트 전달은 해당 포트의 아웃바운드 트래픽을 중단합니다.

나는 더 넓은 네트워크와 몇몇 서버 사이의 게이트웨이/방화벽으로 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에 다시 연결할 수 없습니다 . 이는 서버가 인터넷의 어떤 HTTP 트래픽에도 도달할 수 없다는 것을 의미하기 때문에 문제가 됩니다.WAN80

서버는 curl모든 인터넷 리소스를 사용할 수 있습니다.제외하고80해당 전달 규칙이 적용되는 동안 포트에 있는 경우 .

게이트웨이에는 물리적 NIC가 하나만 있으며 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작동 방법을 알 수 없었습니다.

이것이 이상적이지는 않을 수도 있지만 내 해결 방법은 특정 포트의 트래픽을 특정 IP로 전달하는 데 gateway사용되는 시스템 서비스를 내 컴퓨터 에 만드는 것이었습니다 .socat

gateway이것은 포트를 전달하기 80위해 443my 에서 실행되는 스크립트입니다 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

관련 정보