サーバーには、「prerouting」と「postrouting」という2つのチェーンのみを含む「nat」という表が1つしかありません。 IP転送が有効になっています。ソースNATルールのより具体的な条件を設定しようとしています。クラシックルールを設定すると、次のようになります。
nft add rule nat postrouting ip saddr 192.168.1.0/24 oif eth0 snat 1.2.3.4
すべてが正常です。しかし、「saddr 192.168.1.0/24」ネットワークが配置されているインターフェースも指定したいと思います。
nft add rule nat postrouting **iif eth1** ip saddr 192.168.1.0/24 oif eth0 snat 1.2.3.4
このコマンドを入力すると、プログラムはそれを受け入れ、ルールが表に表示されます。しかし、交通量はありません。理由を知っている人はいますか?
答え1
この機能返品適切なネットフィルタをサポートするには、カーネル> = 5.5が必要です。で説明されているkernelnewbies.org:
Linux 5.5リリース2020年1月26日
[...]
Webフィルタ
- POSTROUTINGでiifマッチングをサポート犯罪
提出内容:
netfilter: POSTROUTINGでiifマッチをサポート
通常、NF_HOOK_COND()に入力デバイスにNULLを渡すのではなく、代わりにskbパスの入力デバイスを含むskb-> devを渡します。
iptables(legacyとnft)は、入力インターフェースに一致するルールをPOSTROUTINGチェーンに追加することを拒否しますが、nftablesはそれを許可します。
説明によると、このコミットの前にnetfilterは入力インターフェースを提供しておらず、式がiif
一致しませんでした。