iproute2+tcを使って1台で複数インターネット接続
1 複数のインターネット接続
2 インタフェースとルーティングテーブル
3 ifconfigとrouteコマンド
4 Linuxカーネルのコンパイル 1
5 Linuxカーネルのコンパイル 2
6 iproute2+tcのインストール
7 ipコマンドでインタフェースの登録
8 ipコマンドでルーティング設定
9 namedをインタフェースごとに起動する
10 sendmailをインタフェースごとに起動する
これから構築しようとしているネットワークは、次のような構成になっています。
インターネット------- -------------インターネット
| |
| |
ルータA ルータB
|210.160.79.97 |210.163.168.145
| |
------ゲートウェイ----
210.160.79.98 | 210.163.168.151
|
|
LAN 192.168.1.0/255.255.255.0
(ゲートウェイは、IPマスカレード機能により、IPアドレスの変換をしている)
ゲートウェイにはインタフェースが3つあり、LAN側のほかグローバル空間Aとグローバル空間Bに接続されています。
LAN側は「192.168.1.0/255.255.255.0」が割り当てられています。ゲートウェイのLAN側インタフェースのIPアドレスは、「192.168.1.1」で、IPマスカレード機能によって、グローバルIPアドレスに変換されています。
グローバル空間Aは、「210.160.79.96/255.255.255.240」が割り当てられ、ルータAは「210.160.79.97」、ゲートウェイのインタフェースには「210.160.79.98」がそれぞれ割り当てられています。
グローバル空間Bは、「210.163.168.144/255.255.255.240」が割り当てられ、ルータAは「210.163.168.145」、ゲートウェイのインタフェースには「210.163.168.151」がそれぞれ割り当てられています。
インターネット側はしたがって、「192.168.1.0/255.255.255.0」「210.160.79.96/255.255.255.240」「210.163.168.144/255.255.255.240」の3つのアドレス空間に所属しないそのほかのIPアドレス空間(0.0.0.0/0)ということになります。
Linuxのルーティング機能は、カーネルが対応している必要がありますが、現在のディストリビューションパッケージを使ってLinuxをインストールすると、最初からルーティング機能が有効になったカーネルがインストールされるようになっています。そのため、ネットワークカードをそれぞれ装着し、それぞれのインタフェースにIPアドレスを割り当て、あとはルーティングに関する設定をするだけで、Linuxをルータとして動作させることができます。
ネットワークカードを認識させる方法は、本稿の主旨からはずれるため、くわしくは触れませんが、RedHat6.1の場合、モジュールとしてネットワークカードのドライバを読み込むようになっていて、ソースは「/usr/src/linux-2.2.12/drivers/net」ディレクトリに「pcnet32.c」のように収録されていて、モジュールをコンパイルしてインストールすると、「/lib/modules/2.2.12-32/net」ディレクトリに「pcnet32.o」としてインストールされます。
実際に組み込むにあたっては、「/etc/conf.modules」に
alias eth0 pcnet32
alias eth1 via-rhine
alias eth2 pcnet32
のように記述されています。各インタフェースにIPアドレスを割り当てているのは、「/etc/sysconfig」ディレクトリにある「network」と「/etc/sysconfig/network-scripts」ディレクトリにある「ifcfg-eth0」ほか、「ifcfg-eth1」や「ifcfg-eth2」「ifcfg-lo」などです。
# vi /etc/sysconfig/network
NETWORKING=yes
FORWARD_IPV4=yes
HOSTNAME=yellow.hyperdyne.co.jp
DOMAINNAME=hyperdyne.co.jp
GATEWAY=210.160.79.97
GATEWAYDEV=eth1
「NETWORKING=yes」は、ネットワーク機能を有効にし、「FORWARD_IPV4=yes」はIPプロトコル(現在のIPプロトコルは、次世代のIPプロトコルIP v6に対して、IP v4と呼ばれている)の転送をする/しないの設定で、ルーティング機能のオン/オフの設定、「HOSTNAME=」と「DOMAINNAME=」は、ホスト名とドメイン名の設定になっています。続く、「GATEWAY=210.160.79.97」と「GATEWAYDEV=eth1」がいわゆるデフォルトゲートウェイの設定で、デフォルトゲートウェイ(この場合、ルータA)のIPアドレスと、そのデフォルトゲートウェイにパケットを送り出すインタフェース(この場合、「eth1」で、ネットワークカードの2枚目)をここで設定しています。
「ifcfg-eth0」ほかは各インタフェースの設定で、InterFace ConFiGuration-ETHernet 0の略。設定によって異なりますがが、IPプロトコル関連ではだいたい次のような設定になります。
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
USERCTL=no
BOOTPROTO=none
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
ONBOOT=yes
「DEVICE=eth0」はインタフェースのデバイスを指定する個所で、デバイス名「eth0」をインタフェース名「eth0」として割り当てることを表わしています。「USERCTL=no」は、ユーザがこのインタフェースのオン/オフなどできるかどうかの設定で、通常はユーザには制御させません。「BOOTPROTO=none」は、BOOTPやDHCPなど起動時にIPアドレスなどを割り当ててもらう仕組みを利用するかどうかの設定で、サーバやゲートウェイなどはほとんどの場合、固定IPアドレス(決まったIPアドレスで、IPアドレスは意図したとき以外には変わらない)を割り当てるため、使いません。
「IPADDR=192.168.1.1」「NETMASK=255.255.255.0」「NETWORK=192.168.1.0」「BROADCAST=192.168.1.255」は、IPアドレス関連の設定です。このインタフェース(ここではeth0)は、IPアドレスが「192.168.1.1」、ネットマスクが「255.255.255.0」で、ネットワークアドレスが「192.168.1.0」、ブロードキャストアドレスが「192.168.1.255」ちうことになります。最後の「ONBOOT=yes」は起動時にこのインタフェースを有効にするかどうかの設定です。
「ifcfg-ethx」は、インタフェースごとに別ファイルとして用意され、それぞれ同じような設定がされています。もちろんIPアドレスなどは、インタフェースごとに設定してあります。ifcfg-eth1とifcfg-eth2は次のような設定になります。
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth0
USERCTL=no
BOOTPROTO=none
IPADDR=210.160.79.98
NETMASK=255.255.255.240
NETWORK=210.160.79.96
BROADCAST=210.160.79.111
ONBOOT=yes
# vi /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth0
USERCTL=no
BOOTPROTO=none
IPADDR=210.163.168.151
NETMASK=255.255.255.240
NETWORK=210.163.168.144
BROADCAST=210.163.168.159
ONBOOT=yes
このように設定して起動すると、各インタフェースに正しくIPアドレスが割り当てられるほか、ルーティングテーブルも自動的に構成されています。ルーティングテーブルの状態を確認したり、編集したりするには、routeコマンドを使います。
# /sbin/route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
255.255.255.255 * 255.255.255.255 UH 0 0 0 eth0
210.160.79.96 * 255.255.255.240 U 0 0 0 eth1
210.163.168.144 * 255.255.255.240 U 0 0 0 eth2
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default 210.160.79.97 0.0.0.0 UG 0 0 0 eth1
|