[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:34658] "mapping" in /etc/network/interfaces



佐野@浜松です。

ノートPCを自宅と職場や学校などに持ち運んで使うような場合、
それぞれの環境に応じてIPアドレスなどの設定を変更して使う
ことがよくあると思います。

NIC が PCMCIA 接続の場合は /etc/pcmcia/network.opts に
複数の設定を記載しておいて、scheme を定義して切り換える
という方法を使っていましたが、NIC内蔵のノートPCの場合には
/etc/network/interfaces に設定を記載することになります。

man ifup すると

       -i file, --interfaces file
              Read interface definitions from a different file.

というオプションがあるので、使用する環境に応じて複数の設定
ファイルを用意しておき、その都度ファイルを指定して切り換える
という方法も使えますが、設定ファイルの数が増えるのは個人的に
おもしろくないし、ファイルのフルパス名を毎回指定するのも面倒
かなという気がします。

そこで man interfaces すると

        mapping eth0
            script /usr/local/sbin/map-scheme
            map HOME eth0-home
            map WORK eth0-work

        iface eth0-home inet static
            address 192.168.1.1
            netmask 255.255.255.0

        iface eth0-work inet dhcp

       Stanzas beginning with the  word  "mapping"  are  used  to
       automatically  translate  a physical interface name into a
       logical interface specified  by  an  "iface"  stanza.  The
       first  line of a mapping stanza begins with the word "map-
       ping" followed by the names  of  each  physical  interface
       this  mapping  should apply to. Shell globs (* and ? wild-
       cards) may be used when specifying interfaces.  Each  map-
       ping  must  specify  a  script, which will be run when the
       mapping is applied. In addition, a mapping may specify any
       number  of  "map"  parameters  that  will be passed to the
       script.

と書いてあるので、interfaces ファイルに複数の設定を記載して
切り換えることもできそうだ、と試してみました。

上の文章には

    「mapping」で始まる節は物理インターフェイス名を
    「iface」節に指定された論理インターフェイス名へ
    自動的に変換するために利用される。
    「mapping」節の最初の行は「mapping」という単語で
    始まり、そしてその変換が適用される各物理インター
    フェイスの名前が続く。
    インターフェイスを指定する際には、シェルのワイルド
    カード(* と ?)を利用可能である。各「mapping」節には、
    その変換が適用される際に実行されるスクリプトをひとつ、
    必ず指定しなければならない。さらに、ひとつの mapping 
    節には「map」パラメータをいくつでも指定できる。
    このパラメータは上記のスクリプトに渡される。

ということが書かれているわけですが、ここで指定する
スクリプトの例とか、「map」パラメータがどのように
渡されるのか、といったことは説明されていません。

で、いろいろ試行錯誤してみたわけですが、とりあえず
現状では

====================================
#!/bin/sh
#echo $1 >>/tmp/chk/verify-chk-eth0
#cat >>/tmp/chk/verify-chk-eth0
echo $1'-'$NET
exit
====================================

という簡単なスクリプトを /usr/local/sbin/select-eth0 と
して保存しておいて、

     "NET=home ifup eth0" (eth0-home を使う場合)
     "NET=work ifup eth0" (eth0-work を使う場合)

といった感じで起動しています。

上のスクリプトでコメントアウトしてあるのが
確認用に使った部分ですが、どうやら動作としては
 ifup <interface> で指定された「物理インターフェイス名」が
スクリプトのコマンドパラメータ ($1) として渡され、
 /etc/network/interfaces の中で指定された「map」パラメータは
スクリプトへの標準入力として渡されるようです。

そして「自動的に変換」させるためには、このスクリプトから
標準出力へ「変換後の論理インターフェイス名」を送るように
する必要があるようです。

上記の「とりあえずの方法」ではなんのチェックも無しに
環境変数経由で渡された名前を使って変換後の名前として
出力していますが、標準入力として渡された map パラメータを
使えば、シェルの環境変数を経由して渡された名前が有効か
どうかを確認することも可能でしょう。

以上、/etc/network/interfaces に複数の設定を記載して
 mapping で切り換えて使う方法でした。

# 既に周知の内容だったらすみません。

--
   # わたしのおうちは浜松市、アカウミガメもやってくる
    <kgh12351@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)