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

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


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

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

先日、とうとう、よめが MacBook Pro を買いました。
これで、念願の、iPhone アプリを開発する土台が整いました。

そして、今まで使っていた iBook の有効活用を検討しています。

2002年に買ったものなので、液晶の表示が見づらくなり、 いくつかのキーも外れているので、そのまま使うにはかなり厳しい状況です。
(ちなみに、キーをはがしたのはビーちゃん(オカメインコ)です。)

ですので、Apple Remote Desktop なるものを介して、 遠隔使用することにしました。
ありがたいことに VNC を理解してくださいますので、 Linuxからでも接続して使えます。
(やや遅いですが、それは iBook のパワー不足などのせいっぽいです。)

さらに、プリントサーバにもしようと思い、 Windows共有とプリンタ共有なるものを有効にしたのですが、 こちらはうまくいっていません。
印刷してもキューが空のままで、うんともすんともです。

というわけで、なにかご存じのかたは、ご教示くださいませ。
(まあ、だめだったら、iTunes マシンとして活用しようと思います。)

お願いが済んだところで、今回もはりきってまいりましょう!

今回のお題 - IPv6 でアドレスを自動的に設定する

前回の新年一発目は、IPv6 のさわりをご紹介しました。

Vol.193 - IPv6 をいまさら始めてみる
http://www.usupi.org/sysad/193.html

幸か不幸か、批判の嵐だったりはしませんでしたので、 気をよくしてIPv6のネタを続けさせていただきます。

今回は、各マシンが、IPv6 アドレスを自動的に設定するための方法を、 ご紹介したいと思います。

具体的には、RA(Router Advertisement) による方法と、 おなじみの DHCP (IPv6 なので DHCPv6)による方法です。

RA で自動設定

IPv6ルータは、自身のネットワークの情報を定期的に送信できます。
それを「RA(Router Advertisement : ルータ広告)」と呼びます。

ルータ以外の人は、受信した RA の情報と、 MACアドレスから生成されるInterface ID(前回出てきた「201:02ff:fe03:0405」など) から、アドレスを設定することができます。
そして、RAの送信元をデフォルトルータに設定すれば、 別のネットワークと通信することもできるようになる、という寸法です。

また、「Router Solicitation」を送信して、 ルータからRAを即座に送信してもらうこともできます。

 

なにはともあれ、やってみましょう。

RA の送信を司るデーモンに「radvd」というものがあります。
最近の Ubuntu や Fedora には同名のパッケージがあります。
まずは、以下の手順でパッケージをインストールしましょう。

  $ sudo apt-get install radvd  (Ubuntu など Debian系の場合)
  # yum install radvd           (Fedora の場合)

設定ファイルは「/etc/radvd.conf」です。
オンラインマニュアル(man radvd.conf)にはいろいろ書いてありますが、 基本的には、インターフェースとネットワークプレフィックスを指定する程度でよいのではないかと思います。
というわけで、最低限な例を以下に示します。

interface eth0
{
     AdvSendAdvert on;
     prefix fd41:28b7:be11::/64 { };
};   

まず、「interface」の後に、対象となるネットワークインターフェースを指定します。 通常は「eth0」だと思いますが、違う場合は eth0 をその名前に置き換えてください。

「AdvSendAdvert」は、RA を定期的に送信するかどうかの設定です。
デフォルトでは「off」で送信しませんので、送信させたい場合は「on」を指定します。

そして、肝心の「prefix」です。 ネットワークプレフィックスとその長さ(通常は 64bit)を指定します。
上記では、前回生成したローカルアドレスを指定しています。

設定ファイルを記述したら、radvd を起動してみましょう。
(今更ですが、root な方は sudo 経由で実行しなくてよいです。)

  $ sudo service radvd start

すると、以下のように文句を言われるかもしれません。(Ubuntu の場合)

  Starting radvd: 
  * IPv6 forwarding seems to be disabled.
  * See /usr/share/doc/radvd/README.Debian
  * radvd will *not* be started.

RA はルータが送信すべきパケットですので、 自身がIPフォワーディングを無効にしていることはありえないということで、 有効にしておけと親切に言ってくださっているようです。

IPv6のフォワーディングが有効かどうかは、sysctl コマンドで確認できます。 以下のように実行してみてください。

  $ sysctl net.ipv6.conf.all.forwarding
  net.ipv6.conf.all.forwarding = 0

0 になっていますので、以下を実行して 1 に変更しましょう。

  $ sudo sysctl -w net.ipv6.conf.all.forwarding=1
  net.ipv6.conf.all.forwarding = 1

ちなみに、恒久的に変更するには、 /etc/sysctl.conf などに以下の1行を追加する必要があります。 (いま試すだけなら不要です。)

  net.ipv6.conf.all.forwarding=1

そして、再度 radvd を(前述の方法で)起動すれば、 今度は文句を言われなくなるはずです。

 

さて、自動設定する側ですが、 NetworkManager アプレットを右クリックして 「接続を編集する(Edit Connections)」を選択し、対象の設定の編集で、 IPv6の設定を「自動、アドレスのみ(Automatic, address only)」にします。
すると、リンクローカルアドレス以外のアドレスが設定されます。

  $ ip addr show eth0
  ...
    inet6 fd41:28b7:be11:0:201:02ff:fe03:0405/64 scope global dynamic
       valid_lft 86249sec preferred_lft 14249sec
    inet6 fe80::201:02ff:fe03:0405/64 scope link 
       valid_lft forever preferred_lft forever

上記は Linux の場合です。 他のOSに関しましては…申し訳ありませんがいまのところ未確認です。

DHCPv6 で割り振る

さて次は、DHCPv6 です。

DHCPv6 は、IPv4 でおなじみの DHCP の IPv6 版です。
前述の RA でもアドレスは設定されますが、 DNSサーバやドメイン名などの情報まで得るには、DHCPv6 が必要です。

DHCPv6 には、「ステートフル・モード」と「ステートレス・モード」があります。 前者は従来の DHCP 通りですが、後者はアドレス以外の情報を得る際に使用されます。

また、IPv4 の DHCP では UDP のポート 67,68 を使用しますが、 DHCPv6 では 546,547 を使用します。

 

…といった細かい点は後回しにしまして、 DHCPv6サーバを試しに動かしてみたいと思います。

今回は、WIDEプロジェクトのDHCPv6サーバで試してみました。
Fedora にはパッケージがありませんが、Ubuntu にはありますので、 以降では Ubuntu で試しております。

まずは、いつものようにパッケージをインストールします。

  $ sudo apt-get install wide-dhcpv6-server

設定ファイルは「/etc/wide-dhcpv6/dhcp6s.conf」です。
「/usr/share/doc/wide-dhcpv6-server/examples/dhcp6s.conf.sample」 にサンプルがありますので、それを基に書いていけばよいと思います。
というわけで、やはり最低限な例を以下に示します。

interface eth0 {
      allow rapid-commit;
      address-pool pool-test 3600;
};

pool pool-test {
      range fd41:28b7:be11::0001 to fd41:28b7:be11::ffff;
};

「interface」の後に、対象のネットワークインターフェースを指定する …のは radvd のときと同じです。

「allow rapid-commit」というのは、 通常より少ないやりとりでアドレスを割り振ってもらう方式を許可する設定です。

「address-pool」の後には、後述する「pool」を指定するための名前と、 割り当てられたアドレスの有効期間を秒で指定します。

「pool」の後には、前述の名前を記述します。
そして、「range」では、割り当てるアドレスの範囲を指定します。
ここでは、「fd41:28b7:be11::0001〜ffff」を指定しています。

また、ドメイン名や DNS サーバの情報も提供する場合は、 上記に加えて以下を記述します。
(ドメイン名が「usupi.org」、DNSサーバが「fd41:28b7:be11::1:0001」の場合の例です。 各自置き換えて使用するなどしてください。)

option domain-name "usupi.org";
option domain-name-servers fd41:28b7:be11::1:0001;

あとは、DHCPv6サーバを起動するだけです。

  $ sudo service wide-dhcpv6-server start

 

さて、DHCPv6クライアント側の設定ですが、NetworkManagerアプレットで 「自動(Automatic) 自動、DHCPのみ(Automatic, DHCP only)」を選択すると、 ステートフル・モードになります。
つまり、アドレスも他の情報も DHCPv6 から入手します。

自動、DHCPのみ(Automatic, DHCP only) 自動(Automatic)」を選択すると、 ステートレス・モードを使用します。
つまり、アドレスは RA で設定し、他の情報は DHCPv6 から入手します。

RAのMフラグ(radvdのAdvManagedFlag)とOフラグ(radvdのAdvOtherConfigFlag) の値で決まります。アドレスは、MフラグがONの場合DHCPv6、 OFFの場合RAから入手します。他の情報は、OフラグがONの場合DHCPv6、 OFFの場合RAから入手します(実質DNS(radvdのRDNSS)に限られますが)。

うまく割り当てられない場合は、ファイアウォールが設定されているかもしれません。 そのときは、UDPの546と547を開けるようにしてください。

おわりに

以上、IPv6 でアドレスを自動設定する方法を、簡単にご紹介しました。

細かいところはすぱぱぱっと省略してしまったように思いますが、 基本的には上記のようにすれば、自動的に割り振られるようになると思います。

他のマシンの迷惑にならない程度に、いろいろ試してみてください。

宿題の答え

前回の宿題は、

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

でした。

tcpdump コマンドを用いて、以下のようにしてIPv6パケットの情報を取得します。

  # tcpdump -w 出力ファイル名 proto ipv6

参照する際は、たとえば以下のように実行します。

  # tcpdump -r 出力ファイル名 -nX

というわけで、ping6 コマンドを実行したときにキャプチャした結果を、 以下に示します。

  $ tcpdump -r 出力ファイル -n
  15:30:22.577056 IP6 fd41:28b7:be11:0:20c:29ff:fe26:450d > \
    ff02::1:ff18:348e: ICMP6, neighbor solicitation, who has \
    fd41:28b7:be11:0:21f:16ff:fe18:348e, length 32
  15:30:22.577068 IP6 fd41:28b7:be11:0:20c:29ff:fe26:450d > \
    ff02::1:ff18:348e: ICMP6, neighbor solicitation, who has \
    fd41:28b7:be11:0:21f:16ff:fe18:348e, length 32
  15:30:22.577113 IP6 fd41:28b7:be11:0:21f:16ff:fe18:348e > \
    fd41:28b7:be11:0:20c:29ff:fe26:450d: ICMP6, neighbor advertisement, \
    tgt is fd41:28b7:be11:0:21f:16ff:fe18:348e, length 32
  15:30:22.577318 IP6 fd41:28b7:be11:0:20c:29ff:fe26:450d > \
    fd41:28b7:be11:0:21f:16ff:fe18:348e: ICMP6, echo request, seq 1, \
    length 64
  15:30:22.577337 IP6 fd41:28b7:be11:0:21f:16ff:fe18:348e > \
    fd41:28b7:be11:0:20c:29ff:fe26:450d: ICMP6, echo reply, seq 1, \
    length 64
  ...

最初の3行は、IPv4 でいうところの ARP に相当するやりとりです。
IPv6 といえども、MACアドレスが分からないとパケットの出しようがありません。 ですので、ICMPv6の近隣要請(Neighbor Solicitation)なるものを使って問合せ、 聞かれた側は近隣通知(Neighbor Advertisement)で返事を返します。

そして、残りの2行は、IPv4 の ICMP と同様、Echo Request と、 それに対応する Echo Reply がやりとりされます。

ここで、4行目の ICMPv6 Echo Request のパケットの中身を覗き見てみることにしましょう。

  $ tcpdump -r 出力ファイル -nx
  ...
        0x0000:  6000 0000 0040 3a40 fd41 28b7 be11 0000
        0x0010:  020c 29ff fe26 450d fd41 28b7 be11 0000
        0x0020:  021f 16ff fe18 348e 8000 4556 233a 0001
        0x0030:  c19d 3a4d a2eb 0a00 0809 0a0b 0c0d 0e0f
        0x0040:  1011 1213 1415 1617 1819 1a1b 1c1d 1e1f
        0x0050:  2021 2223 2425 2627 2829 2a2b 2c2d 2e2f
        0x0060:  3031 3233 3435 3637
  ...

先頭から2バイトずつ見ていくと、以下のように解釈できます。
(IPv6 ヘッダの詳細は RFC2460、ICMPv6 ヘッダの詳細は RFC4443 にあります。 眺めるだけでもなんとなくわかります。)

  [IPv6 ヘッダ]
  6000 : IPのバージョン(6), トラフィッククラス(0), フローラベル(0)
  0000 : フローラベルの続き(0)
  0040 : ペイロード長(64)
  3a40 : 次のヘッダ(58), ホップ限界(64)
  fd41 : 送信元アドレス(fd41:28b7:be11::020c:29ff:fe26:450d)
  ...
  fd41 : 宛先アドレス(fd41:28b7:be11::021f:16ff:fe18:348e)
  ...
  [ICMPv6 ヘッダ]
  8000 : 種別(128), コード(0)
  4556 : チェックサム(0x4556)
  233a : 識別子(0x233a)
  0001 : シーケンス番号(1)
  c19d : データ(0xc19d, 0x3a4d, ...)
  ...

ここで、IPv6 ヘッダの「次のヘッダ」が「58」となっています。 これは ICMPv6 を示しています。
また、ICMPv6 ヘッダの「種別」が「128」ですが、 これは Echo Request を示しています。

以上、簡単なところしか示せませんでしたが、他のやりとりも眺めてみると、 理解が深まるのではないかと思います。
ですので、いろいろキャプチャして眺めてみてください。

今回の宿題

今回の宿題は、

  RA や DHCPv6 のやりとりを tcpdump などで眺めてみましょう。

です。

前回とおんなじやん! と言われそうですが、まったくもってその通りですので、 弁明の余地もありません。

ですが、やはり、パケットを生で見て確認することで、 どういうやりとりがされているのかがわかると思います。

ですので、面倒くさがらずに、確認してみてください。
(ちなみに、DHCPv6 のヘッダは、RFC3315 に書いてあります。)

あとがき

ワタクシゴトで恐縮ですが、転職しました。
1月末に円満退職して(のはずです)、2月1日から新会社に務めています。

今度の会社は、Linux のサーバを構築したりしているところです。
当メルマガの内容とかぶる可能性がありますので、会社の情報を漏洩したのでは? …と疑われないよう、注意深くネタを考えねばと思っています。

 

それはさておき、転職したのだから当たり前なのかもしれませんが、 環境などが違いすぎて、合わせるのに精一杯な日々が続いています。

まず、時間などの管理が非常に厳しいです。
行った作業を15分単位できっちり記録し、報告せねばなりません。
でもって、仕事に直接関係ないことをするには、上長の許可が必要です。

さらに、フレックスでなくなりました。
朝9時から夕方5時までみっちり、コアタイムなんてものもありません。

そして、新しい職場は若いひとばっかりです。
さらに、いまは見習い中で、SE の作業した内容を文書化する事務の部署にいるため、 周りは20代の女性ばっかりです。…ぽつねんとしています。

そんなわけで、個人宛のメールがどんどんたまり、当メルマガのネタ探しや確認も、 どんどん後回しになってしまっています。

ただ、よく考えると。この状態が厳しいというわけではなく、 普通の会社ではごく普通のことなんですよね。
いままでのゆるゆるな生活がいけないとも思ってのことですので、 さっさと順応して、これからの数十年を充実させたいと思います。

そして、いまの経験や思っていることを忘れずに記憶し、 後輩を指導する立場になったとき、それを活かして手助けすることができればよいなあ、 とも思っています。

問題は、このような経験を得たのが、 40歳になってからというのは遅すぎなんじゃなかろうか、ということでしょうか…。

 

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

 

「いますぐ実践! 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

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本