rabbit-slide-znz-gum2013-interfaces 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rabbit +1 -0
- data/README.rd +25 -0
- data/Rakefile +9 -0
- data/config.yaml +21 -0
- data/etc-network-interfaces.rab +569 -0
- data/pdf/gum2013-interfaces-etc-network-interfaces.pdf +0 -0
- metadata +65 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7de92e6dcd8f853fff9faa03f0b236c73d120a63
|
4
|
+
data.tar.gz: ad2770894348cdd72fcfa905254472dccc4d0f4e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c9ba6aedbbb0cbf7c0f3d2355caddf325967937cffa17c8e90bd3d3c1ac8cdfe16d9519c501d3c60dc82209ced74aa27914a0b2dd05ae7873cb80c0d84461560
|
7
|
+
data.tar.gz: 14ce773c785e6954a65206a8d4b604ddb6278c31688b70ce738e0647566478af53dd01e51ebb82daf20b6f39704ef6744f7e6c2b63804d301903a55a38b2d0ad
|
data/.rabbit
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
etc-network-interfaces.rab
|
data/README.rd
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
= /etc/network/interfaces について
|
2
|
+
|
3
|
+
大統一Debian勉強会2013での発表資料です。
|
4
|
+
resolvconf パッケージなどとの連携方法や独自に同じようなスクリプトを作成する方法について話しました。
|
5
|
+
|
6
|
+
== 作者向け
|
7
|
+
|
8
|
+
=== 表示
|
9
|
+
|
10
|
+
rake
|
11
|
+
|
12
|
+
=== 公開
|
13
|
+
|
14
|
+
rake publish
|
15
|
+
|
16
|
+
== 閲覧者向け
|
17
|
+
|
18
|
+
=== インストール
|
19
|
+
|
20
|
+
gem install rabbit-slide--gum2013-interfaces
|
21
|
+
|
22
|
+
=== 表示
|
23
|
+
|
24
|
+
rabbit rabbit-slide--gum2013-interfaces.gem
|
25
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
require "rabbit/task/slide"
|
2
|
+
|
3
|
+
# Edit ./config.yaml to customize meta data
|
4
|
+
|
5
|
+
Rabbit::Task::Slide.new do |task|
|
6
|
+
# task.spec.files += Dir.glob("doc/**/*.*")
|
7
|
+
# task.spec.files -= Dir.glob("private/**/*.*")
|
8
|
+
# task.spec.add_runtime_dependency("YOUR THEME")
|
9
|
+
end
|
data/config.yaml
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
---
|
2
|
+
id: gum2013-interfaces
|
3
|
+
base_name: etc-network-interfaces
|
4
|
+
tags:
|
5
|
+
- debian
|
6
|
+
- network
|
7
|
+
- interfaces
|
8
|
+
presentation_date: 2013/06/29
|
9
|
+
version: 1.0.0
|
10
|
+
licenses: []
|
11
|
+
slideshare_id: gum2013-interfaces
|
12
|
+
speaker_deck_id:
|
13
|
+
ustream_id:
|
14
|
+
vimeo_id:
|
15
|
+
author:
|
16
|
+
markup_language: :rd
|
17
|
+
name: Kazuhiro NISHIYAMA
|
18
|
+
email: zn@mbf.nifty.com
|
19
|
+
rubygems_user: znz
|
20
|
+
slideshare_user: znzjp
|
21
|
+
speaker_deck_user:
|
@@ -0,0 +1,569 @@
|
|
1
|
+
= /etc/network/interfaces について
|
2
|
+
|
3
|
+
# : subtitle
|
4
|
+
# サブタイトル
|
5
|
+
: author
|
6
|
+
西山和広
|
7
|
+
# : institution
|
8
|
+
# 所属
|
9
|
+
: content-source
|
10
|
+
大統一Debian勉強会2013
|
11
|
+
: date
|
12
|
+
2013/06/29
|
13
|
+
: allotted-time
|
14
|
+
40m
|
15
|
+
: theme
|
16
|
+
lightning-simple
|
17
|
+
|
18
|
+
= Agenda
|
19
|
+
|
20
|
+
* /etc/network/interfaces とは?
|
21
|
+
* interfaces ファイルの構造
|
22
|
+
* stanza の種類
|
23
|
+
* 実設定ファイル紹介
|
24
|
+
|
25
|
+
= Agenda
|
26
|
+
|
27
|
+
* ((*/etc/network/interfaces とは?*))
|
28
|
+
* interfaces ファイルの構造
|
29
|
+
* stanza の種類
|
30
|
+
* 実設定ファイル紹介
|
31
|
+
|
32
|
+
= /etc/network/interfaces とは?
|
33
|
+
ネットワークの設定ファイル
|
34
|
+
|
35
|
+
* Debian, Ubuntu など
|
36
|
+
* /etc/network/interfaces
|
37
|
+
* Fedora, CentOS など
|
38
|
+
* /etc/sysconfig/network や
|
39
|
+
* /etc/sysconfig/network-scripts/ifcfg-eth0
|
40
|
+
* など
|
41
|
+
|
42
|
+
== Note
|
43
|
+
|
44
|
+
Linux ではディストリビューションごとにネットワーク設定の仕組みが異なっています。
|
45
|
+
Debian 系では /etc/network/interfaces がネットワークの設定ファイルです。
|
46
|
+
これは Red Hat Enterprise Linux や CentOS での /etc/sysconfig/network や /etc/sysconfig/network-scripts/ifcfg-eth0 などの設定ファイルに相当します。
|
47
|
+
|
48
|
+
= 何から参照されるか?
|
49
|
+
* ifupdown パッケージ
|
50
|
+
* ifup (インターフェイス設定コマンド)
|
51
|
+
* ifdown (設定解除コマンド)
|
52
|
+
* NetworkManager
|
53
|
+
* など
|
54
|
+
|
55
|
+
== Note
|
56
|
+
|
57
|
+
/etc/network/interfaces は主に ifupdown パッケージで提供される ifup (ネットワークインターフェイス設定コマンド) と ifdown (設定解除コマンド) で使われます。
|
58
|
+
他にも NetworkManager や guessnet などのツールやスクリプトから参照されることもあるようです。
|
59
|
+
|
60
|
+
= 何から参照されない?
|
61
|
+
* /etc/network/if-*.d/ で連携するもの
|
62
|
+
* resolvconf
|
63
|
+
* wireless-tools
|
64
|
+
* wpasupplicant
|
65
|
+
* など
|
66
|
+
|
67
|
+
== Note
|
68
|
+
resolvconf や wireless-tools や wpasupplicant などは後述する /etc/network/if-*.d/ の仕組みを使っているので、 /etc/network/interfaces ファイルを直接参照することはありません。
|
69
|
+
|
70
|
+
= Agenda
|
71
|
+
|
72
|
+
* /etc/network/interfaces とは?
|
73
|
+
* ((*interfaces ファイルの構造*))
|
74
|
+
* stanza の種類
|
75
|
+
* 実設定ファイル紹介
|
76
|
+
|
77
|
+
= interfaces ファイルの構造
|
78
|
+
# lo の auto stanza と iface stanza
|
79
|
+
auto lo
|
80
|
+
iface lo inet loopback
|
81
|
+
|
82
|
+
# eth0 の allow-hotplug stanza と iface stanza
|
83
|
+
allow-hotplug eth0
|
84
|
+
iface eth0 inet dhcp
|
85
|
+
|
86
|
+
# eth1 の allow-hotplug stanza と iface stanza
|
87
|
+
allow-hotplug eth1
|
88
|
+
iface eth1 inet static
|
89
|
+
address 192.168.1.1
|
90
|
+
netmask 255.255.255.0
|
91
|
+
|
92
|
+
== Note
|
93
|
+
interfaces ファイルは stanza (スタンザ) と呼ばれる固まりを並べる構造になっています。
|
94
|
+
|
95
|
+
例えば以下のような interfaces ファイルなら 6 個の stanza を含んでいます。
|
96
|
+
|
97
|
+
|
98
|
+
最初の2個の stanza は lo という 127.0.0.1 や ::1 に対応するループバックインターフェイスの設定で、ここをいじることは普通はないと思います。
|
99
|
+
|
100
|
+
次の2個の stanza は eth0 という最初のネットワークインターフェイスは DHCP で自動で設定を取得しています。
|
101
|
+
|
102
|
+
最後の2個の stanza は eth1 というネットワークインターフェイスは 192.168.1.1 という IPv4 アドレスを設定しています。
|
103
|
+
address や netmask の行も iface stanza に含まれます。
|
104
|
+
|
105
|
+
= stanza (スタンザ) とは?
|
106
|
+
|
107
|
+
* iface
|
108
|
+
* mapping
|
109
|
+
* auto
|
110
|
+
* source (wheezy 以降)
|
111
|
+
* allow-hotplug
|
112
|
+
|
113
|
+
== Note
|
114
|
+
stanza は "iface", "mapping", "auto", "source"\footnote{source stanza が使えるのは wheezy 以降のみです。} や "allow-"\footnote{allow-hotplug と allow-auto があるようです。}の行が stanza の始まりです。
|
115
|
+
stanza は 1 行だけのこともあれば複数行になっていることもあります。
|
116
|
+
|
117
|
+
= stanza の例 (1)
|
118
|
+
|
119
|
+
auto lo
|
120
|
+
iface lo inet loopback
|
121
|
+
allow-hotplug eth0
|
122
|
+
iface eth0 inet dhcp
|
123
|
+
|
124
|
+
== Note
|
125
|
+
以下の例ではそれぞれ 1 行ずつの stanza が 5 個あります。
|
126
|
+
|
127
|
+
= stanza の例 (2)
|
128
|
+
|
129
|
+
iface eth1 inet static
|
130
|
+
address 192.168.1.1
|
131
|
+
netmask 255.255.255.0
|
132
|
+
iface eth2 inet static
|
133
|
+
address 192.168.2.1
|
134
|
+
netmask 255.255.255.0
|
135
|
+
|
136
|
+
== Note
|
137
|
+
次の例では 3 行で 1 個の stanza になっています。
|
138
|
+
2 行目以降はインデントされていることもありますが、インデントはあってもなくてもかまいません。
|
139
|
+
|
140
|
+
= コメント
|
141
|
+
* (('#')) から始まる行
|
142
|
+
* 行の途中や行末に (('#')) があっても設定値の一部になるだけ
|
143
|
+
== Note
|
144
|
+
(('#')) から始まる行はコメントです。
|
145
|
+
行の途中や行末に (('#')) があっても設定値の一部になるだけでコメントにはなりません。
|
146
|
+
|
147
|
+
= Agenda
|
148
|
+
|
149
|
+
* /etc/network/interfaces とは?
|
150
|
+
* interfaces ファイルの構造
|
151
|
+
* ((*stanza の種類*))
|
152
|
+
* 実設定ファイル紹介
|
153
|
+
|
154
|
+
= auto stanza
|
155
|
+
* 「(('ifup -a'))」で up するインターフェイス
|
156
|
+
|
157
|
+
# 1行にまとめる例
|
158
|
+
auto eth0 eth1
|
159
|
+
|
160
|
+
# 複数の stanza に分割する例
|
161
|
+
auto eth0
|
162
|
+
auto eth1
|
163
|
+
|
164
|
+
== Note
|
165
|
+
auto stanza は ifup -a のコマンド実行時に up するインターフェイスの設定です。
|
166
|
+
複数設定したい場合は、1 行に複数並べてもいいし、複数回 auto stanza を書いても構いません。
|
167
|
+
|
168
|
+
= allow-hotplug stanza
|
169
|
+
NIC が認識されたタイミングで up するインターフェイス
|
170
|
+
* 「(('ifup --allow=hotplug eth0 eth1'))」
|
171
|
+
* udev の中で「(('SUBSYSTEM=="net", RUN+="net.agent"'))」という設定
|
172
|
+
* 「(('/lib/udev/net.agent'))」が「(('ifup --allow=hotplug'))」を実行
|
173
|
+
|
174
|
+
== Note
|
175
|
+
allow-hotplug stanza は「\verb+ifup --allow=hotplug eth0 eth1+」のように実行されたときに up するインターフェイスの設定です。\footnote{interfaces の man page では "allow-" stanza と説明されていて、 allow-auto は auto と同じ意味だと書かれています。他の "allow-" stanza は見たことがないので、ここでは代表して allow-hotplug stanza として説明しています。}
|
176
|
+
|
177
|
+
udev で NIC などが認識されたタイミングで up するインターフェイスを設定します。auto だとデバイスの認識のタイミングの問題で up に失敗することがあるので、最近は allow-hotplug eth0 のようになっていることが多いようです。
|
178
|
+
|
179
|
+
etch や lenny では \verb+/etc/udev/rules.d/+ の中に、
|
180
|
+
squeeze や wheezy では \verb+/lib/udev/rules.d/+ の中に
|
181
|
+
|
182
|
+
\begin{commandline}
|
183
|
+
SUBSYSTEM=="net", RUN+="net.agent"
|
184
|
+
\end{commandline}
|
185
|
+
|
186
|
+
という設定があり、\verb+/lib/udev/net.agent+ 経由で「\verb+ifup --allow=hotplug+」が実行されています。
|
187
|
+
|
188
|
+
= mapping stanza
|
189
|
+
* 動的に設定を切り替え
|
190
|
+
* /usr/share/doc/ifupdown/examples/ に例
|
191
|
+
* PC カードの MAC アドレス (get-mac-address.sh)
|
192
|
+
* 特定の IP アドレスに ping が通るか (ping-places.sh)
|
193
|
+
== Note
|
194
|
+
/usr/share/doc/ifupdown/examples/ 以下に、ノート PC で差した PC カードの MAC アドレスによって設定を変えたり (get-mac-address.sh)、特定の IP アドレスに ping が通るかどうかによって設定を変えたり (ping-places.sh) するサンプルファイルがあります。
|
195
|
+
|
196
|
+
= source stanza
|
197
|
+
* 別のファイルを読み込む
|
198
|
+
* ただし wheezy 以降
|
199
|
+
source /etc/network/interfaces.d/*
|
200
|
+
|
201
|
+
== Note
|
202
|
+
wheezy 以降の ifupdown パッケージでは source stanza というものが使えます。
|
203
|
+
interfaces ファイルの中で別のファイルを読み込む (include する) ものです。
|
204
|
+
|
205
|
+
という設定を書けば /etc/network/interfaces.d/lo や /etc/network/interfaces.d/eth0 などに設定を分割して取り込むということも出来ます。
|
206
|
+
|
207
|
+
ただし NetworkManager などの別のツールやスクリプトで /etc/network/interfaces を直接見ている場合に問題が起きる可能性があるという議論\footnote{https://lists.debian.org/debian-devel/2013/01/msg00157.html}があるようです。
|
208
|
+
|
209
|
+
= iface stanza
|
210
|
+
* iface 名前 アドレスファミリ メソッド
|
211
|
+
iface eth0 inet dhcp
|
212
|
+
iface eth1 inet static
|
213
|
+
address 192.168.1.1
|
214
|
+
netmask 255.255.255.0
|
215
|
+
|
216
|
+
== Note
|
217
|
+
iface stanza では、IP アドレスなどのネットワーク設定を記述します。
|
218
|
+
「iface 名前 アドレスファミリ メソッド」という行で始まります。
|
219
|
+
|
220
|
+
iface stanza の最初の引数には eth0 などのような物理インターフェイス名を記述します。
|
221
|
+
物理インターフェイス名の代わりに、論理名で home と記述して「ifup ath0=home」のように使うこともできます。
|
222
|
+
\footnote{以前、/etc/network/run/ifstate (wheezy では /run/network/ifstate) に「lo=lo」とか「eth0=eth0」のようにあって、何の意味があるんだろうと思っていたのですが、「ifup ath0=home」とするとifstateに「ath0=home」と書き込まれていて、こういう場合に「=」の左右が違うことがあるということを知りました。}
|
223
|
+
|
224
|
+
その他の設定については後述します。
|
225
|
+
= iface オプション
|
226
|
+
* iface stanza の 2 行目以降
|
227
|
+
* アドレスファミリごとのオプション
|
228
|
+
* 共通オプション 4種類
|
229
|
+
|
230
|
+
== Note
|
231
|
+
アドレスファミリなどに関係なく共通で使えるオプションとして、以下の4種類があります。
|
232
|
+
|
233
|
+
= 共通オプション (up)
|
234
|
+
* pre-up
|
235
|
+
* ネットワークを up する前
|
236
|
+
* 無線 LAN 関係の設定など
|
237
|
+
* up (post-up でも同じ)
|
238
|
+
* ネットワークを up した後
|
239
|
+
* ネットワークの追加設定
|
240
|
+
* デーモンの再起動
|
241
|
+
* VPN の接続
|
242
|
+
* manual メソッドで up 処理を書くなど
|
243
|
+
|
244
|
+
== Note
|
245
|
+
\item[pre-up] ネットワークを up する前に必要な無線 LAN 関係の設定などに使われます。
|
246
|
+
|
247
|
+
\item[up (post-up でも同じ)] ネットワークを up した後に追加で設定するのに使われたりインターフェイスの増減が影響するデーモンの再起動をしたり VPN の接続をしたり manual メソッドで up 処理を書くのに使われたりします。
|
248
|
+
|
249
|
+
= 共通オプション (down)
|
250
|
+
* down (pre-down でも同じ)
|
251
|
+
* VPN の切断
|
252
|
+
* DNS サーバーの設定を外す
|
253
|
+
* post-down
|
254
|
+
* 無線 LAN 関係の停止処理など
|
255
|
+
|
256
|
+
== Note
|
257
|
+
\item[down (pre-down でも同じ)] VPN の切断をしたり切断対象のネットワークの DNS サーバーの設定を外したりします。
|
258
|
+
|
259
|
+
\item[post-down] 無線 LAN 関係の停止処理などに使われます。
|
260
|
+
|
261
|
+
= 実行順序
|
262
|
+
ifup
|
263
|
+
(1) pre-up
|
264
|
+
(2) ifup の内部処理
|
265
|
+
(3) up (post-up)
|
266
|
+
ifdown
|
267
|
+
(1) down (pre-down)
|
268
|
+
(2) ifdown の内部処理
|
269
|
+
(3) post-down
|
270
|
+
|
271
|
+
== Note
|
272
|
+
\item[ifup] pre-up → ifup の内部処理\footnote{後述の static メソッドや dhcp メソッドなどに対応する処理です。 manual メソッドなら何もしません。} → up (post-up)
|
273
|
+
\item[ifdown] down (pre-down) → ifdown の内部処理 → post-down
|
274
|
+
|
275
|
+
= /etc/network/if-*.d/
|
276
|
+
オプションと同じタイミングで実行 (run-parts)
|
277
|
+
* /etc/network/if-pre-up.d/
|
278
|
+
* /etc/network/if-up.d/
|
279
|
+
* /etc/network/if-down.d/
|
280
|
+
* /etc/network/if-post-down.d/
|
281
|
+
環境変数で連携
|
282
|
+
|
283
|
+
== Note
|
284
|
+
上記の設定と同じタイミングで \verb+/etc/network/if-*.d/+ に置かれたスクリプトも実行されます。
|
285
|
+
|
286
|
+
\footnote{run-parts で実行されるため /etc/cron*ly 以下などと同じくファイル名に「.」などが含まれていると実行されません。}
|
287
|
+
|
288
|
+
スクリプトには iface stanza の情報として環境変数 IFACE, LOGICAL, ADDRFAM, METHOD, MODE, PHASE, VERBOSITY が渡されます。
|
289
|
+
他のオプションは「\verb+IF_+」で始まる環境変数で渡されます。
|
290
|
+
|
291
|
+
= パッケージで導入されるオプション例
|
292
|
+
# RT
|
293
|
+
|
294
|
+
パッケージ, オプション
|
295
|
+
|
296
|
+
wireless-tools, wireless-*
|
297
|
+
wpasupplicant , wpa-*
|
298
|
+
resolvconf , dns-*
|
299
|
+
ifenslave-2.6 , slaves
|
300
|
+
|
301
|
+
== Note
|
302
|
+
wireless-tools パッケージを入れたら「wireless-」で始まるオプションが使えたり、wpasupplicant パッケージを入れたら「wpa-」で始まるオプションを使えたり、resolvconf パッケージを入れたら「dns-」で始まるオプションが使えたり、ifenslave-2.6 パッケージを入れたら「slaves」オプションが使えたりするのは、この「\verb+IF_+」で始まる環境変数を「/etc/network/if-*.d/」以下のスクリプトで使っているからです。
|
303
|
+
|
304
|
+
以下ではパッケージで導入されるスクリプトと独自スクリプトの例について説明します。
|
305
|
+
|
306
|
+
= パッケージで導入されるスクリプトの例
|
307
|
+
resolvconf パッケージ
|
308
|
+
* /etc/network/if-up.d/000resolvconf
|
309
|
+
* /etc/network/if-down.d/resolvconf
|
310
|
+
|
311
|
+
== Note
|
312
|
+
パッケージで導入されるスクリプトの例として、resolvconf パッケージを取り上げます。
|
313
|
+
resolvconf パッケージは /etc/resolv.conf を更新するための仕組みを提供しています。
|
314
|
+
ここでは ifup、ifdown に関係する部分だけ説明します。
|
315
|
+
|
316
|
+
resolvconf パッケージをインストールすると
|
317
|
+
\begin{itemize}
|
318
|
+
\item /etc/network/if-up.d/000resolvconf
|
319
|
+
\item /etc/network/if-down.d/resolvconf
|
320
|
+
\end{itemize}
|
321
|
+
というファイルが出来ます。
|
322
|
+
|
323
|
+
= 000resolvconf (1)
|
324
|
+
% egrep '^[^#]' /etc/network/if-up.d/000resolvconf | cat -n
|
325
|
+
1 [ -x /sbin/resolvconf ] || exit 0
|
326
|
+
2 case "$ADDRFAM" in
|
327
|
+
3 inet|inet6) : ;;
|
328
|
+
4 *) exit 0 ;;
|
329
|
+
5 esac
|
330
|
+
6 R=""
|
331
|
+
7 if [ "$IF_DNS_DOMAIN" ] ; then
|
332
|
+
8 R="${R}domain $IF_DNS_DOMAIN
|
333
|
+
9 "
|
334
|
+
10 fi
|
335
|
+
11 if [ "$IF_DNS_SEARCH" ] ; then
|
336
|
+
12 R="${R}search $IF_DNS_SEARCH
|
337
|
+
13 "
|
338
|
+
14 fi
|
339
|
+
|
340
|
+
== Note
|
341
|
+
000resolvconf の内容をコメントや空行を除外して引用します。
|
342
|
+
|
343
|
+
まず1行目には /sbin/resolvconf の存在チェックがあります。
|
344
|
+
これはパッケージが削除されて設定ファイルだけ残っている時にエラーにならないようにするための処理です。
|
345
|
+
|
346
|
+
次に2から5行目では環境変数 ADDRFAM をチェックして IPv4 と IPv6 のときだけ続きの処理を実行します。
|
347
|
+
ADDRFAM や IFACE は iface の行の情報が設定されている環境変数です。
|
348
|
+
|
349
|
+
= 000resolvconf (2)
|
350
|
+
15 if [ "$IF_DNS_SORTLIST" ] ; then
|
351
|
+
16 R="${R}sortlist $IF_DNS_SORTLIST
|
352
|
+
17 "
|
353
|
+
18 fi
|
354
|
+
19 for NS in $IF_DNS_NAMESERVERS ; do
|
355
|
+
20 R="${R}nameserver $NS
|
356
|
+
21 "
|
357
|
+
22 done
|
358
|
+
23 echo -n "$R" | /sbin/resolvconf -a "${IFACE}.${ADDRFAM}"
|
359
|
+
== Note
|
360
|
+
続きの設定はほぼ同じような処理の繰り返しなので、一番良く使われると思われる dns-nameservers について説明します。
|
361
|
+
|
362
|
+
/etc/network/interfaces ファイルの iface stanza で「dns-nameservers 192.168.0.1」や「dns-nameservers 192.168.0.1 192.168.0.2」のように設定します。
|
363
|
+
|
364
|
+
その設定が19行目で \verb+IF_DNS_NAMESERVERS+ という環境変数で参照されています。
|
365
|
+
他の設定も含めて resolvconf パッケージの独自設定には \verb+dns-+ を付けるようになっています。
|
366
|
+
|
367
|
+
設定を書く時に \verb+dns-+ を付け忘れて「nameservers 192.168.0.1」のように書いてしまうと resolvconf には反映されずに悩むことになるので注意が必要です。
|
368
|
+
|
369
|
+
このように環境変数で連携しているため、無効な設定があっても他で使っているかもしれないということで、設定ミスの自動チェックは難しいようです。
|
370
|
+
|
371
|
+
= 環境変数の例
|
372
|
+
* 「iface eth0 inet dhcp」だけの設定
|
373
|
+
* 「up env > /var/tmp/env.txt」で保存した環境変数の例
|
374
|
+
|
375
|
+
METHOD=dhcp
|
376
|
+
MODE=start (or stop)
|
377
|
+
LOGICAL=eth0
|
378
|
+
PHASE=post-up (or pre-up, pre-down, post-down)
|
379
|
+
ADDRFAM=inet
|
380
|
+
VERBOSITY=0 (ifup -v なら 1)
|
381
|
+
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
382
|
+
IFACE=eth0
|
383
|
+
PWD=/
|
384
|
+
|
385
|
+
== Note
|
386
|
+
独自スクリプトの例に入る前にスクリプトのなかで使える環境変数の例を紹介しておきます。
|
387
|
+
|
388
|
+
独自スクリプトを作成する時には、まず「up env > /var/tmp/env.txt」などで使える環境変数を確認するのがおすすめです。
|
389
|
+
デバッグ中にも意図した通りの環境変数が設定されているかどうかを確認することをおすすめします。
|
390
|
+
「ifup -v eth0」のように「-v」付きで実行された場合は VERBOSITY が 1 になるので、その場合だけデバッグ用の出力を増やすようにするのもおすすめです。
|
391
|
+
|
392
|
+
まず、単純な「iface eth0 inet dhcp」だけの設定で「up env > /var/tmp/env.txt」で保存した環境変数を例として載せておきます。
|
393
|
+
他に pre-up や down や post-down でも環境変数を調べてみたところ、pre-up だと PHASE=pre-up になっているという違いがあり、down や post-down だと PHASE=pre-down や PHASE=post-down になっている他に MODE=stop になっているという違いがありました。PHASE には必ず pre- や post- が付いていて、/etc/network/if-*.d/ には付いていないものがあるというのは注意が必要かもしれません。
|
394
|
+
|
395
|
+
= 設定の多い例
|
396
|
+
iface br0 inet static
|
397
|
+
# bridge
|
398
|
+
bridge_ports eth0
|
399
|
+
bridge_stp off
|
400
|
+
bridge_fd 0
|
401
|
+
bridge_maxwait 0
|
402
|
+
# static
|
403
|
+
address 192.168.253.29
|
404
|
+
netmask 255.255.255.0
|
405
|
+
gateway 192.168.253.1
|
406
|
+
# iproute
|
407
|
+
ip2-table 100
|
408
|
+
ip2-net 192.168.253.0/24
|
409
|
+
ip2-gateway 192.168.253.1
|
410
|
+
post-up /etc/network/ip2-route.sh
|
411
|
+
pre-down /etc/network/ip2-route.sh
|
412
|
+
pre-up env > /var/tmp/env-$IFACE-$PHASE.txt
|
413
|
+
post-down env > /var/tmp/env-$IFACE-$PHASE.txt
|
414
|
+
# resolvconf
|
415
|
+
dns-nameservers 192.168.253.1
|
416
|
+
== Note
|
417
|
+
のように設定している時に「/var/tmp/env-br0-pre-up.txt」は以下のようになります。
|
418
|
+
元の設定ファイルで「\verb+-+」で書いていても「\verb+_+」で書いていても環境変数では「\verb+_+」になるという点に注意が必要かもしれません。
|
419
|
+
= 環境変数例
|
420
|
+
IF_BRIDGE_FD=0
|
421
|
+
METHOD=static
|
422
|
+
MODE=start
|
423
|
+
LOGICAL=br0
|
424
|
+
IF_IP2_GATEWAY=192.168.253.1
|
425
|
+
PHASE=pre-up
|
426
|
+
IF_BRIDGE_MAXWAIT=0
|
427
|
+
IF_ADDRESS=192.168.253.29
|
428
|
+
ADDRFAM=inet
|
429
|
+
VERBOSITY=0
|
430
|
+
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
431
|
+
IF_IP2_NET=192.168.253.0/24
|
432
|
+
IF_GATEWAY=192.168.253.1
|
433
|
+
IF_METRIC=100
|
434
|
+
IF_NETMASK=255.255.255.0
|
435
|
+
IFACE=br0
|
436
|
+
IF_BRIDGE_STP=off
|
437
|
+
PWD=/
|
438
|
+
IF_IP2_TABLE=100
|
439
|
+
IF_BRIDGE_PORTS=eth0
|
440
|
+
IF_BROADCAST=+
|
441
|
+
IF_DNS_NAMESERVERS=192.168.253.1
|
442
|
+
== Note
|
443
|
+
\verb+IF_BRIDGE_+ で始まる環境変数は bridge-utils パッケージに含まれる
|
444
|
+
/etc/network/if-post-down.d/bridge
|
445
|
+
と
|
446
|
+
/etc/network/if-pre-up.d/bridge
|
447
|
+
使われます。
|
448
|
+
|
449
|
+
\verb+IF_IP2_+ で始まる環境変数は次で説明する独自スクリプトで使っています。
|
450
|
+
|
451
|
+
= 独自スクリプトの例
|
452
|
+
* インターネットへの経路が複数ある環境
|
453
|
+
* リクエストが来た側のゲートウェイ経由して応答を返す
|
454
|
+
== Note
|
455
|
+
独自スクリプトの例として以前作成したインターネットへの経路が複数ある環境での設定スクリプトを載せておきます。
|
456
|
+
|
457
|
+
example では 192.168.0.2 側でも 192.168.1.2 側でも自宅サーバーを公開していて、リクエストが来た側のゲートウェイを経由して応答を返すように設定しています。
|
458
|
+
|
459
|
+
いわゆるマルチホーミング
|
460
|
+
|
461
|
+
= ip2-route.sh (1)
|
462
|
+
% cat /etc/network/ip2-route.sh
|
463
|
+
[ -n "$IF_IP2_NET" ] || exit 0
|
464
|
+
[ -n "$IF_IP2_TABLE" ] || exit 0
|
465
|
+
[ -n "$IF_IP2_GATEWAY" ] || exit 0
|
466
|
+
|
467
|
+
if [ "$VERBOSITY" -eq 1 ]; then
|
468
|
+
set -x
|
469
|
+
fi
|
470
|
+
== Note
|
471
|
+
まず ip2-net, ip2-table, ip2-gateway のすべてを必須設定として、抜けがある場合は何もしないようにしています。
|
472
|
+
|
473
|
+
次に VERBOSITY をチェックしています。
|
474
|
+
ここでは ifup -v eth0 のように実行された時に後続のコマンドが実際にどういうコマンドラインで実行されるのかを表示するようにして、デバッグしやすくしています。
|
475
|
+
|
476
|
+
= ip2-route.sh (2)
|
477
|
+
case "$PHASE" in
|
478
|
+
*up)
|
479
|
+
ip route add $IF_IP2_NET dev $IFACE src $IF_ADDRESS table $IF_IP2_TABLE
|
480
|
+
ip route add default via $IF_IP2_GATEWAY table $IF_IP2_TABLE
|
481
|
+
ip rule add from $IF_ADDRESS table $IF_IP2_TABLE
|
482
|
+
;;
|
483
|
+
*down)
|
484
|
+
ip rule del from $IF_ADDRESS table $IF_IP2_TABLE
|
485
|
+
ip route del default via $IF_IP2_GATEWAY table $IF_IP2_TABLE
|
486
|
+
ip route del $IF_IP2_NET dev $IFACE src $IF_ADDRESS table $IF_IP2_TABLE
|
487
|
+
;;
|
488
|
+
esac
|
489
|
+
|
490
|
+
exit 0
|
491
|
+
== Note
|
492
|
+
最後に up か down かに応じて ip コマンドを実行しています。
|
493
|
+
|
494
|
+
この設定ファイルを /etc/network/if-up.d/ と /etc/network/if-down.d/ の中にシンボリックリンクを作成しても良かったのですが、この例では /etc/network/ip2-route.sh に置いて、post-up と pre-down で実行するようにしています。
|
495
|
+
スクリプトをどう設置するのかは管理しやすい方法を選べば良いと思います。
|
496
|
+
|
497
|
+
スクリプトの説明はここまでです。
|
498
|
+
次からは /etc/network/interfaces の設定の説明に戻ります。
|
499
|
+
|
500
|
+
= inet アドレスファミリ
|
501
|
+
IPv4 のネットワーク設定
|
502
|
+
= loopback メソッド
|
503
|
+
iface lo inet loopback
|
504
|
+
|
505
|
+
# The loopback network interface
|
506
|
+
auto lo
|
507
|
+
iface lo inet loopback
|
508
|
+
pre-up /sbin/iptables-restore < /etc/network/iptables.txt
|
509
|
+
== Note
|
510
|
+
iptables の設定に iptables-restore を使っているのなら、下の例のように lo の pre-up に設定しておけば他のインターフェイスが up される前に設定できていいかもしません
|
511
|
+
|
512
|
+
= static メソッド
|
513
|
+
* 必須オプション
|
514
|
+
* address
|
515
|
+
* netmask
|
516
|
+
* 普通は省略するオプション
|
517
|
+
* broadcast
|
518
|
+
* network
|
519
|
+
* 設定することが多いオプション
|
520
|
+
* gateway
|
521
|
+
== Note
|
522
|
+
address と netmask は必須です。
|
523
|
+
|
524
|
+
broadcast と network は address と netmask から自動設定可能なので、わざわざ書いて間違える可能性を増やすよりも省略しておく方がおすすめだと思います。
|
525
|
+
|
526
|
+
gateway も設定することが多いです。
|
527
|
+
= manual メソッド
|
528
|
+
* up や down などで全部自前で設定する時
|
529
|
+
* 「/etc/network/if-*.d/」以下のスクリプトで設定する時
|
530
|
+
* NetworkManager の余計な処理を止めたい時
|
531
|
+
== Note
|
532
|
+
up や down などで全部自前で設定するときや 「/etc/network/if-*.d/」以下のスクリプトで設定する時などに使います。
|
533
|
+
|
534
|
+
bonding の slave 用 NIC に NetworkManager などが余計なことをしないように「iface eth1 inet manual」だけ書いておくという使い方も可能です。
|
535
|
+
|
536
|
+
= dhcp メソッド
|
537
|
+
* dhclient などで自動設定
|
538
|
+
|
539
|
+
== Note
|
540
|
+
dhclient などで dhcp クライアントとしてネットワークを設定します。
|
541
|
+
|
542
|
+
= inet6 アドレスファミリ
|
543
|
+
IPv6 のネットワーク設定
|
544
|
+
== Note
|
545
|
+
IPv6 のネットワーク設定です。
|
546
|
+
|
547
|
+
端末として接続するだけなら自動設定されることが多いので、わざわざ書くことは少ないかもしれません。
|
548
|
+
ルーターやサーバーなどで固定 IP アドレスを付けたり、トンネルで接続する場合に書くことになります。
|
549
|
+
接続方法によって設定内容が変わってくるので、詳細は省略します。
|
550
|
+
|
551
|
+
= 設定書き換え時の注意
|
552
|
+
安全な書き換え手順
|
553
|
+
(1) ifdown
|
554
|
+
(2) /etc/network/interfaces を書き換え
|
555
|
+
(3) ifup
|
556
|
+
== Note
|
557
|
+
ネットワーク接続中に /etc/network/interfaces を書き換えるのはあまりお勧めしません。
|
558
|
+
|
559
|
+
ifdown のときにも /etc/network/interfaces を見て何をするかが決まっているので、dhcp を static に書き換えてから /etc/init.d/networking restart をしてしまうと、dhcp クライアントのプロセスが残ってしまって、いつの間にかIPアドレスが変わって悩む、という現象が起きることがあるので注意が必要です。
|
560
|
+
たとえば他にも up で route add されていることを前提にして down に route del を書いていると、手動で up に書いた処理を実行しないと down の処理でエラーになるというような問題があります。
|
561
|
+
|
562
|
+
安全な方法としては ifdown で停止した後で /etc/network/interfaces を書き換えて、 ifup するという手順になります。
|
563
|
+
|
564
|
+
= Agenda
|
565
|
+
|
566
|
+
* /etc/network/interfaces とは?
|
567
|
+
* interfaces ファイルの構造
|
568
|
+
* stanza の種類
|
569
|
+
* ((*実設定ファイル紹介*))
|
Binary file
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rabbit-slide-znz-gum2013-interfaces
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kazuhiro NISHIYAMA
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-07-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rabbit
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.0.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.0.2
|
27
|
+
description: |-
|
28
|
+
大統一Debian勉強会2013での発表資料です。
|
29
|
+
resolvconf パッケージなどとの連携方法や独自に同じようなスクリプトを作成する方法について話しました。
|
30
|
+
email:
|
31
|
+
- zn@mbf.nifty.com
|
32
|
+
executables: []
|
33
|
+
extensions: []
|
34
|
+
extra_rdoc_files: []
|
35
|
+
files:
|
36
|
+
- .rabbit
|
37
|
+
- config.yaml
|
38
|
+
- Rakefile
|
39
|
+
- README.rd
|
40
|
+
- etc-network-interfaces.rab
|
41
|
+
- pdf/gum2013-interfaces-etc-network-interfaces.pdf
|
42
|
+
homepage: http://slide.rabbit-shocker.org/authors/znz/gum2013-interfaces/
|
43
|
+
licenses: []
|
44
|
+
metadata: {}
|
45
|
+
post_install_message:
|
46
|
+
rdoc_options: []
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
requirements: []
|
60
|
+
rubyforge_project:
|
61
|
+
rubygems_version: 2.0.3
|
62
|
+
signing_key:
|
63
|
+
specification_version: 4
|
64
|
+
summary: /etc/network/interfaces について
|
65
|
+
test_files: []
|