通信を「右から左へ」受け流す技術
こんにちは!「リナックス先生」です。
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.20 の toport=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はこちら。


コメント