나는 더 넓은 네트워크와 몇몇 서버 사이의 게이트웨이/방화벽으로 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 트래픽에도 도달할 수 없다는 것을 의미하기 때문에 문제가 됩니다.WAN
80
서버는 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
위해 443
my 에서 실행되는 스크립트입니다 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