いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.193 / 読者数:1715名

こんばんは、うすだです。

お正月も終わり、すでに1月半ばにさしかかっていますが、 順調にお仕事をされていますでしょうか。

さて、新年を迎えてまずやるべきことと言いますと、筆頭に挙げられるのは、 今年の抱負を高らかに宣言ことではないかと思います。

わたくしの場合、いろいろと切羽詰まることが多いのですが、 ギリギリになるまで焦らなくなっているのをなんとかしたいと思っています。

もちろん、ギリギリになるとあわてますが、 いままでなんとかなってきたことが多かったためでしょうか、 そのスイッチがなかなか入らなくなってきています。

いつか痛い目にあう前にやめたいと思っているのですが、 悪い習慣というものはなかなかやめられないものですね。
というわけで、以下の記事をたよりに、今年からやめようと思います。

やめたいのにやめられない、ちょっとした悪い癖をやめるための2つのコツ
http://www.lifehacker.jp/2011/01/110106badhabits.html

超大雑把にまとめますと、そのコツとは、「やめる」と公言することと、 ちょっとずつ新しい習慣に差し替えていくこと、だそうです。
(詳しくは、上記をじっくりご覧くださいませ。)

なるほどーと思ったのですが、これを使ってやめるのは、 いまさらですが少々無理があるような気がしております。
(着手する時期や焦り具合などの判断基準が曖昧ですので…。)

どちらかというと、中学生くらいから続いている、鼻を掻く癖のほうが、 ストレートに適用できそうです。
(鼻を掻いていたらアウトなので、かなりわかりやすいですよね。)

なにもしないという選択は極力避けたいので、 まずは鼻を掻く癖をやめることから始めようと思いました。

抱負が変わってしまいましたが、新年一発目、はりきってまいります。

今回のお題 - IPv6 をいまさら始めてみる

唐突ですが、わたしの最近のマイブーム(死語?)は、「IPv6」です。

20世紀末くらいから、 IPv4アドレスは枯渇するのでIPv6に切り替えよう的なことが言われており、 そのたびに IPv6 をやらねばと思っていました。

そんな波が繰り替えされていましたが、 今年こそはそのビッグウェーブが到来するのではないか、と(勝手に)思っている次第です。

というわけで、IPv6 をご存知の貴兄にはたいへん申し訳ありませんが、 今回は IPv6 を取り上げてみたいと思います。

最初に、最低限未満のことを、さらっと述べさせていただきます。
そして、実際に IPv6 を使ってみます。
全体的に、超入門的な空気が漂っていますが、ご了承くださいませ。

まずは IPv6 アドレスの表記から

現在使われている IPv4 のアドレスのサイズは、32ビットです。
8ビット…つまり1バイト(0〜255)毎に「.」で区切って表します。

たとえば、www.usupi.org のIPアドレスは、115.146.17.161 です。

  $ host www.usupi.org
  www.usupi.org has address 115.146.17.161

 

これに対し、IPv6 アドレスのサイズは、128ビットです。
IPv4 アドレスの4倍、つまり16バイトもありますので、2バイト毎に「:」で区切り、 それぞれを16進数(0〜ffff)で表します。

たとえば、www.kame.net のIPv6アドレスは、以下の通りです。

  $ host -t AAAA www.kame.net
  www.kame.net is an alias for orange.kame.net.
  orange.kame.net has IPv6 address 2001:200:dff:fff1:216:3eff:feb1:44d7

「2001:200:dff:fff1:216:3eff:feb1:44d7」です。…な、長いですね…。

いちいち8個も書くのは大変ですので、連続する 0 は省略できます。
たとえば、www.v6pc.jp の場合、「2001:218:2001:3003:0:0:0:66c」ですが、 間の 0 をすっ飛ばして、「2001:208:2001:3003::66c」と表せます。

  $ host -t AAAA www.v6pc.jp
  www.v6pc.jp is an alias for v6pc.jp.
  v6pc.jp has IPv6 address 2001:218:2001:3003::66c

ただし、連続する 0 が複数箇所ある場合は、1箇所しか省略できません。
(いくつ省略しているかわからなくなるためです。)

IPv6 アドレスの種類

IPv4アドレスにいくつかの種類があったように、IPv6アドレスにも複数の種類があります。

IPv4アドレスの場合、 インターネットに接続されていないネットワークで使うための「プライベートアドレス」や、 複数のマシンへ同時に送信するための「マルチキャストアドレス」があります。
また、自分自身を指す「ループバックアドレス」というものもあります。

  [プライベートアドレス (RFC1918)]
    クラスA: 10.0.0.0〜10.255.255.255     (10.0.0.0/8)
    クラスB: 172.16.0.0〜172.31.255.255   (172.16.0.0/12)
    クラスC: 192.168.0.0〜192.168.255.255 (192.168.0.0/16)
  [マルチキャストアドレス (RFC1112)]
    クラスD: 224.0.0.0〜239.255.255.255   (224.0.0.0/4)
  [ループバックアドレス (RFC3330)]
    127.0.0.1                             (127.0.0.0/8)

これら以外は、インターネットで使用される「グローバルアドレス」だと思って、 だいたいは間違いないと思います。
(RFC3330 に、(上記も含めた)特別なアドレスが載っています。)

 

IPv6 にも、同様の種類があります。
プライベートアドレスは、 ルータをまたがずサブネット内だけで通用する「リンクローカルアドレス」と、 ルータをまたいで使用できる「ローカルアドレス」に分かれます。
(ちなみに、IPv4 にもリンクローカルアドレスはありました。(RFC3927))

  [グローバルアドレス (RFC4291)]
    2000::〜3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff (2000::/3)
  [ローカルアドレス (RFC4193)]
    fc00::〜fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff (fc00::/7)
  [リンクローカルアドレス (RFC4291)]
    fe80::〜febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff (fe80::/10)
  [サイトローカルアドレス (廃止)]
    fec0::〜feff:ffff:ffff:ffff:ffff:ffff:ffff:ffff (fec0::/10)
  [マルチキャストアドレス (RFC4291,RFC3306)]
    ff00::〜ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff (ff00::/8)
  [ループバックアドレス (RFC4291)]
    ::1

他にも、IPv4アドレスを表すためのアドレスなどがありますが、ここでは割愛します。

とりあえずリンクローカルアドレスでやってみる

リンクローカルアドレスは、 MACアドレスなどから一意に決まるよう設計されていますので、 ご使用のLinuxがIPv6に対応していれば、瞬時に使用できると思います。
(詳しくは、RFC4291 の 2.5.6. などをご覧ください。)

試しに、ifconfigコマンドを実行してみてください。

  $ ifconfig eth0
  eth0    Link encap:イーサネット  ハードウェアアドレス (秘密)
          inetアドレス:192.168.1.211  (略)
          inet6アドレス: fe80::201:02ff:fe03:0405/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
  ...

「fe80」で始まるリンクローカルアドレスが割り振られているはずです。

実際に通信できるかどうか確認するには、 IPv4の場合「ping」コマンドを使用しましたが、 IPv6 の場合は「ping6」コマンドを使用します。

それでは、別の(IPv6に対応している)マシンから、ping6コマンドを使用して、 上記アドレスとの通信を試みてみましょう。

  $ ping6 fe80::201:02ff:fe03:0405
  connect: Invalid argument

…あ、叱られてしまいました。
リンクローカルアドレスは、どのインターフェースに対しても有効です。
そこで、インターフェースを指定する必要があります。
そのためには、「-I」オプションを使用します。

  $ ping6 -I eth0 fe80::201:02ff:fe03:0405
  PING fe80::201:02ff:fe03:0405 from fe80::201:02ff:fe03:0406 \
  eth0: 56 data bytes
  64 bytes from fe80::201:02ff:fe03:0405: icmp_seq=1 ttl=64 time=0.289 ms
  64 bytes from fe80::201:02ff:fe03:0405: icmp_seq=2 ttl=64 time=0.541 ms
  ...

あるいは、IPv6アドレスの最後に「%インターフェース名」をつけます。

  $ ping6 fe80::201:02ff:fe03:0405%eth0
  ...

「ssh」や「telnet」などのコマンドの場合は、-I に相当するオプションがないので、 後者の「%」をつける方法で指定します。

  $ telnet fe80::201:02ff:fe03:0405%eth0 80
  ...

ローカルアドレスを設定する(手動編)

とはいえ、リンクローカルアドレスの場合、 インターフェースを指定する必要がありますし、 他のサブネットにアクセスできない制限があります。

というわけで、ローカルアドレスを設定してみましょう。
ローカルアドレスの内訳は、RFC4193 によると、以下の通りです。

7 bits1     40 bits       16 bits         64 bits      
PrefixLGlobal IDSubnet IDInterface ID

Prefix は、前述の通り 0xfc00::/7 です。
L は、いまのところ 1 を使用することになっています。
Global ID は、世界で一意となる識別子です。求め方は後述します。
Subnet ID は、組織内でネットワークを分ける際に使用する識別子です。
Interface ID は、リンクローカルアドレスの下位64ビットと同じです。

ここで、Global ID を、他とかち合わない一意な値に決められれば、 あとはサイト内で自由に扱えます。
といっても、Global ID は、どこかに登録申請して割り振ってもらう必要はなく、 まず重複しない計算式で求めればよいことになっています。

Global ID の計算方法は、以下の通りです。

  1. 現在時刻を64ビットのNTPフォーマットで取得する。
  2. EUI-64識別子を取得する。(リンクローカルアドレスの下位64ビット)
  3. 1. と 2. をつないだ 128ビットの SHA-1ダイジェストを計算する。
  4. 3. のダイジェストの下位40ビットを Global ID として使用する。

これを計算する安直スクリプトを、えいやーで書いてみました。
(正しいかどうか、結構不安ではありますが…。 Ubuntu10.10 と Fedora14 では少なくとも動作しました。)

#!/bin/sh
SEC=`ntptime | grep " time" | head -1 | \
      sed 's/^.*time \([^\.]*\)\.\([^\ ]*\).*$/0x\1, 0x\2/'`
EUI64=`ip addr show dev eth0 | grep fe80 | \
      sed 's/^.*fe80::\([^\/]*\)\/64.*$/0x\1/' | sed 's/:/, 0x/g'`
echo SHA-1: `perl -e "print pack \"N2n4\", $SEC, $EUI64" | \
      sha1sum - | awk '{print $1}'`

これをたとえば ipv6globalid.sh というファイル名で保存し、 実行権をつけて実行すると、以下のようになります。
(ネーミングセンスがないのは、いつものことだと思ってくださいまし。)

  $ chmod +x ipv6globalid.sh
  $ ./ipv6globalid.sh
  SHA-1: 1a41db4e6aab1e610f26f62811d46f4128b7be11

SHA-1ダイジェストの値が出力されますので、これの下位40ビットを使用してください。

上記の場合、Global ID は「4128b7be11」になります。
ですので、仮に Subnet ID を「0」とする場合、 このサイトで使用できるローカルアドレスは「fd41:28b7:be11::/64」になります。

そして、Interface ID は、先ほどの「201:02ff:fe03:0405」です。
ですので、最終的には、「fd41:28b7:be11::201:02ff:fe03:0405」というアドレスを、 このマシンに割り振ればよいことになります。

IPv6アドレスを設定するには、「ifconfig」コマンドを以下のように実行します。

  ifconfig eth0 inet6 add IPv6アドレス/プレフィックス長

ですので、上記アドレスを設定するには、以下のように実行します。

  $ sudo ifconfig eth0 inet6 add fd41:28b7:be11::201:02ff:fe03:0405/64

別のマシンでも同様に設定を行い、ping6 コマンドで確認してみます。

  $ sudo ifconfig eth0 inet6 add fd41:28b7:be11::201:02ff:fe03:0406/64
  $ ping6 -I eth0 fd41:28b7:be11::201:02ff:fe03:0405
  PING fd41:28b7:be11::201:02ff:fe03:0405 from \
  fd41:28b7:be11::201:02ff:fe03:0406 eth0: 56 data bytes
  ...1行が長いので後略...

それにしても、長いアドレスですね。
こう長いと不便ですので、/etc/hosts に追加してしまいましょう。
IPv4 のときと同じように、IPv6アドレスとホスト名を以下のように書くだけです。

  fd41:28b7:be11::201:02ff:fe03:0405   fedorav6

これで、fedorav6 という名前で使えるようになります。

  $ ping6 fedorav6
  PING fedorav6(fedorav6) 56 data bytes
  64 bytes from fedorav6: icmp_seq=1 ttl=64 time=1.81 ms
  64 bytes from fedorav6: icmp_seq=2 ttl=64 time=0.377 ms
  ...

あとは、再起動後も恒久的に上記のローカルアドレスが設定されるよう、 Network Manager などで設定しておけばよいですね。

おわりに

以上、IPv6の概要と、ローカルアドレスの使い方について、簡単にご紹介しました。

本当は、ルータを使って、 自動的にアドレスを割り振るところまでご紹介したかったのですが、 これ以上長くなると読んでいただけなくなると思いましたので、 手動設定までにしておきました。
(…われながら、いい言い訳だと思います。)

ものすごく評判が悪い、ということがなければ、 次回はそんな続きの内容になると思います。

宿題の答え

前回の宿題は、

  Munin でどんなときにメールが送られてくるか、確かめてみましょう。

でした。

先に答えを書いてしまいますと、状態が変わったときに送られてきます。

しきい値には「warning」と「critical」の2種類あります。
ですので、これらのしきい値をまたいだときに、メールが送られます。

それでは、実際に確かめてみましょう。
いま、ディスクの状態が以下のようになっているとしましょう。

  $ df
  Filesystem        1K-blocks      Used Available Use% Mounted on
  /dev/sda6         175640808K 146461216K 20397552K  91% /
  ...

df のデフォルトは、warning は 92%、critical は 98% ですので、 上記は許容範囲内です。

ここで、/etc/munin/munin.conf に以下の設定を追加します。
(「localhost.localdomain」や「_dev_sda6」の部分は、 ご使用の環境に合わせて適時変更してください。以降も同様です。)

  [localhost.localdomain]
      df._dev_sda6.warning 90

すると、cron で5分おきに起動されるタイミングで、お知らせなメールが 送られてきます。(warning の 90% を越えとるよ、というメールです。)

  localdomain :: localhost.localdomain :: Disk usage in percent
      WARNINGs: / is 91.72 (outside range [90]).
      OKs: /var/lock is 0.00, /dev is 0.03, /dev/shm is 0.11,...

そして、この後5分おきにメールが来るか…といいますと、そんなことはなく、 穏やかに時だけが過ぎ去っていきます。

ここで設定を戻したり、critical をたとえば 91% にしたりして、 しきい値を強制的にまたぐようなことをすると、その旨のメールが届きます。
たとえば、正常に戻ったときの通知メールは、以下の通りです。

  localdomain :: localhost.localdomain :: Disk usage in percent
      OKs: /var/lock is 0.00, /dev is 0.03, /dev/shm is 0.11,...

逆に、critical を越えたときは、以下のようなメールがやってきます。

  localdomain :: localhost.localdomain :: Disk usage in percent
      CRITICALs: / is 91.72 (outside range [91]).
      OKs: /var/lock is 0.00, /dev is 0.03, /dev/shm is 0.11,...

これらの場合も、今と異なる状態に遷移するまでは、 5分おきにメールが飛んでくることはありません。

という感じですが、百聞は一見にしかずですので、実際に数値をいろいろ変えて、 試してみてください。

今回の宿題

今回の宿題は、

  IPv6 のパケットの中身を、tcpdump などで眺めてみましょう。

です。

別に、IPv6 パケットの中身がどうなっているのか、知らなくても使えるのですが、 知っていた方が何かと都合がよいように思います。

たとえば、相手と通信するに至るまでの間、どんなパケットが行き来しているのかなどを、 眺めてみてはいかがでしょうか。
(ちなみに、IPv6ヘッダのフォーマットなどは、RFC2460 にあります。)

あとがき

前の会社に入社して、インターネットにつなげと言われてつないでから、 もう16年経過したということに、さきほど気がつきました。

当時は、電子メールやネットニュースがメインで、Web はまだテキストと画像程度で、 ブラウザ(当時は Mosaic が主流でした) 上にページが現れただけでスゲーとか思ったものでした。
(なんたって、56kbps をみんなでシェアしていましたし。)

それがいまでは(みなさんご存知だと思いますので略)となっているのですから、 技術の進歩の速さには、ほんとうに驚かされます。

とはいえ、実際のところは、漠然としか把握できていなくって、 実はよくわかっていないのかもしれません。
ですので、昨年の状況を、グラフと数値でさらっと眺めてみました。

数字で見る、2010年のインターネット業界
http://coliss.com/articles/build-websites/preparation/internet-2010-in-numbers-by-pingdom.html

いろいろ興味深い数値が並んでいますが、個人的に衝撃だったのは、 どの数値も想像とは桁が違うほど多かった、ということです。

たとえば、電子メールはいまでも盛んに使われていますが、 2010年に送信されたメール数は、なんと「107兆」だそうです。
しかも、そのうちスパムメールの占める割合は、「89.1%」です。
計算すると、1年間に95兆通の無駄なメールが飛び交った、 ということになります。
なんといいますか、 スパムがなくなれば地球温暖化が止まるのではないかと勘違いしてしまいそうです。 (でも、緩和くらいはされそうですよね。)

あと気になったのは、いつものことなのですが、ブラウザとWebサーバのシェアです。

前者は、IE が5割を切っていて Firefox が3割なのが意外でしたし、後者は、 IIS が2割しかなく Apache が 6割近くもあることが意外でした。

インターネットに関しては、クローズドにはまったく向かっていない、 ということでしょうか。ちょびっとホッとしました。

これらのデータをもとに、インターネットが今後どんな方向に進んでいくのか、 わからないなりにも予測してみるべきではないかと思いました。

…あ、自分で言うのもなんですが、なんだか新年っぽいまとめですね。
それでは、今年もよろしくお願いいたします。

 

今回も、ここまで読んでいただき、たいへんありがとうございました。
次回は、2月6日(日) の未明にお会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」- 栗年賀状があまりまくってしまいました。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://usupi.org/k/ (モバイル栗日記)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本