目次
ヒント | |
---|---|
現代的な Debian に特化したネットワーク設定のガイドは The Debian Administrator's Handbook — Configuring the Network を参照下さい。 |
現代的な Debian システムの基本的ネットワークインフラをレビューします。
表5.1 GUI のネットワーク設定ツール
パッケージ | ポプコン | サイズ | タイプ | 説明 |
---|---|---|---|---|
network-manager
|
V:392, I:459 | 15542 | 設定::NM | NetworkManager (デーモン): ネットワークを自動管理 |
network-manager-gnome
|
V:121, I:369 | 5583 | 設定::NM | NetworkManager (GNOME フロントエンド) |
netplan.io
|
V:1, I:5 | 319 | 設定::NM+networkd | Netplan (生成器): NetworkManager と systemd-networkd バックエンド用の統一的で宣言的なインターフェース |
ifupdown
|
V:608, I:979 | 199 | 設定::ifupdown | ネットワークを接続したり切断したりする標準化されたツール (Debian 特定) |
isc-dhcp-client
|
V:217, I:981 | 2875 | 設定::低レベル | DHCP クライアント |
pppoeconf
|
V:0, I:5 | 186 | 設定::ヘルパー | PPPoE コネクションの設定ヘルパー |
wpasupplicant
|
V:353, I:513 | 3862 | 設定::ヘルパー | WPA と WPA2 (IEEE 802.11i) のためのクライアントサポート |
wpagui
|
V:0, I:1 | 774 | 設定::ヘルパー | wpa_supplicant の Qt GUI クライアント |
wireless-tools
|
V:179, I:244 | 292 | 設定::ヘルパー | Linux のワイヤレス拡張を操作するツール |
iw
|
V:34, I:475 | 302 | 設定::ヘルパー | Linux のワイヤレスデバイスを設定するツール |
iproute2
|
V:736, I:972 | 3606 | 設定::iproute2 | iproute2、IPv6 や他の高度なネットワーク設定:
ip (8) や tc (8) 等 |
iptables
|
V:319, I:718 | 2414 | 設定::Netfilter | パケットフィルターと NAT のための管理ツール (Netfilter) |
nftables
|
V:106, I:701 | 182 | 設定::Netfilter | パケットフィルターと NAT のための管理ツール (Netfilter) ({ip,ip6,arp,eb}tables の後継) |
iputils-ping
|
V:194, I:997 | 122 | テスト | ホスト名か IP アドレスによってリモートホストのネットワークからの到達性をテスト (旧来、GNU) |
iputils-arping
|
V:3, I:36 | 50 | テスト | ARP アドレスによって特定されるリモートホストのネットワークからの到達性をテスト |
iputils-tracepath
|
V:2, I:30 | 47 | テスト | リモートホストへのネットワークパスを追跡 |
ethtool
|
V:95, I:267 | 739 | テスト | Ethernet デバイス設定の表示と変更 |
mtr-tiny
|
V:5, I:46 | 156 | テスト::低レベル | リモートホストへのネットワークパスを追跡するツール (curses) |
mtr
|
V:4, I:41 | 209 | テスト::低レベル | リモートホストへのネットワークパスを追跡するツール (curses と GTK) |
gnome-nettool
|
V:0, I:17 | 2492 | テスト::低レベル | 共通のネットワーク情報操作のためのツール (GNOME) |
nmap
|
V:25, I:199 | 4498 | テスト::低レベル | ネットワークマッパー / ポートスキャナー (Nmap、コンソール) |
tcpdump
|
V:17, I:175 | 1340 | テスト::低レベル | ネットワークトラフィックアナライザー (Tcpdump、コンソール) |
wireshark
|
I:45 | 10417 | テスト::低レベル | ネットワークトラフィックアナライザー (Wireshark、GTK) |
tshark
|
V:2, I:25 | 400 | テスト::低レベル | ネットワークトラフィックアナライザー (コンソール) |
tcptrace
|
V:0, I:2 | 401 | テスト::低レベル | tcpdump の出力から接続状況のまとめを作成 |
snort
|
V:0, I:0 | 2203 | テスト::低レベル | 柔軟なネットワーク侵入検知システム (Snort) |
ntopng
|
V:0, I:1 | 15904 | テスト::低レベル | ネットワークの使用状況をウェッブブラウザーで表示 |
dnsutils
|
V:16, I:280 | 276 | テスト::低レベル | BIND によって提供されるネットワーククライアント:
nslookup (8) と nsupdate (8) と
dig (8) |
dlint
|
V:0, I:3 | 53 | テスト::低レベル | ネームサーバーの閲覧で DNS のゾーン情報をチェック |
dnstracer
|
V:0, I:1 | 59 | テスト::低レベル | DNS サーバーをその源流まで追跡 |
ホスト名の解決もまた、現在 NSS (ネームサービススイッチ、Name Service Switch) メカニズムによってサポートされています。この解決の流れは次です。
"hosts: files dns
" のようなスタンザのある
"/etc/nsswitch.conf
"
ファイルがホスト名の解消の順序を規定します。(これは、"/etc/host.conf
" ファイル中の
"order
" スタンザの機能を置換します。)
files
メソッドが最初に呼び出されます。ホスト名が
"/etc/hosts
"
ファイルに見つかると、それに対応する全ての有効アドレスを返し終了します。("/etc/host.conf
"
ファイルは "multi on
" を含みます。)
dns
メソッドが発動されます。"/etc/resolv.conf
"
ファイルで識別されるインターネットドメイン名システム
(DNS) への問い合わせでホスト名が見つかれば、それに関する全ての有効アドレスを返します。
典型的なワークステーションでは、ホスト名は例えば "host_name"
と設定され、オプショナルなドメイン名は空文字列に設定されてインストールされているかもしてません。その場合、"/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 ワークステーションの場合、基本的な files
や
dns
法に加えて Multicast
DNS (mDNS) 経由でホスト名を解決する事ができます。
Avahi は Debian で Multicast DNS サービスの探索の枠組みを提供します。
libnss-mdns
プラグインパッケージが GNU C ライブラリー (glibc) の GNU Name
Service Switch (NSS) 機能に mDNS 経由のホスト名解決を提供します。
"/etc/nsswitch.conf
" ファイルには "hosts: files
mdns4_minimal [NOTFOUND=return] dns
"
のようなスタンザがあるべきです(他の設定は/usr/share/doc/libnss-mdns/README.Debian
を参照下さい)。
".local" で終わる 擬似-top-level domain が末尾についたホスト名は、IPv4
アドレス "224.0.0.251
" か IPv6 アドレス
"FF02::FB
" から、マルチキャスト UDP パケット中の mDNS
クエリーメッセージ送ることで解決されます。
注記 | |
---|---|
ドメイン名システムにおける ジェネリックトップレベルドメイン (gTLD) の拡張が進行中です。LAN内のみで使うドメイン名を選ぶ際に名前衝突に注意が必要です。 |
注記 | |
---|---|
|
systemd は "enp0s25
" のような
"予測可能なネットワークインターフェース名"
を用います。
rfc1918 によってローカルエリアネットワーク (LAN) での使用に予約されている各クラス毎の IPv4 32ビットアドレス範囲を確認します。これらのアドレスは本来のインターネット上のアドレスとかち合う事が無いことが保証されています。
注記 | |
---|---|
コロンのついた IP アドレスは IPv6 アドレスです。たとえば
" |
表5.2 ネットワークアドレス範囲のリスト
クラス | ネットワークアドレス | ネットマスク | ネットマスク / ビット | サブネットの数 |
---|---|---|---|---|
A | 10.x.x.x | 255.0.0.0 | /8 | 1 |
B | 172.16.x.x — 172.31.x.x | 255.255.0.0 | /16 | 16 |
C | 192.168.0.x — 192.168.255.x | 255.255.255.0 | /24 | 256 |
注記 | |
---|---|
これらのアドレス内の1つがホストに付与されている場合、そのホストはインターネットに直接アクセスせず、各サービスのプロキシとなるかネットワークアドレス変換 (NAT) をするゲートウエーを通してアクセスしなければいけません。ブロードバンドルーターは消費者 LAN 環境のために通常 NAT を行います。 |
Debian システムによってほとんどのハードウエアーデバイスはサポートされていますが、一部のネットワークデバイスはそのサポートのために DFSG non-free のファームウエアーが必要です。「ハードウエアードライバーとファームウエアー」を参照下さい。
systemd
下の現代的な Debian
デスクトップ環境では、ネットワークインターフェースは、lo
が
"networking.service
" で、他のインターフェースが
"NetworkManager.service
" で典型的には初期化されます。
Debian では、NetworkManager (NM) (network-manager と関連パッケージ) 等の管理デーモン経由でネットワーク接続の管理ができます。
注記 | |
---|---|
サーバーにはこの様な自動ネットワーク設定を使わないで下さい。これらはラップトップ上のモービルデスクトップを主対象としています。 |
これらの現代的なネットワーク設定ツールは旧来の "ifupdown
" パッケージやその
"/etc/network/interfaces
"
設定ファイルとの競合を避けるように適正に設定する必要があります。
Debian における NM の公式のドキュメンテーションは
"/usr/share/doc/network-manager/README.Debian
" にあります。
デスクトップのための現代的ネットワーク設定の要点は以下です。
以下のようにして、例えば foo
というデスクトップユーザーを
"netdev
" グループに属するようにします。(GNOME や KDE のような現代的デスクトップ環境の下では
D-bus 経由でそれを自動的にするのも一つの方法です。)
$ sudo usermod -a -G foo netdev
"/etc/network/interfaces
" の設定を以下のようにできるだけ簡単にします。
auto lo iface lo inet loopback
以下のようにして NM を再起動します。
$ sudo systemctl restart network-manager
GUI 経由でネットワークを設定します。
注記 | |
---|---|
|
ヒント | |
---|---|
NM
のネットワーク設定能力を拡張したい場合には、 |
上記とは異なり、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
クラウドのための現代的なネットワーク設定は cloud-init
と
netplan.io
パッケージを使っているかもしれません (「クラウドシステムの初期化」を参照下さい)。
netplan.io
パッケージは ネットワーク設定バックエンドとして
systemd-networkd
と NetworkManager
をサポートし、宣言的な YAML データーを使ったネットワーク設定を可能にします。
YAMLを変更する時は:
"netplan generate
" コマンドを実行して、YAMLからすべての必要なバックエンド設定を生成します。
"netplan apply
" コマンドを実行して、生成される設定をバックエンドに適用します。
"Netplan
ドキュメンテーション"とnetplan
(5) と
netplan-generate
(8) と netplan-apply
(8)
を参照下さい。
更に、cloud-init
がどのようにしてnetplan.io
の設定を代替データーソースを使って一体化するのかは "Cloud-init
ドキュメンテーション" (特に "設定ソース"と
"Netplan パススルー") を参照下さい。
DHCP クライアントの設定はデーターソースファイル
"/etc/systemd/network/dhcp.network
" を作成することで設定できます:
network: version: 2 ethernets: all-en: match: name: "en*" dhcp4: true dhcp6: true
静的ネットワーク設定はデーターソースファイル
"/etc/systemd/network/static.network
" を作成することで設定できます:
network: version: 2 ethernets: eth0: addresses: - 192.168.0.15/24 routes: - to: default via: 192.168.0.1
Linux における低水準のネットワークを設定するには iproute2 プログラム
(ip
(8)、…) を用います。
Iproute2 コマンドは低水準ネットワーク設定の完全な機能を提供します。旧式の net-tools コマンドと新しい iproute2 コマンド等との翻訳表を次に示します。
表5.3 旧式の net-tools
コマンドと新しい iproute2
コマンド等との翻訳表
旧式の net-tools | 新しい iproute2 等 | 操作 |
---|---|---|
ifconfig (8) |
ip addr |
デバイスのプロトコル (IP または IPv6) アドレス |
route (8) |
ip route |
ルーティングテーブル |
arp (8) |
ip neigh |
ARP または NDISC キャッシュ項目 |
ipmaddr |
ip maddr |
マルチキャストアドレス |
iptunnel |
ip tunnel |
IP 経由トンネル |
nameif (8) |
ifrename (8) |
MAC アドレスに基づきネットワークインターフェースを命名 |
mii-tool (8) |
ethtool (8) |
イーサーネットデバイスの設定 |
ip
(8) とLinux Advanced Routing &
Traffic Controlを参照下さい。
以下の低レベルネットワークコマンドは、ネットワーク設定を変更しないので安全に使えます。
表5.4 低レベルネットワークコマンドのリスト
コマンド | 説明 |
---|---|
ip addr show |
アクティブなインターフェースのリンクとアドレスの状態を表示 |
route -n |
数字を使ったアドレスで全てのルーティングテーブルを表示 |
ip route show |
数字を使ったアドレスで全てのルーティングテーブルを表示 |
arp |
ARP キャッシュテーブルの現状の内容を表示 |
ip neigh |
ARP キャッシュテーブルの現状の内容を表示 |
plog |
ppp デーモンのログを表示 |
ping yahoo.com |
"yahoo.com " までのインターネット接続の確認 |
whois yahoo.com |
ドメインデーターベースに "yahoo.com " を誰が登録したかを確認 |
traceroute yahoo.com |
"yahoo.com " までのインターネット接続の追跡 |
tracepath yahoo.com |
"yahoo.com " までのインターネット接続の追跡 |
mtr yahoo.com |
"yahoo.com " までのインターネット接続の追跡 (繰り返し) |
dig [@dns-server.com] example.com [{a|mx|any}] |
"example.com " のDNS レコードを
"dns-server.com " で"a " か
"mx " か "any " かのレコードに関して確認します。 |
iptables -L -n |
パケットフィルターの確認 |
netstat -a |
オープンポートの発見 |
netstat -l --inet |
聴取中のポートの発見 |
netstat -ln --tcp |
聴取中の TCP ポートの発見 (数字) |
dlint example.com |
"examle.com " の DNS ゾーン情報を確認 |
ヒント | |
---|---|
これらの低レベルネットワーク設定ツールは " |
一般的なネットワークの最適化は本書の射程外です。ここでは消費者用の接続に関する課題にのみ触れます。
表5.5 ネットワーク最適化ツールのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
iftop
|
V:7, I:100 | 93 | ネットワークインターフェースの帯域利用情報を表示 |
iperf
|
V:3, I:43 | 360 | インターネットプロトコルのバンド幅測定ツール |
ifstat
|
V:0, I:7 | 60 | インターフェース統計モニター |
bmon
|
V:1, I:18 | 144 | 可搬型バンド幅モニター兼速度推定機 |
ethstatus
|
V:0, I:3 | 40 | ネットワークデバイスのスループットを迅速に測定するスクリプト |
bing
|
V:0, I:0 | 80 | 経験則的確率バンド幅試験ソフト |
bwm-ng
|
V:1, I:13 | 95 | 簡単軽量のコンソール式のバンド幅モニター |
ethstats
|
V:0, I:0 | 23 | コンソール式のイーサーネット統計モニター |
ipfm
|
V:0, I:0 | 82 | 帯域分析ツール |
NM は普通最適の 最大送信単位 (MTU: Maximum Transmission Unit) を自動的に設定します。
場合によっては、ping
(8) を "-M do
"
オプションとともに用いて多くのデーターパケットサイズの ICMP パケットを送る実験後 MTU を手動で設定したいと考えるかもしれません。MTU は
IP フラグメンテーションを起こさずおくれる最大のデーターパケットサイズに IPv4 の場合は 28 バイト IPv6 の場合は 48
バイト足したものです。例えば以下では IPv4 接続の場合は 1460 と IPv6 接続の場合は 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)
コマンドで自動化できます。
表5.6 最適 MTU 値の基本的なガイドライン
ネットワーク環境 | MTU | 理由 |
---|---|---|
ダイヤルアップ接続 (IP: PPP) | 576 | 標準 |
イーサーネット接続 (IP: DHCP または固定) | 1500 | 標準かつデフォールト |
これらの基本的なガイドラインに加えて、次を覚えておきます。
何らかのトンネル手法 (VPN等) を使うと、それらのオーバーヘッドのために最適 MTU を更に減らすかもしれません。
MTU 値は実験的に決定される PMTU 値を越すべきではありません。
もし他の制約条件を満たすなら、MTU 値は一般的に大きい方がいいです。
最大セグメントサイズ (MSS) はパケットサイズの代替尺度として使われます。MSS と MTU の関係は次です。
IPv4 ではMSS = MTU - 40
IPv6 ではMSS = MTU - 60
注記 | |
---|---|
|
現代的な高帯域でレイテンシーの大きな WAN では、TCP のスループットは TCP バッファーサイズパラメーターを "TCP tuning" にある手順で調整することで最大化できます。今のところ現在の Debian のデフォールトは高速の 1G bps の FTTP サービスでつながっている私の LAN でも十分機能しています。
Netfilter はLinux カーネルのモジュール (「カーネルモジュール初期化」を参照下さい) を利用するステートフルファイアーウォールとネットワークアドレス変換 (NAT) のインフラを提供します。
表5.7 ファイアーウォールツールのリスト
netfilter のユーザー空間の主プログラムは
iptables
(8) です。シェルから対話形式で手動で netfilter を設定し、その状態を
iptables-save
(8)
で保存し、iptables-restore
(8) を使って init
スクリプト経由でシステムのリブート時に回復できます。
shorewall のような設定ヘルパースクリプトはこの過程を簡単にします。
Netfilter Documentation (または
"/usr/share/doc/iptables/html/
" 中) の文書を参照下さい。
ヒント | |
---|---|
これらは Linux 2.4
のために書かれたとはいえ、 |