私は 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 が 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で実行されるスクリプトです。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