Net: Debian GNU/Linux 3.1 と Mac OS X 10.4.9 に hamachi をインストール

※このエントリーは、自宅サーバで公開していたものを、こちらの Blog に転載しました。

NAT 間にあるホスト同士の VPN も張れるという、 VPN ソフト「hamachi」を Debian GNU/Linux と Mac OS X 10.4.9 (Power PC) にインストールしたときの個人的なメモ。

なお、下記の情報はいつものごとく無保証なので注意。

一応、linux 側でネットワークを作成し、Mac 側がそこに接続に行く、という感じで設定してみた。(つまり、linux 側がサーバ的な感じ。)

■ linux 側

  • hamachi 実行ユーザを作成
    # useradd -d /home/hamachi -m hamachi
    # groupadd hamachi
    # usermod -g hamachi hamachi

  • hamachi のサイトよりダウンロードしたアーカイブを展開して、インストール
    # tar xfvz hamachi-0.9.9.9-20-lnx.tar.gz
    # cd hamachi-0.9.9.9-20-lnx
    # make install
    # modprobe tun
    # cd /dev
    # ./MAKEDEV tun
    # tuncfg

    Debian GNU/Linux の場合、modprobe tun; cd /dev; ./MAKEDEV tun を実行しないと、tuncfg でエラーが表示された。
    tuncfg は、hamachi を実行する際は、常に起動しておかないといけないみたい。
    root での作業はここまで。

  • hamachi ユーザになって hamachi でネットワークを作成する
    # su hamachi
    $ hamachi-init
    $ hamachi start
    $ hamachi login
    $ hamachi set-nick <nickname-linux>
    $ hamachi create <network>
    $ hamachi go-online <network>
    • <nickname-linux> は任意のニックネーム名を設定
    • <network> は作成したいネットワーク名を設定
    • どうやら、ham0 と言うインタフェースに hamachi で作成した VPN の IP アドレスが割り振られる模様。(hamachi を起動した状態で、/sbin/ifconfig すると確認できる)

■ Mac OS X 側

  • tun/tap driver for Mac OS X をインストール
    Mac OS X 版の hamachi では、tun/tap driver for Mac OS X というドライバが必要なので、インストールしておく。
  • hamachi のサイトよりダウンロードしたアーカイブを展開して、インストール
    $ tar xfvz hamachi-0.9.9.9-20-osx.tar.gz
    $ cd hamachi-0.9.9.9-20-osx
    $ sudo -s
    # ./install
    # tuncfg
    # exit

    先にも述べたが、tun/tap driver for Mac OS X がインストールされていないと、エラーとなる。
    root 権限で実行するコマンドは、./install; tuncfg 。
    tuncfg は、hamachi を実行する際は、常に起動しておかないといけないみたい。
    root 権限での作業があるのはここだけ。

  • hamachi で linux 側で作成したネットワークに接続する
    $ hamachi-init
    $ hamachi start
    $ hamachi login
    $ hamachi set-nick <nickname-osx>
    $ hamachi join <network>
    $ hamachi go-online <network>
    • <nickname-osx> は任意のニックネーム名を設定
    • <network> は linux 側で作成したネットワーク名を設定
    • どうやら、tap0 と言うインタフェースに hamachi で作成した VPN の IP アドレスが割り振られる模様。(hamachi を起動した状態で、ifconfig すると確認できる)

  • VPN を終了する場合
    $ hamachi logout
    $ hamachi stop

■動作確認

とりあえず、Mac 側を、linux マシンがつながっているネットワークとは全く別のネットワーク (片方は NAT 内) に接続し、その上で、hamachi 経由で張られた VPN ネットワーク上で、ping でネットワークの疎通を確認するところまでテスト。双方とも、きちんと通信できているようだった。

ちなみに、Mac 側では、一旦 hamachi join <network>; hamachi go-online <network> して、ネットワークの設定をあらかじめしておくと、次回以降の接続時は、下記のコマンドだけで、あらかじめ設定したネットワークに接続できる模様。

$ sudo tuncfg
$ hamachi start
$ hamachi login

前回 hamachi logout; hamachi stop していない場合は、hamachi start してから一旦 hamachi logout して、再度 hamachi login しないとダメみたい。

■参考にさせていただいたサイト

◆追記

hamachi の設定が完了済みの環境で、VPN を接続したり切断したりするスクリプトを作ってみた。

■ linux 側の自動起動スクリプト

  • サーバ起動と同時に自動起動させたいので、下記の内容のスクリプトを /etc/init.d/hamachi に用意する。
    #!/bin/bash
    #
    # hamachi         Start the hamachi Daemon.
    #

    PATH=/bin:/usr/bin:/sbin:/usr/sbin
    RUN_USER=hamachi
    NAME=hamachi
    DAEMON=/usr/bin/$NAME
    TUNCFG_NAME=tuncfg
    TUNCFG_DAEMON=/sbin/$TUNCFG_NAME
    CONF=/home/hamachi/.hamachi

    case "$1" in
      start)
        echo "Starting tuncfg: $TUNCFG_NAME"
            start-stop-daemon --start --exec $TUNCFG_DAEMON
            sleep 2
            echo "Starting hamachi: $NAME"
            su - $RUN_USER -c "$DAEMON -c $CONF start; sleep 2; $DAEMON -c $CONF login;"
        ;;

      stop)
        echo "Stopping tuncfg: $NAME"
            su - $RUN_USER -c "$DAEMON -c $CONF logout; sleep 2; $DAEMON -c $CONF stop;"
            sleep 2
        echo "Stopping tuncfg: $TUNCFG_NAME"
            start-stop-daemon --stop --exec $TUNCFG_DAEMON
        ;;

      *)
        echo "Usage: /etc/init.d/$NAME {start|stop}"
        exit 1
        ;;
    esac

  • あとは update-rc.d コマンドでリンクを張る
    # update-rc.d hamachi start 99 2 3 4 5 . stop 10 0 1 6 .

■ Mac OS X 側の手動起動用スクリプト

  • hamachi 起動スクリプト hamachi-on.sh
    任意の場所に下記の内容のスクリプトを、ファイル名 hamachi-on.sh 、パーミッション 755 で作成する。
    #!/bin/sh
    sudo /usr/sbin/tuncfg
    sleep 1
    /usr/bin/hamachi start
    sleep 1
    /usr/bin/hamachi login

  • hamachi 終了スクリプト hamachi-off.sh
    任意の場所に下記の内容のスクリプトを、ファイル名 hamachi-off.sh 、パーミッション 755 で作成する。
    #!/bin/sh
    /usr/bin/hamachi logout
    sleep 1
    /usr/bin/hamachi stop
    sleep 1
    sudo killall tuncfg

後は、両マシンでしかるべきネットワーク設定を行い、linux マシン側で hamachi が走っている状況で、Mac OS X 側のスクリプト hamachi-on.sh を実行することで VPN が接続できるはず。(同様に Mac OS X 側のスクリプト hamachi-off.sh で VPN が切断できる、はず。)