ポート転送とNATにnftablesを使用する

ポート転送とNATにnftablesを使用する

私のプライベートネットワークの前のパブリックIPアドレスにOpenWRTゲートウェイ(自己構築19.07、カーネル4.14.156)があります。私はnftablesを使用しています(いいえiptables)。

パブリックアドレスに非標準ポートを公開し、それをゲートウェイの背後にあるシステムの標準ポートに転送したいと思います。私はこれをポートフォワーディングと呼んだと思います。ゲートウェイシステムはhttpをサービスしているように見えますが、実際にはゲートウェイの背後にあるプライベートアドレスにあるシステムです。

これが私のnftables設定です。この目的のために、私の「標準サービス」はポート1234にあり、ゲートウェイ:4321を介してパブリックアクセスを許可したいと思います。

#!/usr/sbin/nft -ef
# 
# nftables configuration for my gateway
#

flush ruleset

table raw {
        chain prerouting {
                type filter hook prerouting priority -300;
                tcp dport 4321 tcp dport set 1234 log prefix "raw " notrack;
        }
}

table ip filter {
        chain output {
                type filter hook output priority 100; policy accept;
                tcp dport { 1234, 4321 } log prefix "output ";
        }

        chain input {
                type filter hook input priority 0; policy accept;
                tcp dport { 1234, 4321 } log prefix "input " accept;
        }

        chain forward {
                type filter hook forward priority 0; policy accept;
                tcp dport { 1234, 4321 } log prefix "forward " accept;
        }
}

table ip nat {
        chain prerouting {
                type nat hook prerouting priority 0; policy accept;
                tcp dport { 1234, 4321 } log prefix "nat-pre " dnat 172.23.32.200;
        }

        chain postrouting {
                type nat hook postrouting priority 100; policy accept;
                tcp dport { 1234, 4321 } log prefix "nat-post ";
                oifname "eth0" masquerade;
        }
}

この設定を有効にすると、外部コンピュータがgateway:1234。ロギングは、残りのパケットを処理する「既存の接続」を介してnat-pre外部からゲートウェイIPに移動し、forward外部から内部IPに、外部から内部に移動するSYNパケットを示します。nat-post

gateway:4321ログに接続されている外部マシンはですraw。ここで、4321は1234に変更される。その後、SYNパケットが内部サーバーに転送され、応答SYNパケットが再び戻ります...何もありません!

問題は、リモートシステムが期待するものを変更するnftables設定がないことですinternal:1234。に変更されてgateway:4321も、リモートシステムはそれを予期せずダンプする可能性があります。masqueradeinternal:1234gateway:1234

この構成についてどう思いますか?

答え1

ポート番号を翻訳していません。 1234番ポートに外部接続する場合は問題ありません。ただし、4321に達すると、dnatはポート1234の代わりに内部サーバーのポート4321に転送されます。努力する

tcp dport { 1234, 4321 } log prefix "nat-pre " dnat 172.23.32.200:1234;

内部サーバーから返された応答パケットは翻訳する必要はありません。これは、最初のsynパケットで作成された接続追跡テーブルのエントリを使用して自動的に行われます。

関連情報