IPアドレスを管理する「DHCPサーバ」と通信の橋渡し「NATルータ」
2006年12月21日(木)
Red Hat Enterprise Linux 4で実現するNATルータ
インターネットやLANの世界には、グローバルIPアドレスとプライベートIPアドレスがあります。多数のグローバルIPアドレスを取得するには手間と費用がかかる傾向にあるため、通常はグローバルIPアドレスとプライベートIPアドレスをうまく組み合わせてLANを構成します。
グローバルIPアドレスはインターネットへ直接接続することが可能である反面、セキュリティを徹底的に考慮する必要があります。一方プライベートIPアドレスは、インターネットに直接接続できないLANセグメントであるため、グローバルIPアドレスを持つLANセグメントに比べると格段にセキュアであるといえます。
グローバルIPアドレスを持つLANセグメントとプライベートIPアドレスを持つLANセグメントの通信の橋渡しを行う技術の1つに「NAT(Network Address Translation)」があります。NATはLAN上を流れるパケットに含まれる内容を書き換え、グローバルIPアドレスのLANセグメントから来る通信パケットをプライベートLANセグメント用のIPアドレスに変換したり、その逆の作業を行います。
Red Hat Enterprise Linux 4ではNAT機能を標準装備しており、iptablesコマンドで設定を行うことができます。NAT機能を提供するLinuxマシンは「NATルータ」と呼ばれます。NATルータの基本的なシステム構成例を以下に示します。
ネットワークアドレスが異なるLANセグメントAとBが存在する場合、双方を接続するためのNATルータを設置します。NATルータとなるLinuxマシンは複数のNICを装備している必要があります。図1のNATルータとなるLinuxマシンは、LANセグメントAに繋がるNIC0と、LANセグメントBに繋がるNIC1を搭載しています。
例のようなシステム構成において、具体的にNATルータを構築する手順を示します。まず想定する前提条件を以下に示します。
- LANセグメントA:172.16.X.X/255.255.0.0が存在。このLANセグメントAはドメイン名:private.hp.comとする。
- LANセグメントB:16.175.X.X/255.255.252.0が存在。このLANセグメントBはドメイン名:global.hp.comとする。
- global.hp.comドメインのマシンは、NATルータを経由しないとprivate.hp.comドメインのマシンと通信できない。
- private.hp.comドメインのマシンは、NATルータを経由しないとglobal.hp.comドメインのマシンと通信できない。
- LANセグメントAとLANセグメントBを接続するためのNATルータをLinuxマシンで実現。
- NATルータとなるLinuxマシンにNICを2枚搭載(eth0、eth1)。
- ルータとなるLinuxマシンのeth0をprivate.hp.comに所属するようにIPアドレスを設定。
- NATルータとなるLinuxマシンのeth1をglobal.hp.comに所属するようにIPアドレスを設定。
NATルータの設定はiptablesで行いますが、その前にNATに必要なカーネルパラメータの変更を行います。NATでは複数のNICのパケットをフォワーディングする必要があるため、カーネルパラメータの/proc/sys/net/ipv4/ip_forwardの値を変更する必要があります。
NATルータを再起動した場合でも変更したカーネルパラメータを保持しておく必要があるので、/etc/sysctl.confファイルにカーネルパラメータnet.ipv4.ip_forward =1を記述しておきます。以下にNATルータを構築する手順を示します。
# vi /etc/sysctl.conf ← カーネルパラメータの編集
net.ipv4.ip_forward = 1 ← IPフォワーディング機能を有効化
# sysctl ?p ← カーネルパラメータの変更を有効化
# sysctl -a |grep ip_forward
net.ipv4.ip_forward = 1
次にiptablesを使ってNAT機能を実現するための設定を行います。上記システムでは、172.16.0.0/16に所属するLANセグメントのパケットを、eth1のLANで使えるパケットに変換します。
# iptables -t nat -A POSTROUTING -s 172.16.0.0/255.255.0.0 -o eth1 -j MASQUERADE
上記コマンドのiptablesのオプションの意味は以下の通りです。
-t nat | NATを実現するためのオプション |
-A | パケットの送信元情報を変更する処理を担当する場合POSTROUTINGを指定 |
-s | 送信元のネットワークを指定 |
-o | 送出されるパケットのNICインターフェース名を指定 |
-j | NATによるIPアドレスの変換を行う場合MASQUERADEを指定 |
上記設定がiptablesに登録されていることを確認します。
# iptables -L -t nat ← NAT設定の確認
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.16.0.0/16 anywhere ← 設定した項目
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
この状態ではNATルータを再起動した場合に設定が消えてしまうため、設定内容をファイルに保存しておきます。
# service iptables save ← NAT設定を保存
Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
設定情報が正しく保存されていることを確認します。設定情報は/etc/sysconfig/iptablesファイルに保存されます。
# cat /etc/sysconfig/iptables ← 設定ファイルを確認
# Generated by iptables-save v1.2.11 on Tue Apr 11 16:49:23 2006
*nat
:PREROUTING ACCEPT [53:3056]
:POSTROUTING ACCEPT [4:445]
:OUTPUT ACCEPT [4:445]
-A POSTROUTING -s 172.16.0.0/255.255.0.0 -o eth1 -j MASQUERADE
COMMIT
# Completed on Tue Apr 11 16:49:23 2006
以上の作業により、プライベートIPアドレスを持つLANセグメントに所属するマシンはグローバルIPアドレスに所属するネットワーク資源にアクセスすることが可能となります。
次回は
次回はNATルータ利用時のファイアウォールの設定とデータベースサーバについて解説します。
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。
全文検索エンジンによるおすすめ記事
- IPアドレスを管理する「DHCPサーバ」と通信の橋渡し「NATルータ」
- NATサーバに必要なファイアウォール設定とデータベースサーバ、メールサーバ
- NATサーバに必要なファイアウォール設定とデータベースサーバ、メールサーバ
- [実践編] Ubuntu Serverをスケールアウト型サーバーに配備する(前編)
- [実践編] MaaSとJujuによるOSS配備、Ubuntu Serverの運用・管理(前編)
- 節電のためにWake-On-Lanを使う
- OpenStack Kilo(RDO版)でのMidoNet構築手順(2)
- CentOS 7のネットワーク管理基礎(後編)
- 現代PCの基礎知識(11):現代のPCには欠かせない!ネットワーク
- OpenStack構築上の注意