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

目次

5.1. 基本的ネットワークインフラ
5.1.1. ホスト名の解決
5.1.2. ネットワークインターフェース名
5.1.3. LAN のためのネットワークアドレス範囲
5.1.4. ネットワークデバイスサポート
5.2. デスクトップのためのモダンネットワーク設定
5.2.1. GUI のネットワーク設定ツール
5.3. GUI無しのモダンネットワーク設定
5.4. 低水準ネットワーク設定
5.4.1. Iproute2 コマンド
5.4.2. 安全な低レベルネットワーク操作
5.5. ネットワークの最適化
5.5.1. 最適 MTU の発見
5.5.2. WAN TCP の最適化
5.6. Netfilter インフラ
[ヒント] ヒント

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

[ヒント] ヒント

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

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

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

パッケージ ポプコン サイズ タイプ 説明
network-manager V:369, I:440 14500 設定::NM NetworkManager (デーモン): ネットワークを自動管理
network-manager-gnome V:126, I:371 5350 設定::NM NetworkManager (GNOME フロントエンド)
ifupdown V:584, I:987 217 設定::ifupdown ネットワークを接続したり切断したりする標準化されたツール (Debian 特定)
isc-dhcp-client V:219, I:982 689 設定::低レベル DHCP クライアント
pppoeconf V:0, I:7 192 設定::ヘルパー PPPoE コネクションの設定ヘルパー
wpasupplicant V:341, I:503 3817 , , WPA と WPA2 (IEEE 802.11i) のためのクライアントサポート
wpagui V:0, I:2 800 , , wpa_supplicant の Qt GUI クライアント
wireless-tools V:176, I:239 297 , , Linux のワイヤレス拡張を操作するツール
iw V:223, I:477 294 , , Linux のワイヤレスデバイスを設定するツール
iproute2 V:701, I:949 3294 設定::iproute2 iproute2、IPv6 や他の上級ネットワーク設定: ip(8) や tc(8) 等
iptables V:306, I:942 2521 設定::Netfilter パケットフィルターと NAT のための管理ツール (Netfilter)
iputils-ping V:206, I:997 118 テスト ホスト名IP アドレスによってリモートホストのネットワークからの到達性をテスト (旧来、GNU)
iputils-arping V:5, I:78 60 テスト ARP アドレスによって特定されるリモートホストのネットワークからの到達性をテスト
iputils-tracepath V:4, I:46 52 テスト リモートホストへのネットワークパスを追跡
ethtool V:96, I:267 631 テスト Ethernet デバイス設定の表示と変更
mtr-tiny V:6, I:52 161 テスト::低レベル リモートホストへのネットワークパスを追跡するツール (curses)
mtr V:4, I:44 214 , , リモートホストへのネットワークパスを追跡するツール (curses と GTK)
gnome-nettool V:1, I:31 2110 , , 共通のネットワーク情報操作のためのツール (GNOME)
nmap V:28, I:231 4452 , , ネットワークマッパー / ポートスキャナー (Nmap、コンソール)
zenmap V:0, I:4 2939 , , ネットワークマッパー / ポートスキャナー (GTK)
tcpdump V:18, I:196 1330 , , ネットワークトラフィックアナライザー (Tcpdump、コンソール)
wireshark I:52 72 , , ネットワークトラフィックアナライザー (Wireshark、GTK)
tshark V:2, I:30 427 , , ネットワークトラフィックアナライザー (コンソール)
tcptrace V:0, I:2 401 , , tcpdump の出力から接続状況のまとめを作成
snort V:0, I:1 2206 , , 柔軟なネットワーク侵入検知システム (Snort)
ntopng V:1, I:1 969 , , ネットワークの使用状況をウェッブブラウザーで表示
dnsutils V:39, I:423 275 , , BIND によって提供されるネットワーククライアント: nslookup(8) と nsupdate(8) と dig(8)
dlint V:0, I:5 53 , , ネームサーバーの閲覧で DNS のゾーン情報をチェック
dnstracer V:0, I:1 60 , , 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     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

各行は 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内のみで使うドメイン名を選ぶ際に名前衝突に注意が必要です。

最近の systemd下の Debian デスクトップ環境では、ネットワークインターフェースは、lo が "networking.service" で、他のインターフェースが "NetworkManager.service" で通常初期化されます。

Debian では、NetworkManager (NM) (network-manager と関連パッケージ) 等の管理デーモン経由でネットワーク接続の管理ができます。

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

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

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

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

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

[注記] 注記

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

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

Debian における NM の公式のドキュメンテーションは "/usr/share/doc/network-manager/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 を再起動します。

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

[注記] 注記

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

[ヒント] ヒント

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

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

これによりGUI無しのモダンネットワーク設定ができます。

DHCP クライアントの設定は "/etc/systemd/network/dhcp.network" を作成することで設定できます。例えば:

[Match]
Name=en*

[Network]
DHCP=yes

静的ネットワーク設定は "/etc/systemd/network/static.network" を作成することで設定できます。例えば:

[Match]
Name=en*

[Network]
Address=192.168.0.15/24
Gateway=192.168.0.1

Linux における低水準のネットワークを設定するには iproute2 プログラム (ip(8)、…) を用います。

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


[ヒント] ヒント

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

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


NM normally sets optimal Maximum Transmission Unit (MTU) automatically.

In some occasion, you may wish to set MTU manually after experiments with ping(8) with "-M do" option to send a ICMP packet with various data packet size. MTU is the maximum succeeding data packet size without IP fragmentation plus 28 bytes for the IPv4 and plus 48 bytes for the IPv6. For example the following finds MTU for IPv4 connection to be 1460 and MTU for IPv6 connection to be 1500.

$ ping -4 -c 1 -s $((1500-28)) -M do www.debian.org
PING  (149.20.4.15) 1472(1500) bytes of data.
ping: local error: message too long, mtu=1460

---  ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

$ ping -4 -c 1 -s $((1460-28)) -M do www.debian.org
PING  (130.89.148.77) 1432(1460) bytes of data.
1440 bytes from klecker-misc.debian.org (130.89.148.77): icmp_seq=1 ttl=50 time=325 ms

---  ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 325.318/325.318/325.318/0.000 ms
$ ping -6 -c 1 -s $((1500-48)) -M do www.debian.org
PING www.debian.org(mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e)) 1452 data bytes
1460 bytes from mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e): icmp_seq=1 ttl=47 time=191 ms

--- www.debian.org ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 191.332/191.332/191.332/0.000 ms

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


In addition to these basic guide lines, you should know the following.

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

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

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

最大セグメントサイズ (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 カーネルシリーズにもあてはまります。