[General]natcracker で固定 IP を使おう(2002.1203)

注意書き。

この文章は、やっぱり Debian GNU/Linux(unstable) をベースに書かれています。 RedHat など、他の distribution をお使いの方は、適切に読みかえるなり、 他の文書を当たるなりしてください。

いうまでもないですが、設定をするのは自己責任で。 特に Internet にグローバル接続をするわけですから、 他の人に迷惑をかけぬようお気をつけください。

natcracker とは

natcracker とは Mobile Internet Services, Inc. の提供するトンネリングサービスです。 仮想トンネルを介して固定のグローバル IP をもらうことができます。

以下の設定を行う前に、契約が済んでおり、 また natcracker 側での設定 *1 が済んでいる必要があります。

VTun - Virtual Tunnels over TCP/IP networks

natcracker はトンネリングを行うために、 VTun を利用しています。 そのため、事前に vtun が install されている必要があります。 VTun は debian package として 登録されている ので、

% apt-get install vtun

とするだけで、install することができます。

今回手元で利用した vtun は次のバージョンのものです。

% dpkg -l vtun
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name           Version        Description
+++-==============-==============-============================================
ii  vtun           2.5-4          Virtual Tunnel over TCP/IP Networks

また、VTun は linux kernel の "Universal TUN/TAP device driver support(CONFIG_TUN)" という機能を 利用してトンネリングを行います。 この機能を kernel 組み込みもしくは module にしておきましょう。

VTun を設定しよう

VTun の設定は

の二つで行います。 *2

vtund.conf は natcracker 登録時に例として表示されたものを参考に、 何カ所か変更を加えるだけで、流用することができます。

options {
    port            5000;
    # コマンドのフルパスは環境により異なります
    ifconfig        /sbin/ifconfig;
    route           /sbin/route;
}

NC00**** {
    pass    *************;

    up {
        ifconfig       "%% 210.***.***.*** pointopoint 210.***.***.***";

        # 現在の default route (192.168.0.***)を
        # natcracker のサーバへの route として設定します。
        route          "add -host 43.***.***.*** gw 192.168.0.***";

        # natcracker との接続を default gateway として設定します。
        route          "add default gw 210.***.***.***";
    };

    down {
        route           "delete default gw 210.***.***.***";
    };
}

vtund-start.conf は /etc/init.d/vtund から起動する場合に利用します。 vtund-start.conf を適切に設定しておくと、 LinuxBox 起動時に VTun を起動させておくことができます。 内容はコマンドラインの引数と同じもの *5 を一行記述するだけです。

NC00**** 43.***.***.***

devfsd と TUN device

VTun は TUN device の interface として /dev/misc/net/tun を利用します。 *6 しかし、devfsd の設定では、/dev/misc/net/tun は存在しません。

そこで、devfsd の設定を少し変更します。 /etc/devfsd/conf.d/tun として次のファイルを設置して、devfsd を再起動します。

% cat /etc/devfs/conf.d/tun
REGISTER     ^net/tun$   COPY $devname misc/net/tun
UNREGISTER   ^net/tun$   CFUNCTION GLOBAL unlink misc/net/tun
% /etc/init.d/devfsd restart

この設定をしておくと、tun module が読み込まれると同時に /dev/misc/net/tun を生成するようになります。 *7

% ls -l /dev/misc/net/tun
ls: /dev/misc/net/tun: No such file or directory
% modprobe tun
% ls -l /dev/misc/net/tun
crw-r-----    1 root     root      10, 200 Dec  3 17:26 /dev/misc/net/tun

実際に動かしてみよう

実際に natcracker に接続するには、

% /etc/init.d/vtund start
Starting vtund client NC00**** to 43.***.***.***.

もしくは

% vtund NC00**** 43.***.***.***

とします。 接続された場合は TUN interface が生成されているはずなので、確認します。

% ifconfig tun0
tun0      Link encap:Point-to-Point Protocol
          inet addr:210.***.***.***  P-t-P:210.***.***.***  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

また、routing table が変更されていることも確認します。

% route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
43.***.***.***  192.168.0.***   255.255.255.255 UGH   0      0        0 eth0
210.***.***.*** *               255.255.255.255 UH    0      0        0 tun0
localnet        *               255.255.255.0   U     0      0        0 eth0
default         210.***.***.*** 0.0.0.0         UG    0      0        0 tun0

log は /var/log/daemon.log に出力されるので、 もし正しく動作しない場合はこれを確認するとよいでしょう。 また、動作確認をとりながら設定を変更する場合は、

% vtund -n NC00**** 43.***.***.***

とすると、出力が /var/log/daemon.log ではなく console になるので、 設定をいじるのに便利です。

終わりに。

ここでは、natcracker を利用して固定グローバル IP を得る方法を紹介しました。 しかし、この方法ではすべての packet が natcracker を介して配送されるため、 通信速度が遅くなりますし、また natcracker がサービス停止をした際には、 routing を変更しない限り通信を行うことができなくなってしまいます。

iproute2 と複数インターネット接続 では、 この routing に関する話を解決していますので、 気になる方は参考にしてください。


*1 私の場合、フォームから契約をした翌日の夕方には設定されたようです
*2 vtund-start.conf はおそらく Debian 独自のファイルでしょう。
*3 TUN interface は利用終了と同時に、自動的に削除されます
*4 これを変更しない場合、クライアントから接続を受けることができません。
*5 natcracker からもらった ID と、サーバの IP アドレスを指定します。
*6 他にも、/dev/tun0 〜 tun255 までを検索するようです。
*7 コピーではなく、symlink を使うとうまく動きません。なぜなんでしょうね。