Firewalld による NAPT(IPマスカレード)
NAPT(IPマスカレード)とは...
NAPT(IPマスカレード)とはとは、1つのグローバルIPアドレスをLAN内の複数の機器で共有してインターネットに接続できるようにする機能です。
NAPT(Network Address Port Translation)と IPマスカレード は同じものを指します。
(NAPTは一般的な技術名で、IPマスカレードはLinuxでの機能名です。)
ちなみにマスカレード(Masquerading)は「仮装」「変装」という意味で、プライベートIPがグローバルIPに成りすますような感じに見えるためそう呼ばれています。
目的
プライベートネットワークにあるサーバ(インターネット側への疎通がない)から、NAPT設定を入れたサーバを経由してインターネット側へアクセスできるようにする。
実施環境
サーバOS
Fedora Server 40
※ Firewalldが使用できればなんでもよかったのですが、とりあえずRedHat系であるFedoraをチョイス。デフォルトでFirewalld
がインストールされており、すぐに使用できます。
構成
今回はProxy Server
とApplication Server
の二つのサーバを用意します。
-
Proxy Server
: インターネットと疎通可能なeth3と、内部ネットワークと疎通可能なeth2が接続されています -
Application Server
: 内部ネットワークと疎通可能なeth1が接続されています
実装
Proxy Serverをルーターと見立てて、firewalldを利用したNAPT設定を行います。
またApplication Serverでは、デフォルトゲートウェイにProxy Serverを指定することで通信時に経由するようになります。
◆ Proxy Server 側の設定
1. iptables の無効化
firewalld
による設定の前に、iptables
とのルールの競合を避けるため無効化します。
$ systemctl disable --now iptables
2. ゾーンの確認
外部ネットワーク側に繋がるインターフェース(et3)がpublic
になっていることを確認します。
$ firewall-cmd --get-active-zone
public
interfaces: eth2
public
interfaces: eth3
3. ゾーンの変更
内部ネットワーク側に繋がるインターフェース(eth2)と外部に繋がるインターフェース(eth3)をexternalに変更します。
$ firewall-cmd --change-interface=eth2 --zone=external --permanent
$ firewall-cmd --change-interface=eth3 --zone=external --permanent
正しく変更されたか確認します。
$ firewall-cmd --get-active-zone
external
interfaces: eth2 eth3
4. ゾーンの設定
externalはデフォルトでNAPTを許可しています。
下記のようにmasquerade: yes
となっていればOKです。
$ firewall-cmd --list-all --zone=external
external (active)
target: default
ingress-priority: 0
egress-priority: 0
icmp-block-inversion: no
interfaces: ens160 ens224
sources:
services: ssh
ports:
protocols:
forward: yes
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
※masquerade: no
となっていたらexternal ゾーンに NAPTの設定をします。
# external ゾーンにIPマスカレードを設定
$ firewall-cmd --permanent --zone=external --add-masquerade
5. 外部ネットワークインターフェース側の設定
外部ネットワークに繋がるインターフェース(eth3)に NAPTの適用を行います。
$ firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o eth3 -j MASQUERADE
6. インターフェース間の設定
2つのインターフェース間のパケット転送を許可します。
一つ目が行きパケットの許可で、二つ目が戻りパケットの許可設定となります。
$ firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth2 -o eth3 -j ACCEPT
$ firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth3 -o eth2 -m state --state RELATED,ESTABLISHED -j ACCEPT
7. 再起動、確認
Firewalld
を再起動し設定を反映させます。
$ firewall-cmd --reload
success
# 確認
$ firewall-cmd --zone=internal --query-masquerade
yes
$ firewall-cmd --direct --get-all-rules
ipv4 nat POSTROUTING 0 -o eth3 -j MASQUERADE
ipv4 filter FORWARD 0 -i eth2 -o eth3 -j ACCEPT
ipv4 filter FORWARD 0 -i eth3 -o eth2 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 1 -> IP Forward有効, 0 -> IP Forward無効
$ cat /proc/sys/net/ipv4/ip_forward
1
◆ Application Server 側の設定
1. デフォルトゲートウェイ・DNSの設定
eth1のをデフォルトゲートウェイを、Proxy Server
の192.168.100.10
として設定します。
また、DNSを8.8.8.8
等に設定します(DNSサーバがある場合はそちらを設定)。
$ nmtui
2. 疎通確認
$ ping 8.8.8.8
$ curl https://www.google.com
おわりに
Fedoraを初めて使用しましたが、よく使う機能が最適化されていて汎用的な検証をするのにとても使い勝手が良いと感じました。
Discussion