Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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 を使用したマスカレードの設定

  1. テーブルを作成します。
    # nft add table nat
  2. テーブルに 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 コマンドに渡す必要があることに注意してください。
  3. 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 の設定

  1. テーブルを作成します。
    # nft add table nat
  2. テーブルに 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 コマンドに渡す必要があることに注意してください。
  3. 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 の設定

  1. テーブルを作成します。
    # nft add table nat
  2. テーブルに 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 コマンドに渡す必要があることに注意してください。
  3. 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
  4. 環境に応じて、SNAT ルールまたはマスカレードルールを追加して、ソースアドレスを変更します。
    1. ens3 インターフェイスが動的 IP アドレスを使用している場合は、マスカレードルールを追加します。
      # nft add rule nat postrouting oifname "ens3" masquerade
    2. ens3 インターフェイスが静的 IP アドレスを使用する場合は、SNAT ルールを追加します。たとえば、ens3198.51.100.1 IP アドレスを使用する場合:
      # nft add rule nat postrouting oifname "ens3" snat to 198.51.100.1

関連情報

6.3.5. nftables を使用したリダイレクトの設定

リダイレクト 機能は、チェーンフックに応じてパケットをローカルマシンにリダイレクトする宛先ネットワークアドレス変換(DNAT)の特別なケースです。
以下の手順では、ローカルホストの 22 ポートに送信される着信トラフィックおよび転送されたトラフィックを 2222 ポートにリダイレクトする方法を説明します。

手順6.12 nftables を使用したリダイレクトの設定

  1. テーブルを作成します。
    # nft add table nat
  2. テーブルに prerouting チェーンを追加します。
    # nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; }
    シェルが優先度の負の値を nft コマンドのオプションとして解釈しないように、-- オプションを nft コマンドに渡す必要があることに注意してください。
  3. 22 ポートの着信トラフィックを 2222 ポートにリダイレクトするルールを prerouting チェーンに追加します。
    # nft add rule nat prerouting tcp dport 22 redirect to 2222

関連情報