8.3. nftables を使用した NAT の設定
nftables を使用すると、以下のネットワークアドレス変換 (NAT) タイプを設定できます。
- マスカレーディング
- ソース NAT (SNAT)
- 宛先 NAT (DNAT)
- リダイレクト
iifname パラメーターおよび oifname パラメーターでは実インターフェイス名のみを使用でき、代替名 (altname) には対応していません。
8.3.1. NAT タイプ リンクのコピーリンクがクリップボードにコピーされました!
以下は、ネットワークアドレス変換 (NAT) タイプになります。
- マスカレードおよびソースの NAT (SNAT)
この NAT タイプのいずれかを使用して、パケットのソース IP アドレスを変更します。たとえば、インターネットサービスプロバイダー (ISP) は、プライベート IP 範囲 (
10.0.0.0/8など) をルーティングしません。ネットワークでプライベート IP 範囲を使用し、ユーザーがインターネット上のサーバーにアクセスできるようにする必要がある場合は、この範囲のパケットのソース IP アドレスをパブリック IP アドレスにマップします。マスカレードと SNAT は互いに非常に似ています。相違点は次のとおりです。
- マスカレードは、出力インターフェイスの IP アドレスを自動的に使用します。したがって、出力インターフェイスが動的 IP アドレスを使用する場合は、マスカレードを使用します。
- SNAT は、パケットのソース IP アドレスを指定された IP に設定し、出力インターフェイスの IP アドレスを動的に検索しません。そのため、SNAT の方がマスカレードよりも高速です。出力インターフェイスが固定 IP アドレスを使用する場合は、SNAT を使用します。
- 宛先 NAT (DNAT)
- この NAT タイプを使用して、着信パケットの宛先アドレスとポートを書き換えます。たとえば、Web サーバーがプライベート IP 範囲の IP アドレスを使用しているため、インターネットから直接アクセスできない場合は、ルーターに DNAT ルールを設定し、着信トラフィックをこのサーバーにリダイレクトできます。
- リダイレクト
- このタイプは、チェーンフックに応じてパケットをローカルマシンにリダイレクトする DNAT の特殊なケースです。たとえば、サービスが標準ポートとは異なるポートで実行する場合は、標準ポートからこの特定のポートに着信トラフィックをリダイレクトすることができます。
8.3.2. nftables を使用したマスカレードの設定 リンクのコピーリンクがクリップボードにコピーされました!
マスカレードを使用すると、ルーターは、インターフェイスを介して送信されるパケットのソース IP を、インターフェイスの IP アドレスに動的に変更できます。これは、インターフェイスに新しい IP が割り当てられている場合に、nftables はソース IP の置き換え時に新しい IP を自動的に使用することを意味します。
ens3 インターフェイスを介してホストから出るパケットの送信元 IP を、ens3 で設定された IP に置き換えます。
手順
テーブルを作成します。
nft add table nat
# nft add table natCopy to Clipboard Copied! Toggle word wrap Toggle overflow テーブルに、
preroutingチェーンおよびpostroutingチェーンを追加します。nft add chain nat postrouting { type nat hook postrouting priority 100 \; }# nft add chain nat postrouting { type nat hook postrouting priority 100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要preroutingチェーンにルールを追加しなくても、nftablesフレームワークでは、着信パケット返信に一致するようにこのチェーンが必要になります。--オプションをnftコマンドに渡して、シェルが負の priority 値をnftコマンドのオプションとして解釈しないようにする必要があることに注意してください。postroutingチェーンに、ens3インターフェイスの出力パケットに一致するルールを追加します。nft add rule nat postrouting oifname "ens3" masquerade
# nft add rule nat postrouting oifname "ens3" masqueradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3.3. nftables を使用したソース NAT の設定 リンクのコピーリンクがクリップボードにコピーされました!
ルーターでは、ソース NAT (SNAT) を使用して、インターフェイスを介して特定の IP アドレスに送信するパケットの IP を変更できます。次に、ルーターは送信パケットのソース IP を置き換えます。
手順
テーブルを作成します。
nft add table nat
# nft add table natCopy to Clipboard Copied! Toggle word wrap Toggle overflow テーブルに、
preroutingチェーンおよびpostroutingチェーンを追加します。nft add chain nat postrouting { type nat hook postrouting priority 100 \; }# nft add chain nat postrouting { type nat hook postrouting priority 100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要postroutingチェーンにルールを追加しなくても、nftablesフレームワークでは、このチェーンが発信パケット返信に一致するようにする必要があります。--オプションをnftコマンドに渡して、シェルが負の priority 値をnftコマンドのオプションとして解釈しないようにする必要があることに注意してください。ens3を介した発信パケットのソース IP を192.0.2.1に置き換えるルールをpostroutingチェーンに追加します。nft add rule nat postrouting oifname "ens3" snat to 192.0.2.1
# nft add rule nat postrouting oifname "ens3" snat to 192.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3.4. nftables を使用した宛先 NAT の設定 リンクのコピーリンクがクリップボードにコピーされました!
宛先 NAT (DNAT) を使用すると、ルーター上のトラフィックを、インターネットから直接アクセスできないホストにリダイレクトできます。
たとえば、DNAT を使用すると、ルーターはポート 80 および 443 に送信された受信トラフィックを、IP アドレス 192.0.2.1 の Web サーバーにリダイレクトします。
手順
テーブルを作成します。
nft add table nat
# nft add table natCopy to Clipboard Copied! Toggle word wrap Toggle overflow テーブルに、
preroutingチェーンおよびpostroutingチェーンを追加します。nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } nft add chain nat postrouting { type nat hook postrouting priority 100 \; }# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain nat postrouting { type nat hook postrouting priority 100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要postroutingチェーンにルールを追加しなくても、nftablesフレームワークでは、このチェーンが発信パケット返信に一致するようにする必要があります。--オプションをnftコマンドに渡して、シェルが負の priority 値をnftコマンドのオプションとして解釈しないようにする必要があることに注意してください。preroutingチェーンに、ルーターのens3インターフェイスのポート80および443への受信トラフィックを、IP アドレス192.0.2.1の Web サーバーにリダイレクトするルールを追加します。nft add rule nat prerouting iifname ens3 tcp dport { 80, 443 } dnat to 192.0.2.1# nft add rule nat prerouting iifname ens3 tcp dport { 80, 443 } dnat to 192.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 環境に応じて、SNAT ルールまたはマスカレードルールを追加して、Web サーバーから返されるパケットのソースアドレスを送信者に変更します。
ens3インターフェイスが動的 IP アドレスを使用している場合は、マスカレードルールを追加します。nft add rule nat postrouting oifname "ens3" masquerade
# nft add rule nat postrouting oifname "ens3" masqueradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow ens3インターフェイスが静的 IP アドレスを使用する場合は、SNAT ルールを追加します。たとえば、ens3が IP アドレス198.51.100.1を使用している場合は、以下のようになります。nft add rule nat postrouting oifname "ens3" snat to 198.51.100.1
# nft add rule nat postrouting oifname "ens3" snat to 198.51.100.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
パケット転送を有効にします。
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3.5. nftables を使用したリダイレクトの設定 リンクのコピーリンクがクリップボードにコピーされました!
redirect 機能は、チェーンフックに応じてパケットをローカルマシンにリダイレクトする宛先ネットワークアドレス変換 (DNAT) の特殊なケースです。
たとえば、ローカルホストのポート 22 に送信された着信および転送されたトラフィックを 2222 ポートにリダイレクトすることができます。
手順
テーブルを作成します。
nft add table nat
# nft add table natCopy to Clipboard Copied! Toggle word wrap Toggle overflow テーブルに
preroutingチェーンを追加します。nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; }# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow --オプションをnftコマンドに渡して、シェルが負の priority 値をnftコマンドのオプションとして解釈しないようにする必要があることに注意してください。22ポートの着信トラフィックを2222ポートにリダイレクトするルールをpreroutingチェーンに追加します。nft add rule nat prerouting tcp dport 22 redirect to 2222
# nft add rule nat prerouting tcp dport 22 redirect to 2222Copy to Clipboard Copied! Toggle word wrap Toggle overflow