Setting up IP Aliasing on A Linux Machine Mini-HOWTO
Harish
Pillay
h.pillay@ieee.org
この文書は、Linux マシン上での IP エイリアスの設定方法と利用方法を
簡単に述べたものです。マシンをセットアップして、エイリアス設定した IP
アドレス上でメールを受信する方法についても説明しています。
2001-01-23
1.2
2001-01-26
JEY
1.1
2001-01-24
JEY
1.0
1997-01-13
HP
Joy
Yokley
Converted document from HTML to DocBook v4.1 (SGML)
JF Project
日本語訳
JF@linux.or.jp
著者の設定
IP エイリアスは、kernel 2.0.x および 2.2.x では標準で有効になっています。
2.4.x ではコンパイル時のオプションを使って有効にしてください (
kernel 2.4.x では IP エイリアスは重要視されておらず、よりパワフルな
ファイアーウォール機能に置き換わっています)。
著者は、IP エイリアス機能をローダブルモジュールとしてコンパイルしました。
読者のなかには、カーネルの再構築の際の "make config" の途中で、IP Masq
の方をモジュールとしてコンパイルするよう指定してしまっている人がいるかも
しれません。モジュールに関する事柄は、(もし閲覧可能なら)
Module HOWTO をチェックするか、
/usr/src/linux/Documentation/modules.txt に記載された情報を
チェックしてください。
著者は、すでに割り当てを受けていた IP に加えて、さらに 2 つの IP アドレスを
使えるようにしました。
著者は、D-Link DE620 ポケットアダプタを使っています
(アダプタの種類は重要ではありません。Linux でサポートされているネットワーク
アダプタなら何でもかまいません)。
設定コマンド
IP エイリアスのモジュールをロードします (カーネルにモジュールを組み込んで
いる場合、この手順は不要です)。
/sbin/insmod /lib/modules/`uname -r`/ipv4/ip_alias.o
ループバックデバイスと eth0 を設定し、eth0 インターフェイスに対してメイン IP
アドレスから順番にすべての IP アドレスを設定します。
/sbin/ifconfig lo 127.0.0.1
/sbin/ifconfig eth0 up
/sbin/ifconfig eth0 172.16.3.1
/sbin/ifconfig eth0:0 172.16.3.10
/sbin/ifconfig eth0:1 172.16.3.100
172.16.3.1 というのが、メインとなる IP アドレスであり、.10 と .100 とが
エイリアスです。重要なのは、eth0:x (x=0,1,2,...n) という部分にそれぞれ
違う IP アドレスを設定しているということです。メイン IP アドレスは、エイリアス
にする必要はありません。
ルートの設定をします。まず最初に、loopback です。次に、ret、そして最後に、
それぞれの IP アドレスをデフォルト (もともと割り当てられていた IP のこと)
から順に設定します。
/sbin/route add -net 127.0.0.0
/sbin/route add -net 172.16.3.0 dev eth0
/sbin/route add -host 172.16.3.1 dev eth0
/sbin/route add -host 172.16.3.10 dev eth0:0
/sbin/route add -host 172.16.3.100 dev eth0:1
/sbin/route add default gw 172.16.3.200
これで、終了です。
上記例題の IP アドレスには、説明の便宜上、プライベート IP アドレス (RFC 1918)
を使っています。実際には、読者自身の正式な IP アドレスか、もしくは自分用の
IP アドレスに置き換えてください。
例題では、3 つの IP アドレスしか設定していませんが、最大で 256 の IP アドレス
まで設定できます。この最大値は、/usr/include/linux/net_alias.h
で設定できます。
とはいえ、256 の IP アドレスを一枚のネットワークカードに設定する人はいないで
しょうけど :-)!
以下に、著者の /sbin/ifconfig の出力結果を
記載します。
lo Link encap:Local Loopback
inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1
RX packets:5088 errors:0 dropped:0 overruns:0
TX packets:5088 errors:0 dropped:0 overruns:0
eth0 Link encap:10Mbps Ethernet HWaddr 00:8E:B8:83:19:20
inet addr:172.16.3.1 Bcast:172.16.3.255 Mask:255.255.255.0
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:334036 errors:0 dropped:0 overruns:0
TX packets:11605 errors:0 dropped:0 overruns:0
Interrupt:7 Base address:0x378
eth0:0 Link encap:10Mbps Ethernet HWaddr 00:8E:B8:83:19:20
inet addr:172.16.3.10 Bcast:172.16.3.255 Mask:255.255.255.0
UP BROADCAST RUNNING MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0
TX packets:0 errors:0 dropped:0 overruns:0
eth0:1 Link encap:10Mbps Ethernet HWaddr 00:8E:B8:83:19:20
inet addr:172.16.3.100 Bcast:172.16.3.255 Mask:255.255.255.0
UP BROADCAST RUNNING MTU:1500 Metric:1
RX packets:1 errors:0 dropped:0 overruns:0
TX packets:0 errors:0 dropped:0 overruns:0
また、/proc/net/aliases は、次のようなものです。
device family address
eth0:0 2 172.16.3.10
eth0:1 2 172.16.3.100
そして、/proc/net/alias_tupes が、以下です。
type name n_attach
2 ip 2
もちろん、/proc/net 以下の出力は、手動で編集したのでは
なく、ifconfig コマンドによって生成されたものです。
トラブルシューティング:質問と解答
質問:リブートしても設定が維持されるようにするには?
解答:BSD スタイルの init を使っている場合でも、
SysV スタイル (例えば、RedHat ) の init の場合も、
いずれも /etc/rc.d/rc.local に設定を記述すれば、
設定が維持されます。以下に、SysV init システム (RedHat 3.0.3 と 4.0 ) の著者の
設定を記載します。
著者の /etc/rc.d/rc.local:(関連部分だけです)
#setting up IP alias interfaces
echo "Setting 172.16.3.1, 172.16.3.10, 172.16.3.100 IP Aliases ..."
/sbin/ifconfig lo 127.0.0.1
/sbin/ifconfig eth0 up
/sbin/ifconfig eth0 172.16.3.1
/sbin/ifconfig eth0:0 172.16.3.10
/sbin/ifconfig eth0:1 172.16.3.100
#setting up the routes
echo "Setting IP routes ..."
/sbin/route add -net 127.0.0.0
/sbin/route add -net 172.16.3.0 dev eth0
/sbin/route add -host 172.16.3.1 eth0
/sbin/route add -host 172.16.3.10 eth0:0
/sbin/route add -host 172.16.3.100 eth0:1
/sbin/route add default gw 172.16.3.200
#
質問:マシンに IP エイリアスを設定し、エイリアス設定した個々の IP アドレス
上でメールを受信するにはどうすればいいですか (sendmail を使ったマシンです)?
解答:例えば、/etc/mynames.cw といったファイルを
作成します(既に作成済みなら、それを使って下さい)。ファイル名は、この名前の
通りでなくてもかまいませんし、必ずしも /etc ディレクトリに
ある必要もありません。
そのファイルの中に、エイリアス設定した IP アドレスの正式なドメイン名を
書き込みます。エイリアス設定した IP アドレスがドメイン名を持っていない
場合は、IP アドレス自体を書き込んでもかまいません。
/etc/mynames.cw は、次のようなものになると思います。
# /etc/mynames.cw - include all aliases for your machine here; # is a comment
domain.one.net
domain.two.com
domain.three.org
4.5.6.7
sendmail.cf には、ファイル・クラス・マクロ (file class
macro) を設定している部分があるので、そこに以下の内容を追加します。
##################
# local info #
##################
# file containing names of hosts for which we receive email
Fw/etc/mynames.cw
これで大丈夫なはずです。sendmail をテストモードで起動して、新しい設定が
上手く動くか確かめてください。例えば、以下のようにします。
ganymede$ /usr/lib/sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter < ruleset> < address>
> 0 me@4.5.6.7
rewrite: ruleset 0 input: me @ 4 . 5 . 6 . 7
rewrite: ruleset 98 input: me @ 4 . 5 . 6 . 7
rewrite: ruleset 98 returns: me @ 4 . 5 . 6 . 7
rewrite: ruleset 97 input: me @ 4 . 5 . 6 . 7
rewrite: ruleset 3 input: me @ 4 . 5 . 6 . 7
rewrite: ruleset 96 input: me < @ 4 . 5 . 6 . 7 >
rewrite: ruleset 96 returns: me < @ 4 . 5 . 6 . 7 . >
rewrite: ruleset 3 returns: me < @ 4 . 5 . 6 . 7 . >
rewrite: ruleset 0 input: me < @ 4 . 5 . 6 . 7 . >
rewrite: ruleset 98 input: me < @ 4 . 5 . 6 . 7 . >
rewrite: ruleset 98 returns: me < @ 4 . 5 . 6 . 7 . >
rewrite: ruleset 0 returns: $# local $: me
rewrite: ruleset 97 returns: $# local $: me
rewrite: ruleset 0 returns: $# local $: me
> 0 me@4.5.6.8
rewrite: ruleset 0 input: me @ 4 . 5 . 6 . 8
rewrite: ruleset 98 input: me @ 4 . 5 . 6 . 8
rewrite: ruleset 98 returns: me @ 4 . 5 . 6 . 8
rewrite: ruleset 97 input: me @ 4 . 5 . 6 . 8
rewrite: ruleset 3 input: me @ 4 . 5 . 6 . 8
rewrite: ruleset 96 input: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset 96 returns: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset 3 returns: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset 0 input: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset 98 input: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset 98 returns: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset 95 input: < > me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset 95 returns: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset 0 returns: $# smtp $@ 4 . 5 . 6 . 8 $: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset 97 returns: $# smtp $@ 4 . 5 . 6 . 8 $: me < @ 4 . 5 . 6 . 8 >
rewrite: ruleset 0 returns: $# smtp $@ 4 . 5 . 6 . 8 $: me < @ 4 . 5 . 6 . 8 >
>
me@4.5.6.7 をテストした際、メールはローカルマシンに配信され、
me@4.5.6.8 をテストした際は、SMTP メーラに渡されました。
これは、正しい動作です。
これで、設定はすべて終了です。
謝辞
Linux と IP エイリアス の開発に関わったすべての人々に感謝します。
そして、私の疑問を解決してくれた Juan Ciarlante には特に感謝して
います。
エース・プログラマたちに栄光あれ!
この文書についての感想や提案、ご意見は、<h.pillay@ieee.org> まで
メールでお知らせください。
よろしくお願いします。
ネットワーキングに関する詳しい情報は、
Networking-Overview-HOWTO (
日本語訳) をご覧ください。
日本語訳について
翻訳:
吉峯 幸郎
<yoshimin@ms.civilnet.com> (1997/05/24)
更新:
千旦 裕司
<ysenda@pop01.odn.ne.jp> (2001/09/15)
校正:
Seiji Kaneko
<skaneko@a2.mbn.or.jp>
誤訳・誤植・コメント等は、<JF@linux.or.jp> までお願いします。