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に接続したら無事に亀が踊りました。時計が結構ずれてたからなにか関係あるのかな??
とにかくよくわかりません・・・(泣)

IPv4/IPv6メーターをつけてみました

右下のウィジェットにインテックシステム研究所さんIPv4/IPv6メーターIPv4枯渇時計をつけてみました。IPv6の普及具合とIPv4のX-Dayが目に見える・・・・かもしれない。

インテックシステム研究所さんでは他にも、IPv4/IPv6 checkerなんてものもあって、真ん中のチェックボタンを押すとアクセスしているIPv4/IPv6アドレスを表示してくれます。

Internet Metricsというページでは、IPv4/v6関連のネットワーク計測結果が見れるのですが、色々興味深いです。例えば、

  • IPv4/IPv6の遅延比較を全体と日本で見比べてみると、全体ではv4/v6どちらが遅いということははっきりしないのだが、日本では明らかにv6の方が遅延が大きいことがわかる。枯渇枯渇と叫ばれていても、海外と比較して実態として準備が進んでいないことを表しているのでしょう。
  • OS別アクセス比率IPv4というページでは、今なおWindowsXPの比率が40%くらいを占めているのがわかる。さらによく見ると、小刻みにヒゲ状のグラフになっていて、これは週末になるとWindowsXPの比率が下がることを示していると思う。つまり、パーソナルユースではWindows7などへの置き換えが進んでいるのだけど、ビジネスユースでは遅れているということなのでしょう。
  • OS別アクセス比率IPv6では今年に入って上記のヒゲ状のものが見えます。週末にIPv6にトライする人が増えたということでしょうかね?

などなど。

IPv6を使う他の方法(Debian+gogoNET その2)・・・失敗事例

gogoNETを使う debian PC の準備ができたので、実際にインストールを行ってみる。

インストールしてみる。(これはやってはいけない!)

# apt-get install tspc
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています
状態情報を読み取っています… 完了
以下の特別パッケージがインストールされます:
radvd
以下のパッケージが新たにインストールされます:
radvd tspc
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 12 個。
104kB のアーカイブを取得する必要があります。
この操作後に追加で 438kB のディスク容量が消費されます。
続行しますか [Y/n]?
取得:1 http://ftp.jaist.ac.jp lenny/main radvd 1:1.1-3 [62.1kB]
取得:2 http://ftp.jaist.ac.jp lenny/main tspc 2.1.1-6.1 [42.0kB]
104kB を 0s で取得しました (275kB/s)
未選択パッケージ radvd を選択しています。
(データベースを読み込んでいます … 現在 120112 個のファイルとディレクトリがインストールされています。)
(…/radvd_1%3a1.1-3_i386.deb から) radvd を展開しています…
未選択パッケージ tspc を選択しています。
(…/tspc_2.1.1-6.1_i386.deb から) tspc を展開しています…
man-db のトリガを処理しています …
radvd (1:1.1-3) を設定しています …
Starting radvd:
* /etc/radvd.conf does not exist or is empty.
* See /usr/share/doc/radvd/README.Debian
* radvd will *not* be started.
tspc (2.1.1-6.1) を設定しています …
Setting up IPv6 tunnel: tspGetCapabilities error 2: SOCKET_ERROR
if you are using udp, there is probably no udp listener at anon.freenet6.net

All transports failed, quitting

Error is 2: SOCKET_ERROR
TSP session done
invoke-rc.d: initscript tspc, action “start” failed.
dpkg: tspc の処理中にエラーが発生しました (–configure):
サブプロセス post-installation script はエラー終了ステータス 1 を返しました
以下のパッケージの処理中にエラーが発生しました:
tspc
E: Sub-process /usr/bin/dpkg returned an error code (1)
#

となって、エラーになってしまった。

調べてみると、apt-get でインストールできるクライアントは非常に古いものらしく、NGなのだそうだ。

で、

# apt-get purge tspc

とやってもエラーになってうまくいかず、嵌ってしまった・・・。

さらに調べると、

# rm /etc/init.d/tspc

としてから

# apt-get purge tspc

とすれば削除できるとのこと。

これだと依存関係で入った radvd が削除されないので、併せて、

# apt-get purge radvd

で削除して戻した。

参考:

IPv6を使う他の方法(Debian+gogoNET その1)

WindowsでのTeredo、Ubuntu環境でのMiredoによるIPv6接続を試してみましたが、他にgogoNET(旧Freenet6)というIPv6トンネルサービスがあるようですので、かつてインストールしたDebian(でも最近は電源を落としたままだった)上で試してみることにしました。調べてみると(旧Freenet6時代の話しか見えないのですが)固定のIPv6アドレスが取れるようなのです。

利用するにはまず gogonet.gogo6.com にアクセスし、サインアップします。姓名、メールアドレスと誕生日、パスワードに続いて、居住国や都市、アンケートなどに答えるとサインアップできます。

次に、実際に設定を行う前に、今回使用するDebianマシンもIPv6経由で外に晒されることになりますから、Firewall(iptablesベース)を設定します。今回は簡単にWebminで設定し、デフォルトで全ての接続を破棄し、必要なポートだけ開けることにしました。

受信の設定は以下の通りとしました。DNS、ssh、ident、http、https、webminだけを利用可能な設定です。webminは実際にはIPv4のローカルアドレス(=プライベートアドレス)からしか接続を受け付けないようにしてあります。

許可 : もし 着信インターフェースが eth0 でない
許可 : もし プロトコルが TCP である 且つ TCPフラグ ACK が ACK である
許可 : もし 接続の状態が ESTABLISHED である
許可 : もし 接続の状態が RELATED である
許可 : もし プロトコルが UDP である 且つ 宛先ポートが 1024:65535 である 且つ 発信元ポートが 53 である
許可 : もし プロトコルが ICMP である 且つ ICMPタイプが 0 である
許可 : もし プロトコルが ICMP である 且つ ICMPタイプが 3 である
許可 : もし プロトコルが ICMP である 且つ ICMPタイプが 4 である
許可 : もし プロトコルが ICMP である 且つ ICMPタイプが 11 である
許可 : もし プロトコルが ICMP である 且つ ICMPタイプが 12 である
許可 : もし プロトコルが TCP である 且つ 宛先ポートが 22 である
許可 : もし プロトコルが TCP である 且つ 宛先ポートが 113 である
許可 : もし プロトコルが TCP である 且つ 宛先ポートが 80 である 且つ 接続の状態が NEW である
許可 : もし プロトコルが TCP である 且つ 宛先ポートが 443 である 且つ 接続の状態が NEW である
許可 : もし プロトコルが TCP である 且つ 宛先ポートが 10000 である 且つ 接続の状態が NEW である

送信の設定は以下の通りとしました。DNS、http(apt-getのため)のみ開けてあります。

許可 : もし 発信インタフェースが eth0 でない
許可 : もし 接続の状態が ESTABLISHED である
許可 : もし 接続の状態が RELATED である
許可 : もし プロトコルが ICMP である 且つ ICMPタイプが echo-reply である
許可 : もし プロトコルが ICMP である 且つ ICMPタイプが echo-request である
許可 : もし プロトコルが TCP である 且つ 宛先ポートが 80 である 且つ 接続の状態が NEW である
許可 : もし プロトコルが TCP である 且つ 宛先ポートが 53 である 且つ 接続の状態が NEW である
許可 : もし プロトコルが UDP である 且つ 宛先ポートが 53 である
許可 : もし プロトコルが UDP である 且つ 宛先ポートが 67 である

とりあえず、外部からNATを越えてローカル(正確には専用セグメントですが)のIPv6のhttpサーバにアクセスすることを目標にします。

~~続く~~

Linux版TrueCryptを導入する

Windowsで使っている暗号化した外付けHDDをLinux(Ubuntu)からもアクセスしたいので、TrueCryptをUbuntuにインストールすることにしてみました。

まず、www.truecrypt.org からStandard – 32-bit(x86) を選択して truecrypt-7.0a-linux-x86.tar.gz をダウンロードします。

ダウンロードしたtar.gzを展開すると、シェルアーカイブ形式のファイルが一つ出てきます。これをコマンドラインから

$ ./truecrypt-7.0a-setup-x86

として、シェルアーカイブを起動します。すると、ライセンスの確認や、アンインストールの方法(’truecrypt-uninstall.sh’ を使うとのこと)などが表示されて、管理者パスワードの入力要求に答えると、あっという間に終わります。(あっけない感じです)

インストール完了後は「アプリケーション」→「アクセサリ」→「TrueCrypt」で起動できるようになります。操作は基本的にWindowsと同じですが、Linuxはドライブレターがないので、そこは異なります。コンテナファイルを開く際に「Option」を選ぶとマウントポイントを指定できるので、適当なディレクトリを指定してやるとそこにマウントできます。外付けHDDはNTFSでフォーマットしてあるので、ReadOnlyでマウントしました。

Ubuntuのセキュリティチェックをする

UbuntuをはじめとしたLinuxの場合、Kasperskyやノートンのような統合的なセキュリティ対策アプリケーションがないので、個別に対策しなくてはなりません。

ウイルス対策についてはKlamAV(ClamAVのフロントエンド)でやっていますが、セキュリティホールについてはどうするべきかこれまでよくわかりませんでした。

で、ファイアウォールに関してはGufwでiptablesベースの対応ができることがわかりました。

次にすでに仕込まれてしまったrootkitなどについてどうするのか調べていたところ、chrootkitとrkhunterというrootkit検出ツールがUbuntuではSynapticパッケージマネージャから利用可能なことがわかりました。

で、まずはインストールします。例によって Synaptic から検索キーワードに「rootkit」と入れると、両方とも出てくるのでインストール指定します。(その依存関係解決の過程で unhide も勝手に選択されます)

インストールはサクッと終わります。

早速、chrootkit を使ってチェックしてみます。

$ sudo chrootkit

で主要なコマンドが改変されていないか、既知のルートキットの痕跡や怪しいファイルがないかをチェックしてくれます。

次に、rkhunter を使ってチェックしてみます。

$ sudo rkhunter -c

で主要なコマンドの改変、既知のルートキットやマルウェアの痕跡、既知のバックドアに使われるポート、アカウントのチェック、システム設定ファイル、その他のファイルシステムのチェックをしてくれます。

自分のところでは、最後のファイルシステムのチェックで /dev と隠しファイル/ディレクトリで Warning がでました。詳細を /var/log/rkhunter.log で確認すると、

[17:32:05] Performing filesystem checks
[17:32:05] Info: Starting test name ‘filesystem’
[17:32:05] Info: SCAN_MODE_DEV set to ‘THOROUGH’
[17:32:05]   Checking /dev for suspicious file types         [ Warning ]
[17:32:05] Warning: Suspicious file types found in /dev:
[17:32:05]          /dev/shm/pulse-shm-4192393294: data
[17:32:05]          /dev/shm/pulse-shm-1822237287: data
[17:32:05]          /dev/shm/pulse-shm-3897017937: data
[17:32:05]          /dev/shm/ecryptfs-xxx-Private: ASCII text
[17:32:05]          /dev/shm/pulse-shm-2720418268: data
[17:32:06]   Checking for hidden files and directories       [ Warning ]
[17:32:06] Warning: Hidden directory found: /etc/.java
[17:32:06] Warning: Hidden directory found: /dev/.udev
[17:32:06] Warning: Hidden directory found: /dev/.initramfs

となっていました。で、/dev/shm はいわゆるRAMディスクで、再起動の度に消えてしまいますので、問題ではないように思えます。後の3つは調べてもちょっと調べたくらいでは今ひとつわかりません。ただ、それほど危ない感じでもないので様子をみることにします。

Ubuntuでシステム時計が狂うのを直す

UbuntuをWindowsとのデュアルブートやUSBブートで使っていると気づくのですが、UbuntuはシステムのRTC(リアルタイムクロック)をUTC(世界標準時)と決め打ちでインストールしてしまうようで、さらにNTPでネットワークから時刻を拾ってきてシステムの時計を修正してしまうようです。

そのため、USBやデュアルブートでUbuntuを使った後、Windows(自分の場合はXP)を使うと時計が9時間ずれてしまっています。

で、調べて見たところ、Ubuntu日本語フォーラムに回答がありました。読んでみると、Ubuntu8.10あたりから起きているようです。

修正方法は簡単で、/etc/default/rcS の中に、「UTC=yes」という記述があるので、それを「UTC=no」に修正するだけでした。

これで再起動後にWindowsの時計が狂っている、ということもなくなりました。