設定ファイルinterfacesについて
/etc/network/interfacesの記述方法には,いろいろと(とくにモバイルマシンで)便利なものがある.
私はノートパソコンで,/etc/network/interfacesを環境ごとにいろんなファイル名で作成して,そのときの環境に合わせてinterfacesにmvしてネットワーク設定をしていた.これら複数のinterfacesのコピーに記述されたレコードを一つのinterfacesにまとめて,環境毎にレコードを選択できるとうれしい.各レコードを論理名で定義して,スクリプトの出力に応じて物理インタフェースとマッピングすることができる.まず,interfacesを
mapping eth0 script /etc/network/script map HOME eth0-0 map WORK eth0-1 iface eth0-0 inet static address 192.168.1.2 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 iface eth0-1 inet static address 192.168.2.2 netmask 255.255.255.0 network 192.168.2.0 broadcast 192.168.2.255 gateway 192.168.2.1などとする.すると/etc/network/scriptの標準出力に応じてeth0がeth0-0やeth0-1として設定される.例えば/etc/network/scriptを
#!/bin/sh echo "eth0-0"とするとeth0がeth0-0として設定され,
#!/bin/sh echo "eth0-1"とするとeth0がeth0-1として設定される...この例だとmapで始まる行の意味がよくわからない.scriptで指定されたスクリプトに標準入力として渡される.したがってスクリプト内でreadを行うと,map行の値が読み込まれる.以下は,map行の値を読み込むスクリプトである.
#!/bin/bash
function echoMap () {
echo $2
}
read MAP;
echoMap $MAP
これをscript行で使用すると,
map HOME eth0-0があるので,MAPに"HOME eth0-0"が設定され,echoMap関数により,eth0-0が出力される.
/etc/init.d/networking等との住わけのようなものが問題になるような気もするが,渡しはPPPOEでネットに接続するマシンで,以下のような設定にしている.
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
defaultgateway 192.168.1.1
up "/root/setfirewall"
up adsl-start
up ifconfig ppp0 mtu 1454
down adsl-stop
upは該当インタフェースがifupされた後に実行され,downはifdownされる前に実行される.上記の設定により,eth0がアップされた後にパケットフィルタリングを行うスクリプト/root/setfirewallを実行し,adsl-startを実行し,それによってupされるppp0インタフェースのmtuを設定している.さらにeth0がifdownされる前にはadsl-stopを行う.
上記のupの様に,upやdownは複数記述できるが,途中で失敗するとそれ以降は実行されない.
たとえば,上記の例でadsl-startが偽を返せば,続くifconfigは実行されない.
adsl-startは何とか接続できても偽を返すようなので,
up adsl-start || true up ifconfig ppp0 mtu 1454などと工夫する必要がある.

