6.3. nftables を使用した NAT の設定
nftables
を使用すると、以下のネットワークアドレス変換(NAT
)タイプを設定できます。
- マスカレーディング
- ソース NAT (
SNAT
) - 宛先 NAT (
DNAT
) - リダイレクト
6.3.1. 異なる NAT タイプ: マスカレード、ソース NAT、宛先 NAT、リダイレクト
以下は、ネットワークアドレス変換(
NAT
)タイプになります。
マスカレードおよびソースの NAT (SNAT)
これらの
NAT
タイプのいずれかを使用して、パケットのソース IP アドレスを変更します。たとえば、インターネットサービスプロバイダーは、10.0.0.0/8
などのプライベート IP 範囲はルーティングしません。ネットワークでプライベート IP 範囲を使用し、ユーザーがインターネット上のサーバーにアクセスできるようにする必要がある場合は、この範囲のパケットのソース IP アドレスをパブリック IP アドレスにマップします。
マスカレードと
SNAT
の両方は非常に似ています。相違点は次のとおりです。
- マスカレードは、出力インターフェイスの IP アドレスを自動的に使用します。したがって、出力インターフェイスが動的 IP アドレスを使用する場合は、マスカレードを使用します。
SNAT
は、パケットのソース IP アドレスを指定された IP に設定し、送信インターフェイスの IP を動的に検索しません。したがって、SNAT
はマスカレードよりも高速です。送信インターフェイスが固定 IP アドレスを使用する場合はSNAT
を使用します。
宛先 NAT (DNAT)
この
NAT
タイプを使用して、着信トラフィックを別のホストにルーティングします。たとえば、Web サーバーが予約済み IP 範囲の IP アドレスを使用しているため、インターネットから直接アクセスできない場合は、ルーターに DNAT
ルールを設定し、着信トラフィックをこのサーバーにリダイレクトできます。
リダイレクト
このタイプは、チェーンフックに応じてパケットをローカルマシンにリダイレクトする DNAT の特殊なケースです。たとえば、サービスが標準ポートとは異なるポートで実行する場合は、標準ポートからこの特定のポートに着信トラフィックをリダイレクトすることができます。
6.3.2. nftables を使用したマスカレードの設定
マスカレードを使用すると、ルーターは、インターフェイスを介して送信されるパケットのソース IP を、インターフェイスの IP アドレスに動的に変更できます。つまり、インターフェイスに新しい IP が割り当てられると、
nftables
はソース IP を置き換えるときに新しい IP を自動的に使用します。
以下の手順では、
ens3
インターフェイスを介してホストから ens3
に設定された IP にホストから出るパケットのソース IP を置き換える方法を説明します。
手順6.9 nftables を使用したマスカレードの設定
- テーブルを作成します。
# nft add table nat
- テーブルに
prerouting
およびpostrouting
チェーンを追加します。# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
重要prerouting
チェーンにルールを追加しなくても、nftables
フレームワークでは、受信パケット返信に一致するようにこのチェーンが必要になります。シェルが優先度の負の値を nft コマンドのオプションとして解釈しないように、--
オプションを nft コマンドに渡す必要があることに注意してください。 ens3
インターフェイスの送信パケットに一致するルールをpostrouting
チェーンに追加します。# nft add rule nat postrouting oifname "ens3" masquerade
6.3.3. nftables を使用したソース NAT の設定
ルーターでは、ソース NAT (
SNAT
)を使用して、インターフェイスを介して特定の IP アドレスに送信するパケットの IP を変更できます。
以下の手順では、
ens3
インターフェイスを介してルーターから 192.0.2.1
に、パケットのソース IP を置き換える方法を説明します。
手順6.10 nftables を使用したソース NAT の設定
- テーブルを作成します。
# nft add table nat
- テーブルに
prerouting
およびpostrouting
チェーンを追加します。# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
重要prerouting
チェーンにルールを追加しなくても、nftables
フレームワークでは、このチェーンが発信パケット返信に一致するようにする必要があります。シェルが優先度の負の値を nft コマンドのオプションとして解釈しないように、--
オプションを nft コマンドに渡す必要があることに注意してください。 ens3
を介した送信パケットのソース IP を192.0.2.1
に置き換えるルールをpostrouting
チェーンに追加します。# nft add rule nat postrouting oifname "ens3" snat to 192.0.2.1
関連情報
- 詳細は、「特定のローカルポートで着信パケットを別のホストに転送」 を参照してください。
6.3.4. nftables を使用した宛先 NAT の設定
宛先
NAT
により、ルーター上のトラフィックをインターネットから直接アクセスできないホストにリダイレクトできます。
以下の手順では、ルーターのポート
80
および 443
に送信された受信トラフィックを、IP アドレス 192.0.2.1
を持つホストにリダイレクトする方法を説明します。
手順6.11 nftables を使用した宛先 NAT の設定
- テーブルを作成します。
# nft add table nat
- テーブルに
prerouting
およびpostrouting
チェーンを追加します。# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
重要postrouting チェーンにルールを追加しなくても、nftables
フレームワークでは、このチェーンが発信パケット返信に一致するようにする必要があります。シェルが優先度の負の値を nft コマンドのオプションとして解釈しないように、--
オプションを nft コマンドに渡す必要があることに注意してください。 - IP が 192.0.2.1 のホストにポート 80 および 443 に送信された
ens3
インターフェイスの着信トラフィックをリダイレクトするルールを prerouting チェーンに追加します。# nft add rule nat prerouting iifname ens3 tcp dport { 80, 443 } dnat to 192.0.2.1
- 環境に応じて、SNAT ルールまたはマスカレードルールを追加して、ソースアドレスを変更します。
ens3
インターフェイスが動的 IP アドレスを使用している場合は、マスカレードルールを追加します。# nft add rule nat postrouting oifname "ens3" masquerade
ens3
インターフェイスが静的 IP アドレスを使用する場合は、SNAT
ルールを追加します。たとえば、ens3
が 198.51.100.1 IP アドレスを使用する場合:# nft add rule nat postrouting oifname "ens3" snat to 198.51.100.1
関連情報
- 詳細は、「異なる NAT タイプ: マスカレード、ソース NAT、宛先 NAT、リダイレクト」 を参照してください。
6.3.5. nftables を使用したリダイレクトの設定
リダイレクト
機能は、チェーンフックに応じてパケットをローカルマシンにリダイレクトする宛先ネットワークアドレス変換(DNAT)の特別なケースです。
以下の手順では、ローカルホストの 22 ポートに送信される着信トラフィックおよび転送されたトラフィックを 2222 ポートにリダイレクトする方法を説明します。
手順6.12 nftables を使用したリダイレクトの設定
- テーブルを作成します。
# nft add table nat
- テーブルに prerouting チェーンを追加します。
# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; }
シェルが優先度の負の値を nft コマンドのオプションとして解釈しないように、--
オプションを nft コマンドに渡す必要があることに注意してください。 - 22 ポートの着信トラフィックを 2222 ポートにリダイレクトするルールを prerouting チェーンに追加します。
# nft add rule nat prerouting tcp dport 22 redirect to 2222
関連情報
- 詳細は、「異なる NAT タイプ: マスカレード、ソース NAT、宛先 NAT、リダイレクト」 を参照してください。