第5章 ネットワークの設定

目次

5.1. 基本的ネットワークインフラ
5.1.1. ホスト名の解決
5.1.2. ネットワークインターフェース名
5.1.3. LAN のためのネットワークアドレス範囲
5.1.4. ネットワークデバイスサポート
5.2. デスクトップのためのモダンネットワーク設定
5.2.1. GUI のネットワーク設定ツール
5.3. 旧来のネットワーク接続や設定
5.4. ネットワーク接続方法 (旧来)
5.4.1. イーサーネットを使っての DHCP 接続
5.4.2. イーサーネットを使っての静的 IP 接続
5.4.3. pppconfig を使っての PPP 接続
5.4.4. wvdialconf を使った代替 PPP 接続
5.4.5. pppoeconf を使った PPPoE 接続
5.5. ifupdown を使った基本的なネットワーク設定 (旧来)
5.5.1. 簡略化されたコマンドシンタックス
5.5.2. "/etc/network/interfaces" の基本的なシンタックス
5.5.3. ループバックネットワークインターフェース
5.5.4. DHCP サービスを受けるネットワークインターフェース
5.5.5. 静的 IP を使うネットワークインターフェース
5.5.6. ワイアレス LAN インターフェースの基本
5.5.7. WPA/WPA2を使うワイアレスLANインターフェース
5.5.8. WEP を使うワイアレス LAN インターフェース
5.5.9. PPP 接続
5.5.10. 代替の PPP 接続
5.5.11. PPPoE 接続
5.5.12. ifupdown のネットワーク設定状態
5.5.13. 基本ネットワーク設定
5.5.14. ifupdown-extra パッケージ
5.6. ifupdown を使う上級ネットワーク設定 (旧来)
5.6.1. ifplugd パッケージ
5.6.2. ifmetric パッケージ
5.6.3. 仮想インターフェース
5.6.4. 上級コマンドシンタックス
5.6.5. mapping スタンザ
5.6.6. 手動切り替え可能なネットワーク設定
5.6.7. ifupdown システムを使うスクリプト
5.6.8. guessnet を使う mapping
5.7. 低レベルネットワーク設定
5.7.1. Iproute2 コマンド
5.7.2. 安全な低レベルネットワーク操作
5.8. ネットワークの最適化
5.8.1. 最適 MTU の発見
5.8.2. MTU の設定
5.8.3. WAN TCP の最適化
5.9. Netfilter インフラ
[ヒント] ヒント

GNU/Linux のネットワーク設定の一般的ガイドは Linux Network Administrators Guide を参照下さい。

[ヒント] ヒント

最近の Debian に特化したネットワーク設定のガイドは The Debian Administrator's Handbook — Configuring the Network を参照下さい。

[警告] 警告

伝統的なインターフェースの命名法 ("eth0", "eth1", "wlan0", …) を使う代わりに、新しい systemd は "enp0s25" のような "予測可能なネットワークインターフェース名" を用います。

[警告] 警告

本章は、2013年にリリースされた Debian 7.0 (Wheezy) に基づいているため、内容が陳腐化しつつあります。

[ヒント] ヒント

本ドキュメントはネットワーク設定例にIPv4を用いて古い ifconfig(8) を使っていますが、Debian はwheezy リリースから IPv4+IPv6を用いて ip(8) を使うように移行中です。本ドキュメント更新のパッチは歓迎です。

[ヒント] ヒント

systemd の下では、networkd がネットワーク管理に使えます。systemd-networkd(8)y> を参照ください。

現代的な Debian システムの基本的ネットワークインフラをレビューします。

表5.1 GUI のネットワーク設定ツール

パッケージ ポプコン サイズ タイプ 説明
ifupdown V:566, I:995 204 設定::ifupdown ネットワークを接続したり切断したりする標準化されたツール (Debian 特定)
ifplugd V:4, I:19 209 , , 有線ネットワークを自動的に管理
ifupdown-extra V:0, I:1 96 , , "ifupdown" パッケージを強化するネットワークテストスクリプト
ifmetric V:0, I:1 36 , , ネットワークインターフェースの経路メトリック設定
guessnet V:0, I:1 402 , , "/etc/network/interfaces" ファイル経由で "ifupdown" パッケージを補強する mapping スクリプト
ifscheme V:0, I:0 58 , , "ifupdown" パッケージを補強する mapping スクリプト
ifupdown-scripts-zg2 V:0, I:0 147 , , Zugschlus さんの ifupdown の手動方法のインターフェーススクリプト
network-manager V:367, I:472 11192 設定::NM NetworkManager (デーモン): ネットワークを自動管理
network-manager-gnome V:246, I:416 6132 , , NetworkManager (GNOME フロントエンド)
wicd I:34 34 設定::wicd 有線と無線のネットワークマネージャー (メタパッケージ)
wicd-cli V:0, I:2 58 , , 有線と無線のネットワークマネージャー (コマンドラインクライアント)
wicd-curses V:1, I:5 174 , , 有線と無線のネットワークマネージャー (Curses クライアント)
wicd-daemon V:30, I:39 951 , , 有線と無線のネットワークマネージャー (デーモン)
wicd-gtk V:24, I:36 573 , , 有線と無線のネットワークマネージャー (GTK+ クライアント)
iptables V:243, I:993 1525 設定::Netfilter パケットフィルターと NAT のための管理ツール (Netfilter)
iproute V:134, I:531 23 設定::iproute2 iproute2、IPv6 や他の上級ネットワーク設定: ip(8)tc(8)
ifrename V:0, I:2 121 , , 各種の静的クライテリアに基づきネットワークインターフェースを改名します: ifrename(8)
ethtool V:93, I:263 331 , , Ethernet デバイス設定の表示と変更
iputils-ping V:262, I:996 111 test::iproute2 ホスト名IP アドレスによってリモートホストのネットワークからの到達性をテスト (旧来、GNU)
iputils-arping V:67, I:390 58 , , ARP アドレスによって特定されるリモートホストのネットワークからの到達性をテスト
iputils-tracepath V:17, I:288 75 , , リモートホストへのネットワークパスを追跡
net-tools V:421, I:998 934 設定::net-tools NET-3 ネットワーキングツールキット (net-tools、IPv4 ネットワーク設定): ifconfig(8)
inetutils-ping V:0, I:1 337 テスト::net-tools ホスト名IP アドレスによってリモートホストのネットワークからの到達性をテスト (旧来、GNU)
arping V:2, I:28 103 , , ARP アドレスによって特定されるリモートホストのネットワークからの到達性をテスト (旧来)
traceroute V:75, I:992 154 , , リモートホストへのネットワークパス追跡するツール (旧来、コンソール)
isc-dhcp-client V:421, I:960 651 設定::低レベル DHCP クライアント
wpasupplicant V:292, I:547 2531 , , WPA と WPA2 (IEEE 802.11i) のためのクライアントサポート
wpagui V:0, I:4 781 , , wpa_supplicant の Qt GUI クライアント
wireless-tools V:86, I:276 265 , , Linux のワイアレス拡張を操作するツール
ppp V:177, I:519 927 , , chat による PPP/PPPoE コネクション
pppoeconf V:0, I:12 290 設定::ヘルパー PPPoE コネクションの設定ヘルパー
pppconfig V:1, I:4 805 , , chat による PPP コネクションの設定ヘルパー
wvdial V:0, I:8 276 , , wvdialppp による PPP コネクションの設定ヘルパー
mtr-tiny V:7, I:60 105 テスト::低レベル リモートホストへのネットワークパスを追跡するツール (curses)
mtr V:6, I:40 150 , , リモートホストへのネットワークパスを追跡するツール (curses と GTK+)
gnome-nettool V:14, I:283 2111 , , 共通のネットワーク情報操作のためのツール (GNOME)
nmap V:50, I:452 22296 , , ネットワークマッパー / ポートスキャナー (Nmap、コンソール)
zenmap V:3, I:12 2824 , , ネットワークマッパー / ポートスキャナー (GTK+)
tcpdump V:22, I:198 1153 , , ネットワークトラフィックアナライザー (Tcpdump、コンソール)
wireshark V:5, I:65 74 , , ネットワークトラフィックアナライザー (Wireshark、GTK+)
tshark V:3, I:37 365 , , ネットワークトラフィックアナライザー (コンソール)
nagios3 I:8 NOT_FOUND , , ホストとサービスとネットワークを監視や管理するシステム (Nagios)
tcptrace V:0, I:1 392 , , tcpdump の出力から接続状況のまとめを作成
snort V:1, I:1 1920 , , 柔軟なネットワーク侵入検知システム (Snort)
ntopng V:0, I:1 578 , , ネットワークの使用状況をウェッブブラウザーで表示
dnsutils V:90, I:901 462 , , BIND によって提供されるネットワーククライアント: nslookup(8)nsupdate(8)dig(8)
dlint V:1, I:22 96 , , ネームサーバーの閲覧で DNS のゾーン情報をチェック
dnstracer V:0, I:2 56 , , DNS サーバーをその源流まで追跡

ホスト名の解決もまた、現在 NSS (ネームサービススイッチ、Name Service Switch) メカニズムによってサポートされています。この解決の流れは次です。

  1. "hosts: files dns" のようなスタンザのある "/etc/nsswitch.conf" ファイルがホスト名の解消の順序を規定します。(これは、"/etc/host.conf" ファイル中の "order" スタンザの機能を置換します。)

  2. files メソッドが最初に発動されます。ホスト名が "/etc/hosts" ファイルに見つかると、それに対応する全ての有効アドレスを返し終了します。("/etc/host.conf" ファイルは "multi on" を含みます。)

  3. dns メソッドが発動されます。"/etc/resolv.conf" ファイルで識別されるインターネットドメイン名システム (DNS) への問い合わせでホスト名が見つかれば、それに関する全ての有効アドレスを返します。

例えば、"/etc/hosts" は以下の内容です。

127.0.0.1 localhost
127.0.1.1 <host_name>

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

各行は IP アドレス で始まり、関連する ホスト名がそれに続きます。

本例の2行目の IP アドレス 127.0.1.1 は他の Unix 系システムでは見かけないかもしれません。bug #719621 に記録されているように、Debian インストーラー は恒久的 IP アドレスのないシステムのために一部ソフトウエアー (GNOME等) のための回避策としてこの項目を作成します。

<host_name> は、"/etc/hostname" の中に定義されたホスト名と一致します。

恒久的 IP アドレスを持つシステムでは 127.0.1.1 の代えてその恒久的 IP アドレスがここにあるべきです。

恒久的 IP アドレスと Domain 名システム (DNS)が提供する完全修飾ドメイン名 (FQDN) を持つシステムでは、その標準的な <host_name(ホスト名)>.<domain_name(ドメイン名)> が <host_name(ホスト名)> のみに代えて使われるべきです。

resolvconf パッケージがインストールされなかったら、"/etc/resolv.conf" は静的なファイルです。インストールされると、それはシンボリックリンクになります。いずれにせよ、解決機構を初期化する情報を含んでいます。もし DNS が IP="192.168.11.1" に見つかるなら、それは次の内容です。

nameserver 192.168.11.1

resolvconf パッケージはこの "/etc/resolv.conf" をシンボリックリンクにし、フックスクリプトで自動的にその内容を管理します。

典型的 adhoc な LAN 環境にある PC ワークステーションの場合、基本的な filesdns 法に加えて Multicast DNS (mDNS, Zeroconf) 経由でホスト名を解決する事ができます。

  • Avahi は Debian で Multicast DNS サービスの探索の枠組みを提供します。

  • Apple Bonjour / Apple Rendezvous と同等です。

  • libnss-mdns プラグインパッケージが GNU C ライブラリー (glibc) の GNU Name Service Switch (NSS) 機能に mDNS 経由のホスト名解決を提供します。

  • "/etc/nsswitch.conf" ファイルには "hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4" のようなスタンザがあるべきです。

  • ホスト名が ".local" で終わる 擬似-top-level domain (TLD) が解決されます。

  • mDNS の IPv4 リンク-ローカル のマルチキャストアドレス "224.0.0.251" とか IPv6 でそれに相当する "FF02::FB" が ".local" で終わる名前の DNS クエリーに用いられます。

非推奨である NETBios over TCP/IP を使うホスト名解決は、winbind パッケージをインストールすると提供できます。このような機能を有効にするには、"/etc/nsswitch.conf" ファイル中に "hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 wins" のようなスタンザが必要です。(最近の Windows システムは通常 dns メソッドをホスト名の解決に使います。)

[注記] 注記

ドメイン名システムにおける ジェネリックトップレベルドメイン (gTLD) の拡張が進行中です。LAN内のみで使うドメイン名を選ぶ際に名前衝突に注意が必要です。

Linux カーネル中の各ハードウエアーは、それが見つかり次第ユーザー空間の設定メカニズム udev (「udev システム」参照下さい) を通じて、例えば eth0 のようなネットワークインターフェース名が付与されます。ネットワークインターフェース名は、ifup(8)interfaces(5) の中で物理インターフェースと呼ばれています。

MAC アドレス等を使って各リブート毎に永続性をもって各ネットワークインターフェースが名付けられるようにするルールファイル "/etc/udev/rules.d/70-persistent-net.rules" があります。このファイルは "persistent-net-generator.rules" ルールファイルによって実行されているような "/lib/udev/write_net_rules" プログラムによって自動生成されます。そのファイルを変更することで命名ルールを変更できます。

[注意] 注意

"/etc/udev/rules.d/70-persistent-net.rules" ルールファイルを編集する時は、各ルールを1行に納めて MAC アドレスに小文字を使わなければいけません。例えば、あなたがこのファイル中に "FireWire device" と "PCI device" を見つけたら、きっと "PCI device" をeth0 として第1番目のネットワークインターフェースとして設定したいでしょう。

Debian の squeeze 以降のシステム上では、NetworkManager (NM) (network-manager と関連パッケージ) や Wicd (wicd と関連パッケージ) 等の管理デーモン経由でネットワーク接続の管理ができます。

  • それらには洒落た GUI やコマンドラインのユーザーインターフェースとともに提供されます。

  • それらのバックエンドシステムとして、自前のデーモンとともに提供されます。

  • それらによりあなたのシステムをインターネットへ容易に接続できます。

  • それらによりインターネットへの有線や無線のネットワークの管理が容易にできます。

  • それらにより旧来の "ifupdown" パッケージと独立にネットワークを設定できます。

[注記] 注記

サーバーにはこの様な自動ネットワーク設定を使わないで下さい。これらはラップトップ上のモービルデスクトップを主対象としています。

これらの現代的なネットワーク設定ツールは旧来の "ifupdown" パッケージやその "/etc/network/interfaces" 設定ファイルとの競合を避けるように適正に設定する必要があります。

[ヒント] ヒント

上記とは異なり、systemd の下では、ネットワークは /etc/systemd/network/ を使って設定されているかもしれません。systemd-resolved(8)resolved.conf(5)systemd-networkd(8) を参照ください。

[注記] 注記

これらの自動ネットワーク設定ツール機能の一部は、リグレッションにあっているかもしれません。これらは旧来の ifupdown パッケージほどは堅牢ではありません。最新の問題や制約条件に関しては network-manager の BTSwicd の BTS を参照下さい。

Debian 上での NM や Wicd に関する正式のドキュメンテーションは、"/usr/share/doc/network-manager/README.Debian" や "/usr/share/doc/wicd/README.Debian" によりそれぞれ提供されます。

デスクトップのための現代的ネットワーク設定の要点は以下です。

  1. 次のようにして、例えば foo というデスクトップユーザーを "netdev" グループに属するようにします。(GNOME や KDE のような現代的デスクトップ環境の下では D-bus 経由でそれを自動的にするのも一つの方法です。)

    $ sudo adduser foo netdev
  2. "/etc/network/interfaces" の設定を次のようにできるだけ簡単にします。

    auto lo
    iface lo inet loopback
  3. 次のようにして NM や Wicd を再起動します。

    $ sudo /etc/init.d/network-manager restart
    $ sudo /etc/init.d/wicd restart
  4. GUI 経由でネットワークを設定します。

[注記] 注記

ifupdown との干渉を避けるために、"/etc/network/interfaces" にリストされてないインターフェースのみが NM もしくは Wicd によって管理されます。

[ヒント] ヒント

NM のネットワーク設定能力を拡張したい場合には、network-manager-openconnectnetwork-manager-openvpn-gnomenetwork-manager-pptp-gnomemobile-broadband-provider-infognome-bluetooth 等の適正なプラグインモジュールや補足パッケージを探してください。Wicd の場合もまったく同様の方法で対処します。

[注意] 注意

こういった自動ネットワーク設定は、「ifupdown を使った基本的なネットワーク設定 (旧来)」「ifupdown を使う上級ネットワーク設定 (旧来)」のような "/etc/network/interfaces" への凝った旧来の ifupdown 設定と互換性がないかも知れません。最新の問題や制約条件に関しては network-manager の BTSwicd の BTS を参照下さい。

「デスクトップのためのモダンネットワーク設定」に記載された手法ではあなたの目的にとって不十分な場合には、多くの簡単なツールを組み合わせる旧来のネットワーク接続や設定を使うべきです。

旧来のネットワーク接続は手法毎に特定です (「ネットワーク接続方法 (旧来)」参照下さい)。

Linux の低レベルネットワーク設定には2タイプのプログラムがあります (「Iproute2 コマンド」参照下さい)。

  • 旧式の net-tools プログラム (ifconfig(8)、…) は Linux NET-3 ネットワークシステム由来です。これらの多くはすでに型遅れです。

  • 新規の Linux iproute2 プログラム (ip(8)、…) は現行の Linux のネットワークシステムです。

これらの低レベルのネットワークプログラムは強力ですが、使うのが面倒です。そこで高レベルのネットワーク設定プログラムが作られました。

ifupdown パッケージは Debian 上のそのような高レベルネットワーク設定のデファクトスタンダードです。それを使うと、"ifup eth0" とするだけでネットワークを立ち上げることができます。その設定ファイルは、"/etc/network/interfaces" ファイルで、その典型的内容は次です。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

resolvconf パッケージは、ネットワークアドレス解決設定ファイル "/etc/resolv.conf" の書き変えを自動化してネットワークアドレス解決の円滑な再構成をサポートするために ifupdown システムを補完するために作られました。現在、ほとんどの Debian のネットワーク設定パッケージは resolvconf パッケージを使うように変更されています ("/usr/share/doc/resolvconf/README.Debian"参照下さい)。

ifplugdguessnetifscheme 等の ifupdown パッケージの補助スクリプトが有線 LAN 上の可動 PC のためのネットワーク環境設定のようなネットワーク環境の動的設定を自動化するために作られました。これらはちょっと使い難いですが、既存の ifupdown システムとは反りが合います。

詳細に例示とともに説明します (「ifupdown を使った基本的なネットワーク設定 (旧来)」「ifupdown を使う上級ネットワーク設定 (旧来)」参照下さい)。

[注意] 注意

本セクションで説明されている接続テスト方法はあくまでテスト目的のためのものです。毎日のネットワーク接続のために使うためではありません NM か Wicd か ifupdown パッケージを通して使うことをお勧めします (「デスクトップのためのモダンネットワーク設定」「ifupdown を使った基本的なネットワーク設定 (旧来)」参照下さい)。

典型的なネットワーク接続方法と PC までの接続経路は次のようにまとめられます。


各接続方法のための設定スクリプトのまとめて次に記します。


ネットワーク接続の省略語は次の意味です。


[注記] 注記

ケーブル TV 経由の WAN 接続サービスは大体 DHCP か PPPoE でサービスを受けます。ADSL と FTTP の接続サービスは大体 PPPoE でサービスを受けます。WAN 接続の正確な設定要件はあなたの ISP にご確認下さい。

[注記] 注記

BB ルータが家庭内 LAN 環境を作るのに使われる時には、LAN 上の PC はネットワークアドレス変換 (NAT) をして BB ルーター経由で WAN に接続されます。そのような場合、LAN 上の PC のネットワークインターフェースは静的 IP か BB ルーターからの DHCP でサービスを受けます。BB ルーターはあなたの ISP による指示にしたがって WAN に接続されるよう設定しなければいけません。

設定スクリプト pppconfigPPP 接続を次の選択をすることで対話式で設定します。

  • 電話番号

  • ISP でのユーザー名

  • ISP のパスワード

  • ポートの速度

  • モデム通信のポート

  • 認証方法

表5.6 pppconfig を使っての PPP 接続のための設定ファイルのリスト

ファイル 機能
/etc/ppp/peers/<isp_name> pppconfig によって生成された <isp_name> に特定な pppd のための設定ファイル
/etc/chatscripts/<isp_name> pppconfig によって生成された <isp_name> に特定な chat のための設定ファイル
/etc/ppp/options pppd のための一般的な実行パラメーター
/etc/ppp/pap-secret PAP のための認証データー (安全上問題あり)
/etc/ppp/chap-secret CHAP のための認証データー (比較的安全)

[注意] 注意

もし ponpoff コマンドが引数無しに起動された場合には、"<isp_name>" の値として "provider" が使われます。

低レベルのネットワーク設定ツールを使って次に記すように設定の確認ができます。

$ sudo pon <isp_name>
...
$ sudo poff <isp_name>

"/usr/share/doc/ppp/README.Debian.gz" を参照下さい。

Debian システム上の伝統的な TCP/IP ネットワークのセットアップは ifupdown パッケージをより高レベルのツールとして使います。2つの場合があります。

このような伝統的設定方法は上級設定をしたい際に非常に有用です。以下を参照下さい。

ifupdown パッケージは Debian システムでの高レベルネットワーク設定の標準化された枠組みを提供します。このセクションでは、簡略化された紹介と多くの典型例で ifupdown を使った基本的なネットワーク設定を学びます。

"/etc/network/interfaces" のシンタックスは interfaces(5) に説明されていて、要点を次に記します。


iface スタンザで始まる行は次のシンタクスです。

iface <config_name> <address_family> <method_name>
 <option1> <value1>
 <option2> <value2>
 ...

基本設定に関しては、mapping スタンザは使われませんし、ネットワークインターフェース名をネットワーク設定名として使います (「mapping スタンザ」参照下さい)。

[警告] 警告

"/etc/network/interfaces" のネットワークインターフェースに関する "iface" スタンザの重複定義をしてはいけません。

「イーサーネットを使っての DHCP 接続」によりシステムの準備をした後、DHCP によってサービスされるネットワークインターフェースは "/etc/network/interfaces" ファイルの中に次のような設定エントリーを設定します。

allow-hotplug eth0
iface eth0 inet dhcp

Linux カーネルが物理インターフェース eth0 を認識した場合、allow-hotplug スタンザは ifup によりそのインターフェースが起動させられるようにし、iface スタンザが ifup がインターフェースが DHCP を使うように設定します。

静的 IP によってサービスされるネットワークインターフェースは "/etc/network/interfaces" ファイル中に例えば次の設定エントリーを作ることで設定されます。

allow-hotplug eth0
iface eth0 inet static
 address 192.168.11.100
 netmask 255.255.255.0
 gateway 192.168.11.1
 dns-domain example.com
 dns-nameservers 192.168.11.1

Linux カーネルが物理インターフェース eth0 を認識した場合、allow-hotplug スタンザは ifup によりそのインターフェースが起動させられるようにし、iface スタンザが ifup がインターフェースが静的 IP を使うように設定します。

ここでは次を仮定しています。

  • LAN ネットワークの IP アドレス範囲: 192.168.11.0 - 192.168.11.255

  • ゲートウエーの IP アドレス: 192.168.11.1

  • PC の IP アドレス: 192.168.11.100

  • resolvconf パッケージ: インストール済み

  • ドメイン名: "example.com"

  • DNS サーバーの IP アドレス: 192.168.11.1

resolvconf パッケージがインストールされていないと、DNS 関係の設定は手動で "/etc/resolv.conf" を次のように編集する必要があります。

nameserver 192.168.11.1
domain example.com
[注意] 注意

上記例で用いた IP アドレスはそのままコピーされるべきものではありません。IP 番号はあなたの実際のネットワーク設定に合わせなければいけません。

ワイアレス LAN (省略すると WLAN)IEEE 802.11 という標準群に基づく特別な免許なく使える無線を使う帯域拡散通信を経由の高速ワイアレス接続を提供します。

WLAN インターフェースは通常の Ethernet インターフェースと非常に似ていますが、始動時にネットワーク ID と暗号キーデーターを必要とします。インターフェース名が使われるカーネルドライバーによって eth1wlan0ath0wifi0 等とインターフェース名が少々異なる以外は、それらに使われる高レベルのネットワークツールは Ethernet インターフェースのものとまったく同じです。

[ヒント] ヒント

wmaster0 デバイスは、新規の Linux の mac80211 API による SoftMAC によってのみ使われる内部デバイスのマスターデバイスです。

WLAN に関して留意すべきキーワードは次です。


実際のプロトコルの選択肢は採用しているワイアレスルーターによって普通制約されます。

新規のWPA/WPA2を使うWLANをサポートするには、wpasupplicantパッケージをインストールする必要があります。

WLAN 接続上の DHCP によってサービスされている IP の場合には、"/etc/network/interfaces" ファイルのエントリーは次のようです。

allow-hotplug ath0
iface ath0 inet dhcp
 wpa-ssid homezone
 # hexadecimal psk is encoded from a plaintext passphrase
 wpa-psk 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

"/usr/share/doc/wpasupplicant/README.modes.gz" を参照下さい。

旧式の WEP を使う WLAN をサポートするには、wireless-tools パッケージをインストールする必要があります。(あなたの消費者用のルーターは今だにセキュアーでないインフラを使っているかもしれませんが、無いよりはましです。)

[注意] 注意

WEP を使う WLAN 上のネットワークトラフィックは他人に覗かれているかも知れないことを覚えておいて下さい。

WLAN 接続上の DHCP によってサービスされている IP の場合には、"/etc/network/interfaces" ファイルのエントリーは次のようです。

allow-hotplug eth0
iface eth0 inet dhcp
 wireless-essid Home
 wireless-key1 0123-4567-89ab-cdef
 wireless-key2 12345678
 wireless-key3 s:password
 wireless-defaultkey 2
 wireless-keymode open

"/usr/share/doc/wireless-tools/README.Debian" を参照下さい。

以前説明したように PPP 接続を設定する必要があります (「pppconfig を使っての PPP 接続」参照下さい)。さらに、第1番目の PPP デバイス ppp0 のための "/etc/network/interfaces" ファイルのエントリーを次のように追加します。

iface ppp0 inet ppp
 provider <isp_name>

以前説明したように wvdial を使う代替 PPP 接続をまず設定する必要があります (「wvdialconf を使った代替 PPP 接続」参照下さい)。さらに、第1番目の PPP デバイス ppp0 のための "/etc/network/interfaces" ファイルのエントリーを次のように追加します。

iface ppp0 inet wvdial

PPPoE によってサービスされる直接 WAN に接続した PC の場合、以前説明したように PPPoE 接続を設定する必要があります (「pppoeconf を使った PPPoE 接続」参照下さい)。さらに、第1番目の PPPoE デバイス eth0 のための "/etc/network/interfaces" ファイルのエントリーを次のように追加します。

allow-hotplug eth0
iface eth0 inet manual
 pre-up /sbin/ifconfig eth0 up
 up ifup ppp0=dsl
 down ifdown ppp0=dsl
 post-down /sbin/ifconfig eth0 down
# The following is used internally only
iface dsl inet ppp
 provider dsl-provider

ifupdown パッケージの機能は、上級知識を使うと「ifupdown を使った基本的なネットワーク設定 (旧来)」に書かれているよりも向上します。

ここに記述されている機能は全く任意のものです。著者自身、怠け者で面倒な事が嫌いなために、ここに書かれたことを使うことは滅多にありません。

[注意] 注意

「ifupdown を使った基本的なネットワーク設定 (旧来)」に書かれた情報でネットワーク接続をうまく設定できないのに、次の情報を使うと状況は更に悪くなります。

ifplugd パッケージはイーサーネット接続のみを管理する旧式の自動ネットワーク設定ツールです。これによって可動 PC 等のイーサーネットケーブルの脱着問題を解決します。もし NetworkManagerWicd (「デスクトップのためのモダンネットワーク設定」参照下さい) がインストールされている場合は、このパッケージは必要ありません。

このパッケージはデーモンとして実行され、auto とか allow-hotplug という機能 (表5.10「"/etc/network/interfaces" のスタンザのリスト」) を置き換え、インターフェースがネットワークに繋がれるとインターフェースを起動します。

例えば eth0 という内部イーサーネットポートに対する ifplugd パッケージの利用方法は次です。

  1. "/etc/network/interfaces" の中のスタンザを削除しましょう: "auto eth0" または "allow-hotplug eth0"、

  2. "/etc/network/interfaces" の中のスタンザを残しましょう: "iface eth0 inet …" と "mapping …"、

  3. ifplugd パッケージをインストールします。

  4. "sudo dpkg-reconfigure ifplugd" の実行します。

  5. eth0 を"ifplugd により監視される静的インターフェース" とします。

こうするとお望みどおりのネットワーク設定が機能します。

  • 電源投入もしくはハードウエアーの発見時に、インターフェースは自動的に起動されます。

    • 長い DHCP のタイムアウトを待つことのない迅速なブートプロセス。

    • 適正な IPv4 アドレス無いまま起動された変なインターフェースが無いこと (「ifupdown のネットワーク設定状態」参照下さい)。

  • イーサーネットケーブルを発見時にインターフェースが起動されます。

  • イーサーネットケーブルを外して少し経った時点でインターフェースが自動的に停止されます。

  • イーサーネットケーブルを接続した時点でインターフェースが新規ネットワーク環境下で起動されます。

[ヒント] ヒント

ifplugd(8) コマンドの引数はインターフェースの再設定の遅延時間などの挙動を設定します。

物理的には単一のイーサーネットインターフェースは異なる IP アドレスをもつ複数の仮想インターフェースとして設定できます。いくつかの IP サブネットワークにインターフェースを繋ぐのが通常こうする目的です。例えば、単一ネットワークインターフェースを使った IP アドレスに基づく仮想ウェッブホスティングがその適用例です。

例えば、次を仮定します。

  • あなたのホスト上の単一のイーサーネットインターフェースが (ブロードバンドルーターではなく) イーサーネットハブに接続されています。

  • イーサーネットハブはインターネットと LAN ネットワークの両方に接続されています。

  • LAN ネットワークはサブネット 192.168.0.x/24 を使います。

  • あなたのホストはインターネットに関しては物理インターフェース eth0 を DHCP が提供する IP アドレスで使います。

  • あなたのホストは LAN に関しては仮想インターフェース eth0:0192.168.0.1 で使います。

このとき "/etc/network/interfaces" 中の次のスタンザがあなたのネットワークを設定します。

iface eth0 inet dhcp
 metric 0
iface eth0:0 inet static
 address 192.168.0.1
 netmask 255.255.255.0
 network 192.168.0.0
 metric 1
[注意] 注意

netfilter/iptables (「Netfilter インフラ」参照下さい) を使ってネットワークアドレス変換 (NAT) を使う上記設定例は単一インターフェースを使って LAN に対して安価なルーターを提供しますが、そのような設定を使ったのでは真のファイアーウォール能力はありません。2つの物理インターフェースと NAT を使ってインターネットからローカルネットワークをセキュアーするべきです。

ifupdownパッケージはネットワーク設定名とネットワークインターフェース名を使って上級ネットワーク設定をできるようにします。わたしは ifup(8)interfaces(5) とは少々異なる用語法をここでは使っています。


「簡略化されたコマンドシンタックス」中の基本的なネットワーク設定コマンドは、iface スタンザ中のネットワーク設定名のトークンと、"/etc/network/interfaces" 中のネットワークインターフェース名が一致している必要があります。

上級ネットワーク設定コマンドは次のような "/etc/network/interfaces" の中で、ネットワーク設定名とネットワークインターフェース名を区別を可能にします。


「"/etc/network/interfaces" の基本的なシンタックス」では複雑になるのを避けるために "/etc/network/interfaces" 中の mapping スタンザを説明しませんでした。このスタンザには次のシンタクスがあります。

mapping <interface_name_glob>
 script <script_name>
 map <script_input1>
 map <script_input2>
 map ...

上記は、<script_name> で指定される mapping スクリプトで設定の選択を自動化することで "/etc/network/interfaces" に上級機能を付与します。

次の実行を追いかけましょう。

$ sudo ifup eth0

"<interface_name_glob>" が"eth0" と一致する時に、この実行は自動的に eth0 を設定する次のコマンドの実行を引き起こします。

$ sudo ifup eth0=$(echo -e '<script_input1> \n <script_input2> \n ...' | <script_name> eth0)

ここで、"map" を含む行は任意で反復可です。

[注記] 注記

mapping スタンザのグロッブはシェルのファイル名グロブのように機能します (「シェルグロブ」参照下さい)。

「基本ネットワーク設定」でしたように "/etc/network/interfaces" ファイルを書き直すことなくいくつかのネットワーク設定間を手動で切り替える方法を次に示します。

アクセスする必要のある全てのネットワーク設定のついて、"/etc/network/interfaces" ファイル中に次に示すような個別のスタンザを作ります。

auto lo
iface lo inet loopback

iface config1 inet dhcp

iface config2 inet static
 address 192.168.11.100
 netmask 255.255.255.0
 gateway 192.168.11.1
 dns-domain example.com
 dns-nameservers 192.168.11.1

iface pppoe inet manual
 pre-up /sbin/ifconfig eth0 up
 up ifup ppp0=dsl
 down ifdown ppp0=dsl
 post-down /sbin/ifconfig eth0 down

# The following is used internally only
iface dsl inet ppp
 provider dsl-provider

iface pots inet ppp
 provider provider

iface の後にあるトークンのネットワーク設定名に、ネットワークインターフェース名のトークンを使っていないことに注目下さい。また、何らかのイベントの際にネットワークインターフェース eth0 を自動的に起動する auto スタンザも allow-hotplug スタンザもありません。

さあ、ネットワーク設定を切り替える準備完了です。

あなたの PC を DHCP が提供される LAN に移動します。次のようにしてネットワークインターフェース (物理インターフェース) eth0ネットワーク設定名 (論理インターフェース名) config1 を付与してそれを起動します。

$ sudo ifup eth0=config1
Password:
...

インターフェース eth0 が起動され、DHCP で設定され、LAN に接続されます。

$ sudo ifdown eth0=config1
...

インターフェース eth0 が停止され、LAN から切断されます。

あなたの PC を静的 IP が提供される LAN に移動します。次のようにしてネットワークインターフェース (物理インターフェース) eth0ネットワーク設定名 (論理インターフェース名) config2 を付与してそれを起動します。

$ sudo ifup eth0=config2
...

インターフェース eth0 が起動され、静的 IP で設定され、LAN に接続されます。dns-* で与えられる追加パラメーターが "/etc/resolv.conf" の内容を設定します。この "/etc/resolv.conf" はresolvconf パッケージがインストールされている方がうまく管理されます。

$ sudo ifdown eth0=config2
...

インターフェース eth0 が停止され、LAN から再度切断されます。

あなたの PC を PPPoE が提供されているサービスに繋がっている BB モデムのポートに移動します。次のようにしてネットワークインターフェース eth0ネットワーク設定pppoe を付与してそれを起動します。

$ sudo ifup eth0=pppoe
...

インターフェース eth0 が起動され、ISP に直接接続された PPPoE で設定されます。

$ sudo ifdown eth0=pppoe
...

インターフェース eth0 が停止され再切断されます。

あなたの PC を LAN や BB モデムのない POTS とモデムを使っている場所に移動します。次のようにしてネットワークインターフェース ppp0ネットワーク設定pots を付与してそれを起動します。

$ sudo ifup ppp0=pots
...

インターフェース ppp0 が起動され、PPP を使ってインターネットに接続されます。

$ sudo ifdown ppp0=pots
...

インターフェース ppp0 が停止され再切断されます。

ifupdown システムのネットワーク設定状態の現状は "/etc/network/run/ifstate" ファイルの内容で確認します。

[警告] 警告

複数のネットワークインターフェースがある場合には、eth*ppp* 等の最後の数字を調整する必要があります。

ifupdown システムはスクリプトに環境変数を引き渡して "/etc/network/*/" 中にインストールされたスクリプトを自動実行します。


各環境変数 "$IF_<OPTION>" は、対応する <option1> や <option2> オプションの名前に "$IF_" を付け、大文字に変換し、ハイホンを下線に変換し、英数字文字以外を捨てて作成されます。

[ヒント] ヒント

<address_family> や <method_name> や <option1> や <option2> に関しては「"/etc/network/interfaces" の基本的なシンタックス」を参照下さい。

ifupdown-extra パッケージ (「ifupdown-extra パッケージ」参照下さい) はこのような環境変数を使って ifupdown パッケージの機能拡張をします。ifmetric パッケージ (「ifmetric パッケージ」参照下さい) は "$IF_METRIC" 変数を通してメトリック値を設定する "/etc/network/if-up.d/ifmetric" スクリプトをインストールします。ネットワーク設定の自動選択の簡単で強力な枠組みを提供している guessnet パッケージ (「guessnet を使う mapping」参照下さい) もまたこれらを使います。

[注記] 注記

これらの環境変数を使うネットワーク設定スクリプトのより具体的な例に関しては、"/usr/share/doc/ifupdown/examples/*" 中の例示スクリプトや ifschemeifupdown-scripts-zg2 パッケージで使われているスクリプトを確認して下さい。このような追加スクリプトは基本的な ifupdown-extraguessnet パッケージと機能の重複があります。このような追加スクリプトをインストールしたら、干渉しないようにこのようなスクリプトをカスタム化するべきです。

「手動切り替え可能なネットワーク設定」に記述されたように手動で設定選択する代わりに、「mapping スタンザ」に記述された mapping メカニズムをつかってカスタムスクリプトでネットワーク設定を自動的に選択できます。

guessnet パッケージにより提供される guessnet-ifupdown(8) コマンドは mapping スクリプトとして使われるように設計されており、ifupdown システムを拡張する強力な枠組みを提供します。

  • iface スタンザの下の各ネットワーク設定毎に guessnet オプションの値としてテスト条件をリストします。

  • mapping は最初のエラーを返さない iface をネットワーク設定として選択します。

guessnet オプションは ifupdown システムにより実行されるスクリプトに追加の環境変数をエクスポートするだけなので、"/etc/network/interfaces" ファイルを mapping スクリプトと guessnet-ifupdown とオリジナルのネットワーク設定インフラである ifupdown とで重複して利用することで特に支障は起こりません。詳細は guessnet-ifupdown(8) を参照下さい。

[注記] 注記

"/etc/network/interfaces" 中に複数の guessnet オプション行が必要な時には、オプション行の開始文字列重複を ifupdown パッケージは許さないので、guessnet1guessnet2 等で始まるオプション行を使います。

次の低レベルネットワークコマンドは、ネットワーク設定を変更しないので安全に使えます。


[ヒント] ヒント

これらの低レベルネットワーク設定ツールは "/sbin/" 中にあります。"/sbin/ifconfig" 等のような完全コマンドパスを使うか、 "~/.bashrc" 中の "$PATH" リストに "/sbin" を追加する必要があるかもしれません。

一般的なネットワークの最適化は本書の射程外です。ここでは消費者用の接続に関する課題にのみ触れます。


最大送信単位 (MTU) 値は、ping(8) を"-M do" オプションとともに使って ICMP パケットをデーターサイズ 1500 (IP+ICMP ヘッダー分の28バイトを加えて) から始めて IP フラグメンテーションしない最大サイズを見つけることで実験的に決定できます。

例えば、次を試してみて下さい:

$ ping -c 1 -s $((1500-28)) -M do www.debian.org
PING www.debian.org (194.109.137.218) 1472(1500) bytes of data.
From 192.168.11.2 icmp_seq=1 Frag needed and DF set (mtu = 1454)

--- www.debian.org ping statistics ---
0 packets transmitted, 0 received, +1 errors

1500ではなく1452を試す

ping(8) が1454で成功するのを確認します。

このプロセスはパス MTU (PMTU) 発見 (RFC1191) で、tracepath(8) コマンドで自動化できます。

[ヒント] ヒント

PMTU 値が1454となる上記例は Asynchronous Transfer Mode (ATM) をバックボーンネットワークとして使い顧客を PPPoE でサービスしていた FTTP プロバイダーの場合でした。実際の PMTU 値はあなたの環境に依存します。例えば私の新しい FTTP プロバイダーの場合は1500です。


これらの基本的なガイドラインに加えて、次を覚えておきます。

  • 何らかのトンネル手法 (VPN等) を使うと、それらのオーバーヘッドのために最適 MTU を更に減らすかもしれません。

  • MTU 値は実験的に決定される PMTU 値を越すべきではありません。

  • もし他の制約条件を満たすなら、MTU 値は一般的に大きい方がいいです。

MTU 値をそのデフォールトの1500から1454に設定する例を次に示します。

DHCP (「DHCP サービスを受けるネットワークインターフェース」参照下さい) の場合、"/etc/network/interfaces" 中の該当する iface スタンザ行を次と交換する事ができます。

iface eth0 inet dhcp
 pre-up /sbin/ifconfig $IFACE mtu 1454

静的 IP (「静的 IP を使うネットワークインターフェース」参照下さい) の場合、"/etc/network/interfaces" 中の該当する iface スタンザ行を次と交換する事ができます。

iface eth0 inet static
 address 192.168.11.100
 netmask 255.255.255.0
 gateway 192.168.11.1
 mtu 1454
 dns-domain example.com
 dns-nameservers 192.168.11.1

直接の PPPoE (「pppoeconf を使った PPPoE 接続」参照下さい) の場合、"/etc/ppp/peers/dsl-provider" 中の該当する "mtu" 行を次と交換する事ができます。

mtu 1454

最大セグメントサイズ (MSS) はパケットサイズの代替尺度として使われます。MSS と MTU の関係は次です。

  • IPv4 ではMSS = MTU - 40

  • IPv6 ではMSS = MTU - 60

[注記] 注記

iptables(8) (「Netfilter インフラ」参照下さい) を使う最適化は MSS を使ってパッケットサイズを制約できるのでルーターとして有用です。iptables(8) 中の "TCPMSS" を参照下さい。

現代的な高帯域でレイテンシーの大きな WAN では、TCP のスループットは TCP バッファーサイズパラメーターを "TCP Tuning Guide" や "TCP tuning" に書かれている手順で調整することで最大化できます。今のところ現在の Debian のデフォールトは高速の 1G bps の FTTP サービスでつながっている私の LAN でも十分機能しています。

NetfilterLinux カーネルのモジュール (「カーネルモジュール初期化」参照下さい) を利用するステートフルファイアーウォールネットワークアドレス変換 (NAT) のインフラを提供します。


netfilter のユーザー空間の主プログラムは iptables(8) です。シェルから対話形式で手動で netfilter を設定し、その状態を iptables-save(8) で保存し、iptables-restore(8) を使って init スクリプト経由でシステムのリブート時に回復できます。

shorewall のような設定ヘルパースクリプトはこの過程を簡単にします。

http://www.netfilter.org/documentation/ (または "/usr/share/doc/iptables/html/" 中) の文書を参照下さい。

[ヒント] ヒント

これらは Linux 2.4 のために書かれたとはいえ、iptables(8) コマンドも netfilter カーネル機能も現在の Linux 2.63.x カーネルシリーズにもあてはまります。