【Firewalld講座 第11回】サーバーをルーター化せよ!マスカレード(NAPT)とポートフォワーディングの完全設定

通信を「右から左へ」受け流す技術

こんにちは!「リナックス先生」です。
Firewalld講座、第11回です。

これまでは「自分のサーバーに入ってくる通信」をどうするか、という話でした。
今回は、入ってきた通信を「別の場所に飛ばす」あるいは「別の形に変えて受け取る」という、ネットワークの交通整理(ルーティング)のお話です。

この技術を使えば、Linuxサーバーを簡易的なルーターとして使ったり、セキュリティのためにポート番号を偽装したりすることができます。
インフラエンジニアとしてのレベルが一気に上がる分野ですよ!

コウ君

先生、ポートフォワーディングって、家のWi-Fiルーターの設定画面で見たことあります!
「ゲーム機のためにポートを開ける」みたいなやつですよね?
あれと同じことがLinuxでもできるんですか?

リナックス先生

その通り!実は家庭用ルーターの中身もLinuxだったりするから、やってることは全く同じなの。
Firewalldを使えば、ポート変換(8080→80)も、別サーバーへの転送(DNAT)もコマンド一発で設定できるわ。

1. 必須機能「マスカレード」とは?

ポートフォワーディングを行う前に、絶対に理解して有効化しなければならない機能があります。
それが「マスカレード(Masquerade)」です。

正式には「IPマスカレード」や「NAPT(Network Address Port Translation)」と呼ばれます。
簡単に言うと、「プライベートIPアドレスを、グローバルIPアドレス等の別のIPに変換して、通信を中継する機能」です。

  • ルーター化の必須条件: サーバーを経由して外部へ通信する場合に必要。
  • 別サーバー転送の必須条件: 入ってきた通信を別のサーバーへ転送する場合に必要。

マスカレードの状態確認

まずは現在の設定を確認しましょう。

sudo firewall-cmd --list-all

▼実行結果の一部

masquerade: no

通常、デフォルトでは no になっています。

マスカレードを有効にする

ポート転送を行うなら、まずこれを yes にします。

sudo firewall-cmd --permanent --add-masquerade
sudo firewall-cmd --reload

これで、このサーバーは「通信の中継・変換」を行う準備が整いました。

2. 【実践】ローカルポートフォワーディング

まずは簡単な例から。
「自分自身の別のポートへ転送する」設定です。

シナリオ:
Webサーバーは一般権限で動かしたいので「8080番」で待機させている。
でも、外部のユーザーには「80番(http)」でアクセスさせたい。

[ユーザー(80)] –> [Firewalld(80で受信 → 8080へ転送)] –> [Webサーバー(8080)]

設定コマンド

--add-forward-port を使います。

sudo firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080
sudo firewall-cmd --reload

構文の解説:
port=80(入り口)に来た proto=tcp の通信を、toport=8080(転送先)へ送る。

※注意:この設定をする場合、入り口である80番を --add-service=http などで開けておく必要はありません(フォワーディング設定自体が許可ルールとして機能するため)。

確認方法

sudo firewall-cmd --list-forward-ports

▼実行結果

port=80:proto=tcp:toport=8080:toaddr=

3. 【実践】別サーバーへの転送(DNAT)

次は上級編です。
「このサーバーに来た通信を、裏にある別のサーバーへ飛ばす」設定です。

シナリオ:
・フロントサーバー(このサーバー):192.168.1.10
・バックエンドサーバー(転送先):192.168.1.20

ユーザーがフロントサーバーの「80番」にアクセスしたら、自動的にバックエンドの「80番」に転送します。

設定コマンド

先ほどのコマンドに toaddr(転送先アドレス)を追加するだけです。

sudo firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.1.20
sudo firewall-cmd --reload

構文の解説:
port=80 に来た通信を、toaddr=192.168.1.20toport=80 へ転送する。

リナックス先生

ここで重要な注意点よ!
この「別サーバー転送」を行うには、Firewalldの設定だけでなく、Linuxカーネルの設定で「IPパケットの転送」を許可してあげる必要があるの。
これを忘れると、Firewalldの設定が合っていても通信は破棄されちゃうわ。

4. 【必須】カーネルパケット転送の有効化

別サーバーへの転送を行う場合、OS自体がルーターとして振る舞えるように設定変更が必要です。

現在の設定を確認

sysctl net.ipv4.ip_forward

net.ipv4.ip_forward = 0 と出たら、転送が無効(OFF)になっています。

転送を有効にする(永続設定)

設定ファイルを作成して書き込みます。

echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-ipforward.conf

設定を即時反映させます。

sudo sysctl -p /etc/sysctl.d/99-ipforward.conf

これで net.ipv4.ip_forward = 1 になれば、OSレベルでの準備も完了です。

5. 設定の削除方法

ポートフォワーディングの設定は複雑なので、削除する時も正確に指定する必要があります。
追加時の --add--remove に変えて実行します。

ローカル転送の削除

sudo firewall-cmd --permanent --remove-forward-port=port=80:proto=tcp:toport=8080

別サーバー転送の削除

sudo firewall-cmd --permanent --remove-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.1.20

忘れずにリロードしましょう。

sudo firewall-cmd --reload

6. リッチルールとの組み合わせ(応用)

第10回で学んだ「リッチルール」を使えば、さらに細かい条件で転送できます。
特定のIPアドレス(1.2.3.4)から来た時だけ、バックエンドサーバーへ転送する」といった芸当が可能です。

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="1.2.3.4" forward-port port="80" protocol="tcp" to-port="80" to-addr="192.168.1.20"'

これは、メンテナンス時に開発者のアクセスだけを検証環境(バックエンド)に飛ばす、といった用途で非常に便利です。

まとめ:ネットワークを自在に操ろう

第11回では、少し高度なネットワーク設定を学びました。

  • ポート転送を行うなら、まず --add-masquerade でマスカレードを有効にする。
  • ローカル転送(8080→80など)は --add-forward-port を使う。
  • 別サーバーへの転送(DNAT)には toaddr オプションを追加する。
  • 別サーバー転送時は、カーネル設定 net.ipv4.ip_forward = 1 が必須。

ここまで来れば、Firewalldの主要な機能はほぼマスターしたと言っていいでしょう。

次回はいよいよ最終回(第12回)。
これまでの知識を総動員して、万が一の時のための「トラブルシューティング集」と「バックアップ・復旧手順」を解説します。
「設定をいじりすぎて訳がわからなくなった!」という時のリセット方法や、nftablesとの関係性など、運用の現場で役立つ知識で締めくくります。

最後まで走り抜けましょう!

▼複雑なネットワーク構成を検証できるVPS

ポートフォワーディングやDNATの検証には、実際にサーバーを複数台用意して通信させるのが一番の近道です。複数台構成も容易なAlmaLinux 9対応のおすすめVPSはこちら。

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント