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ルータの基本的なシステム構成例を以下に示します。
基本的なNATルータのシステム構成例
図1:基本的な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アドレスを設定。

表2:NATルータ構築のための前提条件

   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を指定

表3:iptablesオプション

   上記設定が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ルータ利用時のファイアウォールの設定とデータベースサーバについて解説します。

日本ヒューレット・パッカード株式会社 プリセールス統括本部 ソリューションセンター OSS・Linux担当 シニアITスペシャリスト

兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師を担当。科学技術計算サーバーのSI経験も持つ。2005年、大手製造業向けLinuxサーバー提案で日本HP社長賞受賞。2006年、米国HPからLinux技術の伝道師に与えられる「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。日本HPプリセールスMVPを4度受賞。現在は、Linux、FreeBSD、Hadoop等のOSSを駆使したスケールアウト型サーバー基盤のプリセールスSE、技術検証、技術文書執筆を担当。日本HPのオープンソース・Linuxテクノロジーエバンジェリストとして講演活動も行っている。Red Hat Certified Engineer、Red Hat Certified Virtualization Administrator、Novell Certified Linux Professional、EXIN Cloud Computing Foundation Certificate、HP Accredited Systems Engineer Cloud Architect、Red Hat Certified System Administrator in Red Hat OpenStack、Cloudera Certified Administrator for Apache Hadoop認定技術者。HP公式ブログ執筆者。趣味はレーシングカートとビリヤード

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています