Ubuntu無線LANが不通になった・・・

Ubuntuは結構頻繁にアップデートマネージャでのアップデートが出ます。本来は一つ一つ確認しながら進めればいいのでしょうが、たくさんあるのでアップデートマネージャの表示が出たら特に確認せずに進めてしまいます。

で、先日もいつものようにアップデートマネージャでポチッとアップデートをしたら、再起動後に無線LANの接続ができなくなってしまいました。

理由がわからなかったのですが、とりあえずドライバを再度インストールしたら使えるようになりました。

IPv6のアドレスに思う

ここしばらく、IPv6対応でいまできることってなに、ということでいろいろやってみましたが、その中で疑問に思うことがあるので記載します。

IPv6のアドレスの長さは128bitなので、IPv4の32bitに比べると2^96倍もあって事実上無数にある、という説明がされています。しかし、IPv6のアドレス構造を見てみると、「前半がプレフィックス・ネットワークID」「後半がインタフェースID」となっています。また、サブネットマスクは/48か/64のどちらかであまり意識することはない、とされています(Wikipediaによる)。また、同じくWikipediaによると、同じくOCNによるIPv6サービスでは月額300円で/64のネットワークブロックを2つ取得できる、とされています。

つまり、/48とか/64のアドレスが従来のIPv4グローバルアドレスに相当し、従来NATなどのプライベートIPアドレスで対応していた部分に/64の下のアドレスを企業内や家庭内で割り振る、ということになるのだと思います。そう考えると、「IPv4の32bitに比べると2^96倍」というのは誇張で、2^32倍くらいに考えるのが妥当なんだと思います。

さらに、IPv6アドレスの割り当て状況をみると、IANAは地域のRIRに/12単位でIPv6アドレスの割り当てを進めていくように見えます。従来IPv4ではこれが/8の単位だったのでしょう。ここで気づくのは、一度に割り当てる単位で数えるとIPv6とIPv4は16倍の違いしかない、ということです。まあ、それでも/12のIPv6アドレスブロックを/48の単位でエンドユーザーに割り当てていくと割り当ての際に/36の自由度があって、IPv4全体のアドレス空間以上を一度にRIRに割り当てることになるのだから、あまり心配はないのかもしれません。ただ、今後、それこそ家電製品どころか照明器具、壁のスイッチ、水道の蛇口、窓ガラス、扉、錠前・・・などに組み込まれたワンチップマイコンのようなものまでもIPv6を喋るようになるかもしれない、ということを考えると、無闇にアドレスブロックを浪費しても大丈夫なのだろうか、という気もします。

無駄な心配でしょうかね??

≪おまけ≫
Arduinoというか、フィジカルコンピューティングの世界でIPv6っていろいろ面白い使い方があるような気がするのだけど、どうでしょうかね。実験だけならIPv4でも十分だから別にIPv6でなくたっていいのだけど。

DebianにWordPressをインストール

IPv6で接続可能になったDebianですが、WordPressをインストールしてみることにしました。簡単そうな参考サイトはここでしょうか・・・。

# aptitude install wordpress

でjavascript,mysql,perl,phpなどの関連モジュールが一気にインストールされます。

・・・が、mysqlのサーバ自体はインストールされていないようですので、インストールします。

# aptitude install mysql-server

php5のインストールを認識させるため、apache2を再起動します。

# /etc/init.d/apache2 restart

/var/www/index.htmlを消去し、/var/www/index.php に以下の内容を作成します。

<?
php phpinfo();
?>

生成後、「http://(IPアドレス)」にアクセスして、PHPの状態が表示されるのを確認します。

・・・・

いろいろやってるうちに、メモが取りきれませんでした(^^;

なので、覚えていることだけ。

  • aptitudeでインストールされるWordPress本体は英語版なので結局消した。場所(/usr/share/wordpress)だけはそのまま利用したけど。
  • データベースの生成はWebMinから例えば「wordpress」という名前で生成。今回は最終的に「wordpress_v4」と「wordpress_v6」で生成した。特に変わった設定は不要。生成したデータベースにアクセスするユーザー「wordpress」も作成した。
  • 結局、WordPressの日本語版 tar.gz をダウンロードして展開したものを 「/usr/share/wordpress/vpv4」「/usr/share/wordpress/vpv6」として2箇所に置いた。(1箇所で済む方法もありそうだけど)
  • それぞれのディレクトリの中の wp-config.php にデータベースへのアクセス情報を設定した。ただし、IPv6の場合、サイトのアドレスをIPv6のアドレス(FQDN)に書き換えなければならない(デフォルトだとIPv4のアドレスが入るので、そこでおかしくなってしまう)ので、一旦下記のVirtualHostの設定をv4アドレスで接続して、サイトのアドレスを書き換えてからv6で使えるようにした。
  • それぞれのアクセスのための Apache2 の設定を /etc/apache2/sites-available/default にVirtualHostとして設定した。片方はIPv4、もう片方は IPv6で設定。VirtualHost設定時にはports.confなども確認しないとアクセスできないことがある。(最初は8080ポートにv6を設定したので、ports.conf と ip6tables の穴が開いてなくて接続できなかった。)

といったところでしょうか。

これで一応、IPv6アドレスからWordPressにアクセスできました。・・・置くコンテンツは特にないし、それ以上にPentium500MHz+192MBでは重くて使いようがないのですけどね。

(追伸)
ここのバックアップサイトにしてみようかと思ったのだけど、テーマの設定でプレビューすらできないので、消してしまいました・・・。

Debianで起動時にFreenet6に接続する

現在の状態では、Debianは起動後に手動で /usr/local/gogoc/bin/gogoc を起動しなければならないのですが、これを自動化したいと思います。

そこで、Debianの起動スクリプトを作ります。ここ(@IT)にあるのを雛形に、以下のようなファイルを作りました。

#!/bin/bash
setip6tables() {
    ip6tables -P INPUT DROP
    ip6tables -P FORWARD DROP
    ip6tables -P OUTPUT ACCEPT
    ip6tables -F
    ip6tables -Z
    ip6tables -X
    ip6tables -N ufw6-after-forward
    ip6tables -N ufw6-after-input
    ip6tables -N ufw6-after-logging-forward
   :
   :(長いので中略)
   :
    ip6tables -A ufw6-before-output -m state --state RELATED,ESTABLISHED -j ACCEPT
    ip6tables -A ufw6-before-output -j ufw6-user-output
    ip6tables -A ufw6-skip-to-policy-forward -j DROP
    ip6tables -A ufw6-skip-to-policy-input -j DROP
    ip6tables -A ufw6-skip-to-policy-output -j ACCEPT
    ip6tables -A ufw6-track-output -p tcp -m state --state NEW -j ACCEPT
    ip6tables -A ufw6-track-output -p udp -m state --state NEW -j ACCEPT
}
clearip6tables() {
    ip6tables -P INPUT DROP
    ip6tables -P FORWARD DROP
    ip6tables -P OUTPUT DROP
    ip6tables -F
    ip6tables -Z
    ip6tables -X
}
start() {
    echo -e "Set ip6tables: "
    setip6tables
    echo -e "Starting gogoc Freenet6 client: "
    /usr/local/gogoc/bin/gogoc -y -f /usr/local/gogoc/bin/gogoc.conf -r 180 &
    return 0
}
stop() {
#    killproc gogoc
    echo -e "Clear ip6tables: "
    clearip6tables
    return 0
}
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
esac

本来なら、ip6tablesの設定はわけた方が良さそうな気もしますが、ここに含めています。
また、gogoc(Freenet6クライアント)の停止のしかたがわからないので、代わりにip6tablesで全てをDROPする設定をするようにしました。

このファイルを /etc/init.d/gogoclient として root で保存し、ファイル属性を 700 に変更します。そして起動時に呼ばれるようにするため、update-rc.dを使って設定します。

# sudo update-rc.d gogoclient start 99 2 3 4 5 .
update-rc.d: warning: /etc/init.d/gogoclient missing LSB information
update-rc.d: see
Adding system startup for /etc/init.d/gogoclient …
/etc/rc2.d/S99gogoclient -> ../init.d/gogoclient
/etc/rc3.d/S99gogoclient -> ../init.d/gogoclient
/etc/rc4.d/S99gogoclient -> ../init.d/gogoclient
/etc/rc5.d/S99gogoclient -> ../init.d/gogoclient
#

再起動すると、自動的にFreenetに接続するようになります。なお、起動時はなぜか素直につながらないことが多いようですが、リトライするうちにつながるようです。

停止する際は、

# /etc/init.d/gogoclient stop

で全てのIPv6をブロックするようにip6tablesを設定変更します。

自分自身のポートスキャン

外からアクセス可能となると、いろいろ心配になるものです。ルートキットの存在についてはchrootkitやrkhunterなどで確認できますが、できれば感染前に防ぎたいものです。

それで調べていたら、自分自身にnmapを使ってポートスキャンをかけてみる、という記述を見かけたので試してみました。nmapは一般的なポートスキャンツールですが、他者に使うのは非常に迷惑ですので、取扱いには十分注意が必要です。

で、インストールです。

# aptitude install nmap

実際にスキャンする場合は、IPv4では、

# nmap localhost

IPv6の場合は、

# nmap -6 ::0

でスキャンできます。

自分のところではDebianでは、

  • rpcbind(111,IPv4)
  • afp(548,IPv4)
  • postgresql(5432,IPv4)
  • postgresql(5432,IPv6)

が開いていて、同様にUbuntuではIPv4,IPv6共に、

  • smtp(25)
  • ipp(631)

が開いていました。

しかし、よく考えると、それぞれiptables/ip6tablesでFirewallを構築しているので、localhostに関してはあまり意味がありません。ですので、お互いにスキャンをかけたところ、Debianはsshとhttpのみオープン、Ubuntuは全ポートがフィルタリングされていました。狙い通りなので安心しました。(IPv6の場合はオーストラリアと北米まで行って来いでポートスキャンなのですごく無駄な感じはしますが・・・)

Debianで時刻を自動的に合わせる

Debianを動かしているPCはたぶん前世紀もののかなり古いPCなので、時計がかなりずれてしまいます。なので、NTPで自動的に時計合わせをすることにしました。

まずは、ntpdateのインストールです。

# apt-get install ntpdate

でインストールします。

設定ファイルは、/etc/default/ntpdateですが、設定ファイルの冒頭で、

# Set to “yes” to take the server list from /etc/ntp.conf, from package ntp,
# so you only have to keep it in one place.
NTPDATE_USE_NTP_CONF=yes

という記載があり、サーバリストは /etc/ntp.conf を使うようになっています。
ですので、/etc/ntp.conf を作ります。

# INTERNET MULTIFEED CO.
# http://www.jst.mfeed.ad.jp
server ntp3.v6.mfeed.ad.jp
server ntp2.v6.mfeed.ad.jp
server ntp1.v6.mfeed.ad.jp

IPv6の場合はIPv6専用のNTPサーバーへアクセスしなければならないようで、一般のNTPサーバーへは接続できませんでした。結局、今回はインターネットマルチフィードの時刻提供サービスを使わせてもらうことにしました。

さらに自動的に時刻を同期し、PCの時計を合わせるために、「crontab -e」として、以下の内容を設定しました。

# m h dom mon dow command
43 * * * * /usr/sbin/ntpdate-debian
45 1 * * * /sbin/hwclock –systohc

毎時43分にNTPで時刻合わせし、毎日1時45分にハードウェアの時計ICに設定しにいくようにしています。

DebianでFT232RLを使う

Debianマシンでは何もいじってない(=『It works!』が表示されるだけ)のApache2が入っていたりするので、試しにUbuntu(MiredoでIPv6化)でFreenet6で割り付けてもらったホスト名(FQDN)をGoogle chromeブラウザに入れてみたら、ちゃんと「It works!」と表示されました。

で、ふとIPv4マシンから同じくchromeブラウザでホスト名を入れてみたら・・・・なぜか表示されるじゃないですか。同様に、Android端末のPoketWifiSからも表示されます。結局、Freenet6は外のIPv4から(Freenet6の)IPv6へのGatewayの機能ももっているみたいです。

まとめて考えると、Freenet6でIPv6の固定IPアドレスを割り振ってもらって、おうちIPv6サーバを立てた場合、アクセスする側はIPv4でもよい、ということになります。

そうなると、このDebianにシリアル経由で外部に何かをつないで、Webに反映させるとか、いろいろ遊んでみたくなります。

以前FTDI社のサイトでは、FT232のLinuxドライバはカーネルの2.6.31(だったかな?)から標準で入っている、と読んだ記憶があって、なおかつ、Debian5.0(lenny)のカーネルのバージョンは2.6.26だったのでがっかりしていました。しかし、こちらのサイトを見ると、2.6.9以降であれば標準で入っている、と書いてあります。

早速試してみたくなったのですが、次に困るのが外部にアクセスするためのターミナルプログラムです。WindowsならTeraterm一発で決まりですし、Linuxでもマシンパワーが十分ならWINE上でTeratermを動かしてしまえ、というところなのですが、非力なマシンで動いているので、そうもいかず困っていました。しかし、仮想スクリーンコマンドとして懐かしいscreenコマンドがつかえるという記載がありました。

確認する目処がついたところで、やってみます。まず、秋月のFT232RLシリアル変換モジュールをつないでみます。

[38042.801287] usb 1-1.1: new full speed USB device using uhci_hcd and address 3
[38042.952410] usb 1-1.1: configuration #1 chosen from 1 choice
[38042.965715] usb 1-1.1: New USB device found, idVendor=0403, idProduct=6001
[38042.966072] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[38042.966155] usb 1-1.1: Product: FT232R USB UART
[38042.966428] usb 1-1.1: Manufacturer: FTDI
[38042.966681] usb 1-1.1: SerialNumber: A9009peL
[38043.412694] usbcore: registered new interface driver usbserial
[38043.412793] usbserial: USB Serial support registered for generic
[38043.412912] usbcore: registered new interface driver usbserial_generic
[38043.412955] usbserial: USB Serial Driver core
[38043.444457] usbserial: USB Serial support registered for FTDI USB Serial Device
[38043.444594] ftdi_sio 1-1.1:1.0: FTDI USB Serial Device converter detected
[38043.444726] ftdi_sio: Detected FT232RL
[38043.444871] usb 1-1.1: FTDI USB Serial Device converter now attached to ttyUSB0
[38043.444969] usbcore: registered new interface driver ftdi_sio
[38043.445011] ftdi_sio: v1.4.3:USB FTDI Serial Converters Driver

ということで、無事に認識されました。引き続き、実際にFT232RLの先の物を動かしてみます。

# stty 9600 cs8
# screen /dev/ttyUSB0

で実際に制御することができました。

主な操作方法は、

  • ^A \ : 終了
  • ^A ^D : 切り離し(裏で動いたまま。 screen -r で再接続できる)

といったところでしょうか。懐かしいシリアルコンソール時代に便利だったコマンドですね。特に^A^Dは長時間の処理の際にコンソールを空けることができる(端末を占有せずに処理を続行させることができる)ので便利でした。

IPv6を使う他の方法(Debian+gogoNET その5)・・・Debianのip6tables

無事にDebianでFreenet6を使った固定IPv6接続ができるようになりましたが、いろいろ調べている間にIPv4とIPv6ではiptableが無関係っぽいことを目にしたので調べてみました。すると、Debianでは、

# ip6tables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

となっていて、確かに無防備です。一方で、IPv4は、

# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT (中略)

Chain FORWARD (policy DROP)
target prot opt source destination

Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT (中略)

となっていて、それなり(設定したとおり)にブロックされています。

Ubuntuの方は、

~$ sudo ip6tables -L
Chain INPUT (policy DROP)
target prot opt source destination
ufw6-before-logging-input all anywhere anywhere
ufw6-before-input all anywhere anywhere
ufw6-after-input all anywhere anywhere
ufw6-after-logging-input all anywhere anywhere
ufw6-reject-input all anywhere anywhere
ufw6-track-input all anywhere anywhere

Chain FORWARD (policy DROP)
target prot opt source destination
ufw6-before-logging-forward all anywhere anywhere
ufw6-before-forward all anywhere anywhere
ufw6-after-forward all anywhere anywhere
ufw6-after-logging-forward all anywhere anywhere
ufw6-reject-forward all anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ufw6-before-logging-output all anywhere anywhere
ufw6-before-output all anywhere anywhere
ufw6-after-output all anywhere anywhere
ufw6-after-logging-output all anywhere anywhere
ufw6-reject-output all anywhere anywhere
ufw6-track-output all anywhere anywhere

   :
(長いので以下略)

となっていて、ちゃんと設定されていそうです。(中身解析してない・・・)
とりあえず、Ubuntu で ip6tables -S の出力内容を編集して、同じ内容を Debian で設定するシェルスクリプト作成することにしました。
・・・が、そのままではダメみたいで、いくつか修正しました。

まず、冒頭のINPUT,FORWARD,OUTPUTの設定の後の部分に、

ip6tables -F
ip6tables -Z
ip6tables -X

を足して、チェーンの内容、ユーザー定義チェーンの内容を初期化します。

さらに、http/httpsでのアクセスを試したいのと、sshでのアクセスをしたいので、途中のユーザー定義のINPUTチェーンの設定箇所に

ip6tables -A ufw6-before-input -p tcp –dport 80 -j ACCEPT
ip6tables -A ufw6-before-input -p tcp –dport 443 -j ACCEPT
ip6tables -A ufw6-before-input -p tcp –dport 22 -j ACCEPT

を追加したスクリプトを /usr/local/gogoc/bin の下に置くことにしました。後半の部分を削除したスクリプトではssh/httpでのアクセスができず、後半の部分ありのスクリプトを動かすと、httpでのアクセス、sshでのアクセスができることが確認できました。

これで、gogoc とそのスクリプトを起動すれば、IPv6でつかえていろいろできるはず・・・。です。

IPv6を使う他の方法(Debian+gogoNET その4)・・・固定IPv6アドレス

ようやく gogoNET で IPv6 接続ができるようになりました。しかし、anonymous接続ですのでIPアドレスが同じ保証はありません。

そこで、/usr/local/gogoc/bin/gogoc.conf を編集します。
まず、始めの方に userid/passwdの設定箇所があります。ここに Freenet6サービスのアカウントのユーザーIDとパスワードを記載します。
これはその1で紹介した gogonet.gogo6.com のアカウントとは異なります。Freenet6サービスのアカウントは、gogonet.gogo6.com にサインインした後、上部の「Freenet6」のタブを選択、さらに中央の「Account」をクリックすると、Freenet6のユーザーIDとパスワード登録ができるようになっています(登録後、入力したIDとパスワードが平文のままメールで送られてきますので注意が必要)ので、こちらを記入します。

gogoc.confを読み進めていくと、次にサーバー設定、認証設定の箇所があり、ユーザーIDとパスワードを使う場合には、


#server=anonymous.freenet6.net
server=authenticated.freenet6.net

#auth_method=anonymous
auth_method=any

として、下の方を有効にします。

その後、gogocを起動すると、無事に接続できました。

試しにMiredoでIPv6接続しているUbuntuから、gogoNETでIPv6接続しているDebianにpingを打って接続してみると、

~$ ping6 2406:a000:xxxx:xxxx::xxxx
PING 2406:a000:xxxx:xxxx::xxxx(2406:a000:xxxx:xxxx::xxxx) 56 data bytes
64 bytes from 2406:a000:xxxx:xxxx::xxxx: icmp_seq=1 ttl=55 time=1299 ms
64 bytes from 2406:a000:xxxx:xxxx::xxxx: icmp_seq=2 ttl=55 time=404 ms
64 bytes from 2406:a000:xxxx:xxxx::xxxx: icmp_seq=3 ttl=55 time=401 ms
64 bytes from 2406:a000:xxxx:xxxx::xxxx: icmp_seq=4 ttl=55 time=427 ms
64 bytes from 2406:a000:xxxx:xxxx::xxxx: icmp_seq=5 ttl=55 time=424 ms
64 bytes from 2406:a000:xxxx:xxxx::xxxx: icmp_seq=6 ttl=55 time=413 ms
64 bytes from 2406:a000:xxxx:xxxx::xxxx: icmp_seq=7 ttl=55 time=397 ms
64 bytes from 2406:a000:xxxx:xxxx::xxxx: icmp_seq=8 ttl=55 time=423 ms
64 bytes from 2406:a000:xxxx:xxxx::xxxx: icmp_seq=9 ttl=55 time=421 ms
64 bytes from 2406:a000:xxxx:xxxx::xxxx: icmp_seq=10 ttl=55 time=421 ms
^C
— 2406:a000:xxxx:xxxx::xxxx ping statistics —

ということで、ちゃんと帰ってきました。

Freenet6にユーザーIDとパスワードを使って接続すると、固定IPv6アドレスになる他に、そのアドレスをDNSで引けるようになる、という大きなメリットがあります。FQDNは「(ユーザーID).broker.freenet6.net」になります。
早速、Ubuntu(miredo接続)からsshで試してみました。

~$ ssh xxxxxx.broker.freenet6.net
The authenticity of host ‘xxxxxx.broker.freenet6.net (2406:a000:xxxx:xxxx::xxxx)’ can’t be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘xxxxxx.broker.freenet6.net’ (RSA) to the list of known hosts.
xxx@xxxxxx.broker.freenet6.net’s password:
Linux va50j 2.6.26-2-686 #1 SMP Thu Jan 27 00:28:05 UTC 2011 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have new mail.
~$

ということで、無事に成功しました!

IPv6を使う他の方法(Debian+gogoNET その3)・・・一応接続成功

正しいクライアントは、gogoCLIENT で gogonet.gogo6.com からソースのアーカイブの形で持ってきます。(コンパイルの手間を省こうとしたのが tspc で嵌った原因でした・・・)

# tar xvfz gogoc-1_2-RELEASE.tar.gz

で展開します。

READMEをみると、依存関係がいろいろ書いてあるので、apt-get でインストールしました。

# apt-get install make
# apt-get install gcc
# apt-get install g++

で、いよいよコンパイルです。

va50j:~/gogoc-1_2-RELEASE# make platform=linux all
cd gogoc-tsp && make all
make[1]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-tsp’ に入ります
Building gogoCLIENT for platform linux …
Building gogoc-pal module …
make[2]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-pal’ に入ります
Setting up PAL for platform linux …
Building PAL objects for platform linux …
make[3]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-pal/platform’ に入ります
make[4]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-pal/platform/common’ に入ります
gcc -c -O2 -I/root/gogoc-1_2-RELEASE/gogoc-pal/defs -Iinc -DPLATFORM=\”linux\” -D_REENTRANT -o /root/gogoc-1_2-RELEASE/gogoc-pal/objs/pal_version.o src/pal_version.c
make[4]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-pal/platform/common’ から出ます
make[4]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-pal/platform/unix-common’ に入ります
make[4]: `platform-obj’ に対して行うべき事はありません.
make[4]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-pal/platform/unix-common’ から出ます
make[3]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-pal/platform’ から出ます

Creating libgogocpal.a PAL library for platform linux …
a – /root/gogoc-1_2-RELEASE/gogoc-pal/objs/pal_version.o

Copying PAL header files for platform linux …
make[3]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-pal/platform’ に入ります
make[4]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-pal/platform/common’ に入ります
make[4]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-pal/platform/common’ から出ます
make[4]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-pal/platform/unix-common’ に入ります
make[4]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-pal/platform/unix-common’ から出ます
make[3]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-pal/platform’ から出ます

make[2]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-pal’ から出ます
Building gogoc-config module …
make[2]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-config’ に入ります
mkdir -p objs
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/namevalueparser.o src/namevalueparser.cc
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/config.o src/config.cc
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/namevalueconfig.o src/namevalueconfig.cc
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/gogocvalidation.o src/gogocvalidation.cc
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/gogocconfig.o src/gogocconfig.cc
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/gogoc_c_wrapper.o src/gogoc_c_wrapper.cc
gcc -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/gogocuistrings.o src/gogocuistrings.c
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/haccess_devmap_c_wrap.o src/haccess_devmap_c_wrap.cc
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/haccessdevicemappingconfig.o src/haccessdevicemappingconfig.cc
mkdir -p lib
ar cru lib/libgogocconfig.a objs/namevalueparser.o objs/config.o objs/namevalueconfig.o objs/gogocvalidation.o objs/gogocconfig.o objs/gogoc_c_wrapper.o objs/gogocuistrings.o objs/haccess_devmap_c_wrap.o objs/haccessdevicemappingconfig.o
ranlib lib/libgogocconfig.a
mkdir -p bin
make[2]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-config’ から出ます
Building gogoc-messaging module …
make[2]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-messaging’ に入ります
mkdir -p objs
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/ipcserver.o src/ipcserver.cc
src/ipcserver.cc: In member function ‘virtual bool gogocmessaging::IPCServer::WaitReady(long unsigned int)’:
src/ipcserver.cc:133: warning: suggest parentheses around assignment used as truth value
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/ipcclient.o src/ipcclient.cc
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/servent.o src/servent.cc
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/message.o src/message.cc
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/messagesender.o src/messagesender.cc
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/communicationsmgr.o src/communicationsmgr.cc
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/clientmsgtranslator.o src/clientmsgtranslator.cc
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/clientmsgsender.o src/clientmsgsender.cc
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/servermsgtranslator.o src/servermsgtranslator.cc
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/servermsgsender.o src/servermsgsender.cc
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/clientmessengerimpl.o src/clientmessengerimpl.cc
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/guimessengerimpl.o src/guimessengerimpl.cc
g++ -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/gogoc_c_wrapper.o src/gogoc_c_wrapper.cc
gcc -O2 -I. -I../gogoc-pal/out_inc -I../gogoc-pal/defs -Wall -D_REENTRANT -DNDEBUG -c -o objs/gogocuistrings.o src/gogocuistrings.c
mkdir -p lib
ar cru lib/libgogocmessaging.a objs/ipcserver.o objs/ipcclient.o objs/servent.o objs/message.o objs/messagesender.o objs/communicationsmgr.o objs/clientmsgtranslator.o objs/clientmsgsender.o objs/servermsgtranslator.o objs/servermsgsender.o objs/clientmessengerimpl.o objs/guimessengerimpl.o objs/gogoc_c_wrapper.o objs/gogocuistrings.o
ranlib lib/libgogocmessaging.a
mkdir -p bin
make[2]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-messaging’ から出ます
mkdir -p /root/gogoc-1_2-RELEASE/gogoc-tsp/objs
mkdir -p /root/gogoc-1_2-RELEASE/gogoc-tsp/bin
make[2]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-tsp/src/lib’ に入ります
gcc -O2 -Wall -I/root/gogoc-1_2-RELEASE/gogoc-tsp/platform/linux -I/root/gogoc-1_2-RELEASE/gogoc-tsp/include -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-pal/out_inc -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-pal/defs -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-config -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-messaging -D_REENTRANT -c base64.c -o /root/gogoc-1_2-RELEASE/gogoc-tsp/objs/base64.o
gcc -O2 -Wall -I/root/gogoc-1_2-RELEASE/gogoc-tsp/platform/linux -I/root/gogoc-1_2-RELEASE/gogoc-tsp/include -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-pal/out_inc -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-pal/defs -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-config -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-messaging -D_REENTRANT -c cli.c -o /root/gogoc-1_2-RELEASE/gogoc-tsp/objs/cli.o
gcc -O2 -Wall -I/root/gogoc-1_2-RELEASE/gogoc-tsp/platform/linux -I/root/gogoc-1_2-RELEASE/gogoc-tsp/include -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-pal/out_inc -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-pal/defs -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-config -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-messaging -D_REENTRANT -c config.c -o /root/gogoc-1_2-RELEASE/gogoc-tsp/objs/config.o
gcc -O2 -Wall -I/root/gogoc-1_2-RELEASE/gogoc-tsp/platform/linux -I/root/gogoc-1_2-RELEASE/gogoc-tsp/include -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-pal/out_inc -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-pal/defs -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-config -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-messaging -D_REENTRANT -c lib.c -o /root/gogoc-1_2-RELEASE/gogoc-tsp/objs/lib.o
gcc -O2 -Wall -I/root/gogoc-1_2-RELEASE/gogoc-tsp/platform/linux -I/root/gogoc-1_2-RELEASE/gogoc-tsp/include -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-pal/out_inc -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-pal/defs -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-config -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-messaging -D_REENTRANT -c log.c -o /root/gogoc-1_2-RELEASE/gogoc-tsp/objs/log.o
gcc -O2 -Wall -I/root/gogoc-1_2-RELEASE/gogoc-tsp/platform/linux -I/root/gogoc-1_2-RELEASE/gogoc-tsp/include -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-pal/out_inc -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-pal/defs -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-config -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-messaging -D_REENTRANT -c md5c.c -o /root/gogoc-1_2-RELEASE/gogoc-tsp/objs/md5c.o
gcc -O2 -Wall -I/root/gogoc-1_2-RELEASE/gogoc-tsp/platform/linux -I/root/gogoc-1_2-RELEASE/gogoc-tsp/include -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-pal/out_inc -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-pal/defs -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-config -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-messaging -D_REENTRANT -c buffer.c -o /root/gogoc-1_2-RELEASE/gogoc-tsp/objs/buffer.o
gcc -O2 -Wall -I/root/gogoc-1_2-RELEASE/gogoc-tsp/platform/linux -I/root/gogoc-1_2-RELEASE/gogoc-tsp/include -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-pal/out_inc -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-pal/defs -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-config -I/root/gogoc-1_2-RELEASE/gogoc-tsp/../gogoc-messaging -D_REENTRANT -c bufaux.c -o /root/gogoc-1_2-RELEASE/gogoc-tsp/objs/bufaux.o
bufaux.c:54:24: error: openssl/bn.h: そのようなファイルやディレクトリはありません
In file included from bufaux.c:55:
/root/gogoc-1_2-RELEASE/gogoc-tsp/include/bufaux.h:34: error: expected declaration specifiers or ‘…’ before ‘BIGNUM’
/root/gogoc-1_2-RELEASE/gogoc-tsp/include/bufaux.h:35: error: expected declaration specifiers or ‘…’ before ‘BIGNUM’
bufaux.c:84: error: expected declaration specifiers or ‘…’ before ‘BIGNUM’
bufaux.c: In function ‘buffer_put_bignum’:
bufaux.c:86: warning: implicit declaration of function ‘BN_num_bits’
bufaux.c:86: error: ‘value’ undeclared (first use in this function)
bufaux.c:86: error: (Each undeclared identifier is reported only once
bufaux.c:86: error: for each function it appears in.)
bufaux.c:96: warning: implicit declaration of function ‘BN_bn2bin’
bufaux.c: At top level:
bufaux.c:115: error: expected declaration specifiers or ‘…’ before ‘BIGNUM’
bufaux.c: In function ‘buffer_get_bignum’:
bufaux.c:131: warning: implicit declaration of function ‘BN_bin2bn’
bufaux.c:131: error: ‘value’ undeclared (first use in this function)
make[2]: *** [/root/gogoc-1_2-RELEASE/gogoc-tsp/objs/bufaux.o] エラー 1
make[2]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-tsp/src/lib’ から出ます
make[1]: *** [build-gogoc] エラー 1
make[1]: ディレクトリ `/root/gogoc-1_2-RELEASE/gogoc-tsp’ から出ます
make: *** [all] エラー 2
va50j:~/gogoc-1_2-RELEASE#

ということで、エラーになってしまいました。しょんぼり。でも、BIGNUMをキーワードに調べてみると、

# apt-get install libssl-dev

とするとよいという情報があったので、試してみたところ、無事に make が通るようになりました。

# make platform=linux installdir=/usr/local/gogoc install

とすると、あっさりインストールは成功しました。この場合、設定ファイルは /usr/local/gogoc/bin の下にあるものが使われるようで、デフォルトではAnonymousな接続になるようです。
で、起動してみます。

va50j:/usr/local/gogoc/bin# ./gogoc
gogoCLIENT v1.2-RELEASE build Feb 18 2011-03:14:49
Built on ///Linux va50j 2.6.26-2-686 #1 SMP Thu Jan 27 00:28:05 UTC 2011 i686 GNU/Linux///
Received a TSP redirection message from server anonymous.freenet6.net (1200 Redi).ction
The server redirection list is [ anon-amsterdam.freenet6.net, anon-taipei.freenet6.net, anon-montreal.freenet6.net ].
The optimized server redirection list is [ anon-taipei.freenet6.net, anon-montreal.freenet6.net, anon-amsterdam.freenet6.net ].

ということであっさり動作しました。早速、ifconfig で見てみます。

va50j:/usr/local/gogoc/bin# ifconfig
eth0 Link encap:イーサネット ハードウェアアドレス xx:xx:xx:xx:xx:xx
inetアドレス:192.168.x.xx ブロードキャスト:192.168.1.255 マスク:255.255.255.0
inet6アドレス: fe80::200:xxxx:xxxx:xxxx/64 範囲:リンク
UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
RXパケット:28712 エラー:0 損失:0 オーバラン:41 フレーム:41
TXパケット:12941 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:20038867 (19.1 MiB) TXバイト:2025306 (1.9 MiB)

lo Link encap:ローカルループバック
inetアドレス:127.0.0.1 マスク:255.0.0.0
inet6アドレス: ::1/128 範囲:ホスト
UP LOOPBACK RUNNING MTU:16436 メトリック:1
RXパケット:2321 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:2321 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:0
RXバイト:1143936 (1.0 MiB) TXバイト:1143936 (1.0 MiB)

tun Link encap:不明なネット ハードウェアアドレス 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet6アドレス: 2001:xxx:xxxx:xxxx::xx:xxxx/128 範囲:グローバル
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1280 メトリック:1
RXパケット:6 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:500
RXバイト:416 (416.0 B) TXバイト:0 (0.0 B)

ということで、トンネルデバイスが無事に生成されました。
さらに、traceroute6 で見てみます。

va50j:/usr/local/gogoc/bin# traceroute6 www.kame.net
traceroute to www.kame.net (2001:200:dff:fff1:216:3eff:feb1:44d7), 30 hops max, 40 byte packets
1 2001:c08:xxxx:xxxx::xx:xxxx (2001:c08:xxxx:xxxx::xx:xxxx) 37.097 ms 38.083 ms 37.652 ms
2 2001:c08:xx:x::xxx:x (2001:c08:xx:x::xxx:x) 37.156 ms 36.605 ms 37.127 ms
3 2001:c08:xx::xx (2001:xxx:xx::xx) 38.393 ms 37.964 ms 37.471 ms
4 2001:288:xxx:x::x (2001:288:xxx:x::x) 36.975 ms 36.603 ms 37.433 ms
5 2001:c08:7f::21 (2001:c08:7f::21) 67.240 ms 66.780 ms 67.386 ms
6 2001:200:0:fe00::9c4:11 (2001:200:0:fe00::9c4:11) 69.532 ms 70.818 ms 74.719 ms
7 2001:200:0:1802:20c:dbff:fe1f:7200 (2001:200:0:1802:20c:dbff:fe1f:7200) 69.995 ms 70.116 ms 72.552 ms
8 ve42.foundry4.nezu.wide.ad.jp (2001:200:0:11::66) 72.891 ms 72.831 ms 72.275 ms
9 cloud-net1.wide.ad.jp (2001:200:0:1c0a:218:8bff:fe43:d1d0) 72.556 ms 72.521 ms 72.461 ms
10 2001:200:dff:fff1:216:3eff:feb1:44d7 (2001:200:dff:fff1:216:3eff:feb1:44d7) 72.831 ms 72.773 ms 72.737 ms
va50j:/usr/local/gogoc/bin#

ということで、無事につながりました。

・・・が、再起動して、無線APの下に移動(同時にクラスCの固定プライベートアドレスからクラスBのDHCPアドレスに移動)したら、つながらなくなっちゃいました。(泣)

・・・なんてことになって、しょんぼりしながらこの日記をここまで書いた後、改めて試してみたら何故かつながって、www.kame.netに接続したら無事に亀が踊りました。時計が結構ずれてたからなにか関係あるのかな??
とにかくよくわかりません・・・(泣)