私のプライベートネットワークの前のパブリック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
も、リモートシステムはそれを予期せずダンプする可能性があります。masquerade
internal:1234
gateway:1234
この構成についてどう思いますか?
答え1
ポート番号を翻訳していません。 1234番ポートに外部接続する場合は問題ありません。ただし、4321に達すると、dnatはポート1234の代わりに内部サーバーのポート4321に転送されます。努力する
tcp dport { 1234, 4321 } log prefix "nat-pre " dnat 172.23.32.200:1234;
内部サーバーから返された応答パケットは翻訳する必要はありません。これは、最初のsynパケットで作成された接続追跡テーブルのエントリを使用して自動的に行われます。