ファイアウォールポート転送により、そのポートの送信トラフィックが遮断される

ファイアウォールポート転送により、そのポートの送信トラフィックが遮断される

私は 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 が 1 つだけあり、ゾーン内にあるため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使用するsystemd サービスをマシン上に作成することでした。socat

これは、gatewayポートを転送して するためにmyで実行されるスクリプトです。8044310.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

関連情報