趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • miredoでIPv6を使ってみる

    投稿日 2016年 7月 24日 コメントはありません

    NATではないIPアドレスが欲しいのだけど、V4は無理・・・なので、トンネル越しのIPv6を試してみた。

    といっても、LinuxMint18では非常に簡単で、SynapticでToredoのLinux実装らしいmiredoをインストールすると、ifconfigでteredoというデバイスが増えてIPv6が使えるようだ。

    ・・・が、再起動するといなくなっている。

    $ sudo service miredo start

    とすると復活するのだが。

    調べてみると、起動中に “teredo-debian.remlab.net” というホスト名を解決できないために起きる既知の問題の模様。


  • アジア地区IPv4枯渇まであと1日

    投稿日 2011年 4月 14日 コメントはありません

    ページの右下につけている『IPv4枯渇時計』ですが、ふと見てみたらいよいよ明日(4月15日)がX-Day(アジア地区の地域インターネットレジストリ・・・APNICにアドレスがなくなる日)になっています。
    /8ブロックの最終配布が今年の2月3日で、その際には「夏頃になくなるかも・・・」なんて言っていたような気がするのですが、どんどん早まってとうとう明日になってしまいました。(ここ一週間で一気に縮まった気がします)

    このあとJPNICの在庫がなくなって、ISPの所有分だけになって・・・・そして本当になくなる日ももう間もなくなのでしょうが、その後がどうなるのか、非常に興味深いところです。


  • IPv6のアドレスに思う

    投稿日 2011年 3月 5日 コメントはありません

    ここしばらく、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をインストール

    投稿日 2011年 3月 4日 コメントはありません

    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に接続する

    投稿日 2011年 3月 3日 コメントはありません

    現在の状態では、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を設定変更します。


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

    投稿日 2011年 3月 2日 コメントはありません

    外からアクセス可能となると、いろいろ心配になるものです。ルートキットの存在については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で時刻を自動的に合わせる

    投稿日 2011年 3月 1日 コメントはありません

    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を使う

    投稿日 2011年 2月 28日 コメントはありません

    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

    投稿日 2011年 2月 27日 コメントはありません

    無事に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アドレス

    投稿日 2011年 2月 26日 コメントはありません

    ようやく 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.
    ~$

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