## 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 でサポートされているネットワーク アダプタなら何でもかまいません)。

## 設定コマンド

1. IP エイリアスのモジュールをロードします (カーネルにモジュールを組み込んで いる場合、この手順は不要です)。

       /sbin/insmod /lib/modules/`uname -r`/ipv4/ip_alias.o

2. ループバックデバイスと 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 アドレスは、エイリアス にする必要はありません。

3. ルートの設定をします。まず最初に、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> までお願いします。