2015年7月9日木曜日

IPv6 TempAddr - jessie - kde - network-manager

手元に Win7pro のインストールされたノートブック Toshiba R730 が、お下がりでやってきたので Debian jessie をインストールしてみた。

先日、d-u.jp で、IPv6 の tempaddr について話があったのでちょっと確認してみた。

今までの手元のマシン4台はサーバー系用途のために IPv6 も固定で設定してあり、network-manager も使っていなかったため検証不能だった(後日 2015-08-23 検証してみた)ので..

なお、kernel レベルでの制御は sysctl (/etc/sysctl.conf, /etc/sysctl.d/*.conf, sysctl(8)コマンド) で可能であり、GUI ツールからの設定も最終的にはここの net.ipv6.conf.IFname.use_tempaddr の値を設定する。

Gnome は好みでないのと、Win7pro を残しデュアルブートにしたため、残り半分のディスクスペースしかなく、Gnome導入する余裕がなかったので KDE 環境のみで検証した。

おそらく、Gnome 環境でもほぼ同様に設定、利用できると思う。(未確認)

 

network-manager

KDE環境では network-manager (nm) はタスクバーに表示されるアイコン(あるいは追加ウィジェット)からアクセスするようになっている。(デフォルトではタスクバーは画面下に横たわっている..)


ここでは wireless 環境なので wifi アイコンになってる。wired 環境だと RJ-45コネクタのアイコンになったと思う。

初期では MAC から生成された EUI-64 な IPv6 アドレスが使われる設定になっていたので、これを変更してみる。

タスクバーの電波アイコン(1.)をクリックすると network-manager によるネットワークの概要が表示され、さらにその右上のスパナアイコン(2.)をクリックすると次のスクリーンショットのような Connection editor というタイトルのウィンドウが表示される。


ここで、1. 目的のネットワークを選択し、2. 編集をクリック すると、さらに次の Edit Connection [connection name] の画面が表示される。


この画面のタブの中から右端にある IPv6 のタブを選択すると、Privacy という項目があり、プルダウンタブをクリックすると Enabled (prefer temporary address) という選択肢が現れるので、これを選択する。

タスクバーのアイコンから一度コネクションを 切断(disconnect)-> 接続(connect) すると、次のスクリーンショットのように ip addr コマンドの出力には、 wlan0 の IPv6 アドレス (inet6 で始まる行) が3つ現れる。(ここでは無線LAN環境なので wlan0 になってる)


一番下のアドレス先頭が fe80 で始まるものは scope link であり、いわゆる link-local と呼ばれるもので、グローバルに使用されるものではない。

残りの2つの上の方、(末尾が :f39e/64 の方)は、scope global temporary となっており、これが 上の設定によって追加された temporary address である。

もう一つは MAC を元にした EUI-64 なアドレス(mngtmpaddrの方)である。

IPv6 は1つのインターフェイスに複数割りあてられるのでこういう状態でも両方のアドレスで通信は可能である。



モバイル機器やクライアント機においては、固定アドレス、EUI-64 なアドレスでは、個人が特定されプライバシーが侵害されるおそれがあるので、IPv6 tempaddr (temporary address) の利用が推奨される。

あちこちのネットワークを渡り歩くような機器の場合は tempaddr を使うように設定しておこう。

sysctl - 後日の検証

上記のように NetworkManager から wlan0 に対して tempaddr を利用するように設定した場合、
sysctl -a | grep "tempaddr"
の結果は、 
net.ipv6.conf.wlan0.use_tempaddr = 2 
のように "2" がセットされている。 

この値については、kernel 付属のドキュメントの networking/ip-sysctl.txt.gz (jessie の標準では linux-doc-3.16) につぎのような記述がある。


use_tempaddr - INTEGER
   Preference for Privacy Extensions (RFC3041).         
   <= 0 : disable Privacy Extensions
   == 1 : enable Privacy Extensions, but prefer
          public addresses over temporary addresses.
   >  1 : enable Privacy Extensions and prefer
          temporary addresses over public addresses.
  
Default:  0 (for most devices)                
         -1 (for point-to-point devices and loopback
             devices)

訳すと..


use_tempaddr (一時アドレスを使用)  整数値
       プライバシー拡張(RFC3041)の設定 
                      <= 0 (0以下) : プライバシー拡張 無効
                      == 1 (1)    : プライバシー拡張 有効、ただし
                                    一時アドレスよりパブリックアドレスを
                                    優先
                      >  1 (1より大) : プライバシー拡張 有効、
                                      パブリックアドレスより一時アドレス
                                      を優先使用する
       デフォルト  : 0 (ほとんどのデバイス用途)
               -1 (point-to-point デバイスと
                           ループバックデバイス用途)

となる。

  • tempaddr : 一時アドレス。ブートごとにカーネルにより自動生成されるランダムな IPv6 アドレス

  • public address : 管理者により設定された固定 IPv6 アドレスか、それがない場合はには、EUI-64 という方式によりネットワークインターフェイスの MAC アドレスより自動的に算出される固定 IPv6 アドレス。

なお、文中では RFC3041 と書かれているが、これはすでに古くなっており現時点(2015-08-23)では、より新しい RFC4941 によって置き換えられている。

ちょっと事情があり、jessie 環境をクリーンインストールしたデスクトップ機でも検証してみた。こちらは wireless 環境がないため、インターフェイスは eth0 になる。

また、固定 IPv6 を利用するにあたって network-manager や avahi-daemon をアンインストールし、インターフェイスのブリングアップを従来の ifupdown から systemd の systemd-networkd を利用する方式に変更してある。

クリーンインストール直後は net.ipv6.conf.eth0.use_tempaddr = 2 の状態であったが、network-manager の削除により、net.ipv6.conf.eth0.use_tempaddr は "0" に変化した。

これを /etc/sysctl.d/use_tempaddr.conf ファイルを作成し、次のように記述、net.ipv6.conf.eth0.use_tempaddr=1
再起動すると、eth0 に tempaddr が割り振られた。

しかし、ssh やブラウザで確認すると、tempaddr では接続していないことが確認された。

さらに、net.ipv6.conf.eth0.use_tempaddr=2 として再起動してみた。

すると、ip addr の結果は次の通り。

ブラウザのプロキシ設定を外して ipv6-test.com へ接続すると..

 
ssh で別マシンへ接続してみると..



 と、このように、eth0 に割り振られた 3つ(linklocal も含めると 4つ)の IPv6 アドレスのうち、ランダムに生成された tempaddr を使用して接続していることが確認された。

付記

さらに、MAC アドレスをランダムに生成するという方法もあり、windows10 で対応されたようで一部で話題になっているが、linux でも systemd-networkd を使用すると可能なようだ。

cf. man(5) systemd.link の [LINK] SECTION OPTION 参照。

[LINK] SECTION OPTIONS
       The "[Link]" section accepts the following keys:

       Description=
           A description of the device.

       Alias=
           The "ifalias" is set to this value.

       MACAddressPolicy=
           The policy by which the MAC address
           should be set.
           The available policies are:

           "persistent"
               If the hardware has a persistent MAC
               address, as most hardware should, and
               if it is used by the kernel, nothing
               is done.
               Otherwise, a new MAC address is
               generated which is guaranteed to be
               the same on every boot for the given
               machine and the given device, but
               which is otherwise random.

           "random"
               If the kernel is using a random MAC
               address, nothing is done.
               Otherwise, a new address is randomly
               generated each time the device appears,
               typically at boot.


この "random" の部分を見てみると、つぎの意味だと思われる。

"random"
  カーネルがランダムMACアドレスを使用する場合はなにもしない。そうでなければ一般的にはブート時に新しいアドレスがランダムに生成される。

ちなみに、kernel が random MAC を使うようにする設定方法についてはまだ調べていない..


0 件のコメント:

コメントを投稿