Rabbit Slide Show

/etc/network/interfaces について

2013-06-29

Description

大統一Debian勉強会2013での発表資料です。 resolvconf パッケージなどとの連携方法や独自に同じようなスクリプトを作成する方法について話しました。

Text

Page: 1

/etc/network/interfaces に
ついて
西山和広
大統一Debian勉強会2013
2013/06/29
Powered by Rabbit 2.0.8

Page: 2

Agenda
/etc/network/interfaces とは?
interfaces ファイルの構造
stanza の種類
実設定ファイル紹介
1/40

Page: 3

Agenda
/etc/network/interfaces とは?
interfaces ファイルの構造
stanza の種類
実設定ファイル紹介
2/40

Page: 4

/etc/network/interfaces と
は?
ネットワークの設定ファイル
Debian, Ubuntu など
/etc/network/interfaces
Fedora, CentOS など
/etc/sysconfig/network や
/etc/sysconfig/network-scripts/ifcfg-eth0
など
3/40

Page: 5

何から参照されるか?
ifupdown パッケージ
ifup (インターフェイス設定コマンド)
ifdown (設定解除コマンド)
NetworkManager
など
4/40

Page: 6

何から参照されない?
/etc/network/if-*.d/ で連携するもの
resolvconf
wireless-tools
wpasupplicant
など
5/40

Page: 7

Agenda
/etc/network/interfaces とは?
interfaces ファイルの構造
stanza の種類
実設定ファイル紹介
6/40

Page: 8

interfaces ファイルの構造
# lo の auto stanza と iface stanza
auto lo
iface lo inet loopback
# eth0 の allow-hotplug stanza と iface stanza
allow-hotplug eth0
iface eth0 inet dhcp
# eth1 の allow-hotplug stanza と iface stanza
allow-hotplug eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
7/40

Page: 9

stanza (スタンザ) とは?
iface
mapping
auto
source (wheezy 以降)
allow-hotplug
8/40

Page: 10

stanza の例 (1)
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet dhcp
9/40

Page: 11

stanza の例 (2)
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
iface eth2 inet static
address 192.168.2.1
netmask 255.255.255.0
10/40

Page: 12

コメント
# から始まる行
行の途中や行末に # があっても設定値の一部
になるだけ
11/40

Page: 13

Agenda
/etc/network/interfaces とは?
interfaces ファイルの構造
stanza の種類
実設定ファイル紹介
12/40

Page: 14

auto stanza
「ifup -a」で up するインターフェイス
# 1行にまとめる例
auto eth0 eth1
# 複数の stanza に分割する例
auto eth0
auto eth1
13/40

Page: 15

allow-hotplug stanza
NIC が認識されたタイミングで up するインターフェ
イス
「ifup --allow=hotplug eth0 eth1」
udev の中で「SUBSYSTEM=="net", RUN
+="net.agent"」という設定
「/lib/udev/net.agent」が「ifup --
allow=hotplug」を実行
14/40

Page: 16

mapping stanza
動的に設定を切り替え
/usr/share/doc/ifupdown/examples/ に例
PC カードの MAC アドレス (get-mac-address.sh)
特定の IP アドレスに ping が通るか (ping-
places.sh)
15/40

Page: 17

source stanza
別のファイルを読み込む
ただし wheezy 以降
source /etc/network/interfaces.d/*
16/40

Page: 18

iface stanza
iface 名前 アドレスファミリ メソッド
iface eth0 inet dhcp
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
17/40

Page: 19

iface オプション
iface stanza の 2 行目以降
アドレスファミリごとのオプション
共通オプション 4種類
18/40

Page: 20

共通オプション (up)
pre-up
ネットワークを up する前
無線 LAN 関係の設定など
up (post-up でも同じ)
ネットワークを up した後
ネットワークの追加設定
デーモンの再起動
VPN の接続
manual メソッドで up 処理を書くなど
19/40

Page: 21

共通オプション (down)
down (pre-down でも同じ)
VPN の切断
DNS サーバーの設定を外す
post-down
無線 LAN 関係の停止処理など
20/40

Page: 22

実行順序
ifup
1. pre-up
2. ifup の内部処理
3. up (post-up)
ifdown
1. down (pre-down)
2. ifdown の内部処理
3. post-down
21/40

Page: 23

/etc/network/if-*.d/
オプションと同じタイミングで実行 (run-parts)
/etc/network/if-pre-up.d/
/etc/network/if-up.d/
/etc/network/if-down.d/
/etc/network/if-post-down.d/
環境変数で連携
22/40

Page: 24

パッケージで導入されるオプシ
ョン例
パッケージ
wireless-tools
wpasupplicant
resolvconf
ifenslave-2.6
オプション
wireless-*
wpa-*
dns-*
slaves
23/40

Page: 25

パッケージで導入されるスクリ
プトの例
resolvconf パッケージ
/etc/network/if-up.d/000resolvconf
/etc/network/if-down.d/resolvconf
24/40

Page: 26

000resolvconf (1)
% egrep
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'^[^#]' /etc/network/if-up.d/000resolvconf | cat -n
[ -x /sbin/resolvconf ] || exit 0
case "$ADDRFAM" in
inet|inet6) : ;;
*) exit 0 ;;
esac
R=""
if [ "$IF_DNS_DOMAIN" ] ; then
R="${R}domain $IF_DNS_DOMAIN
"
fi
if [ "$IF_DNS_SEARCH" ] ; then
R="${R}search $IF_DNS_SEARCH
"
fi
25/40

Page: 27

000resolvconf (2)
15
16
17
18
19
20
21
22
23
if [ "$IF_DNS_SORTLIST" ] ; then
R="${R}sortlist $IF_DNS_SORTLIST
"
fi
for NS in $IF_DNS_NAMESERVERS ; do
R="${R}nameserver $NS
"
done
echo -n "$R" | /sbin/resolvconf -a "${IFACE}.${ADDRFAM}"
26/40

Page: 28

環境変数の例
「iface eth0 inet dhcp」だけの設定
「up env > /var/tmp/env.txt」で保存した環境
変数の例
METHOD=dhcp
MODE=start
(or stop)
LOGICAL=eth0
PHASE=post-up (or pre-up, pre-down, post-down)
ADDRFAM=inet
VERBOSITY=0
(ifup -v なら 1)
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
IFACE=eth0
PWD=/
27/40

Page: 29

設定の多い例
iface br0 inet static
# bridge
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
# static
address 192.168.253.29
netmask 255.255.255.0
gateway 192.168.253.1
# iproute
ip2-table 100
ip2-net 192.168.253.0/24
ip2-gateway 192.168.253.1
post-up /etc/network/ip2-route.sh
pre-down /etc/network/ip2-route.sh
pre-up env > /var/tmp/env-$IFACE-$PHASE.txt
post-down env > /var/tmp/env-$IFACE-$PHASE.txt
# resolvconf
dns-nameservers 192.168.253.1
28/40

Page: 30

環境変数例
IF_BRIDGE_FD=0
METHOD=static
MODE=start
LOGICAL=br0
IF_IP2_GATEWAY=192.168.253.1
PHASE=pre-up
IF_BRIDGE_MAXWAIT=0
IF_ADDRESS=192.168.253.29
ADDRFAM=inet
VERBOSITY=0
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
IF_IP2_NET=192.168.253.0/24
IF_GATEWAY=192.168.253.1
IF_METRIC=100
IF_NETMASK=255.255.255.0
IFACE=br0
IF_BRIDGE_STP=off
PWD=/
IF_IP2_TABLE=100
IF_BRIDGE_PORTS=eth0
IF_BROADCAST=+
IF_DNS_NAMESERVERS=192.168.253.1
29/40

Page: 31

独自スクリプトの例
インターネットへの経路が複数ある環境
リクエストが来た側のゲートウェイ経由して応答
を返す
30/40

Page: 32

ip2-route.sh (1)
%
[
[
[
cat /etc/network/ip2-route.sh
-n "$IF_IP2_NET" ] || exit 0
-n "$IF_IP2_TABLE" ] || exit 0
-n "$IF_IP2_GATEWAY" ] || exit 0
if [ "$VERBOSITY" -eq 1 ]; then
set -x
fi
31/40

Page: 33

ip2-route.sh (2)
case "$PHASE" in
*up)
ip route add $IF_IP2_NET dev $IFACE src $IF_ADDRESS table $IF_IP2_TABLE
ip route add default via $IF_IP2_GATEWAY table $IF_IP2_TABLE
ip rule add from $IF_ADDRESS table $IF_IP2_TABLE
;;
*down)
ip rule del from $IF_ADDRESS table $IF_IP2_TABLE
ip route del default via $IF_IP2_GATEWAY table $IF_IP2_TABLE
ip route del $IF_IP2_NET dev $IFACE src $IF_ADDRESS table $IF_IP2_TABLE
;;
esac
exit 0
32/40

Page: 34

inet アドレスファミリ
IPv4 のネットワーク設定
33/40

Page: 35

loopback メソッド
iface lo inet loopback
# The loopback network interface
auto lo
iface lo inet loopback
pre-up /sbin/iptables-restore < /etc/network/iptables.txt
34/40

Page: 36

static メソッド
必須オプション
address
netmask
普通は省略するオプション
broadcast
network
設定することが多いオプション
gateway
35/40

Page: 37

manual メソッド
up や down などで全部自前で設定する時
「/etc/network/if-*.d/」以下のスクリプトで設
定する時
NetworkManager の余計な処理を止めたい時
36/40

Page: 38

dhcp メソッド
dhclient などで自動設定
37/40

Page: 39

inet6 アドレスファミリ
IPv6 のネットワーク設定
38/40

Page: 40

設定書き換え時の注意
安全な書き換え手順
1. ifdown
2. /etc/network/interfaces を書き換え
3. ifup
39/40

Page: 41

Agenda
/etc/network/interfaces とは?
interfaces ファイルの構造
stanza の種類
実設定ファイル紹介
Powered by Rabbit 2.0.8
40/40

Other slides