この文章は、やっぱり Debian GNU/Linux(unstable) をベースに書かれています。 RedHat など、他の distribution をお使いの方は、適切に読みかえるなり、 他の文書を当たるなりしてください。
私は、もともと IIJ4U を ISP として 使っていたのですが、最近 natcracker を 利用して固定 IP アドレスを得ることができました。 (natcracker で固定 IP を使おう 参照)
210.***.***.a 210.***.***.b Flets ADSL natcracker | : |PPPoE :VTun |<ppp0> :<tun0> | : +-(eth1)------------------+ | Linux PC | +---------(eth0)----------+ | | LocalNetwork 192.168.0.c
しかし、natcracker で紹介されている接続方法では、 default gateway を natcracker への virtual tunnel に変更してしまうため、
しかし、default gateway を IIJ4U に設定したままでは、 natcracker 側との通信をうまく行うことができません。 そこで、ここでは LinuxBox を Advanced router として設定することで、 この問題を解決します。
LinuxBox を Advanced router として利用するには iproute2 を用います。 iproute2 は debian package として 登録されている ので、
% apt-get install iproute
とするだけで、install することができます。
また Linux kernel の
という機能を利用しますので、これらを kernel に組み込んでおく必要があります。 *3
Linux の Advanced router というモードは
の二つの概念から成り立っています。
route というのは今までの routing table と同じものだと思ってかまいません。 source address や destination address などから どこの host に relay すればよいか決定する table を保持しています。 route は設定によっては複数用意することができます。
rule というのは、route を選択するために利用します。 rule には source address や destination address、interface device などを 設定することができ、これらを元に route に振り分けます。
イメージとしては、ipchains のチェインに近いと思います。
iproute2 を使って Advanced router の設定をするためには、 主に ip コマンドを利用します。 また、一部の設定は今まで通り ifconfig や route を利用して 設定することもできるようです。 *4
route は ip コマンドに route オプションをつけて、
% ip route add 0/0 dev tun0 table 1 % ip route add 192.168.0.0/24 via 172.0.0.1 table 2 % ip route del 210.0.0.0/8 dev ppp1 table 3 % ip route list table 1
のように変更します。 末尾の table n というのは table id で、 1-252 の間で自由に指定することができます。 *5
次に、rule は ip コマンドに rule オプションをつけて
% ip rule add from 0/0 table 1 pref 100 % ip rule add dev ppp0 table 5 pref 101 % ip rule del from 210.0.0.0/8 table 3 % ip rule
のように変更します。 add の直後に分岐条件を記述し、 条件に合った場合に選択する routing table を指定します。 末尾の pref n というのは preference と呼ばれる priority code で、 低いものほど優先的に条件チェックが行われるようです。
他にも ip コマンドは interface device の登録なども行うことができるのですが、 私は利用していませんので割愛します。 *6
では、実際に設定をしてみましょう。 次のようなルールを考えてみます。
この場合、2. と 3. は既に通常の routing で設定することができるので、 route コマンドで設定してしまいます。
% route add -net 192.168.0.0/24 dev eth0 % route default gw 210.***.***.***
ここで設定した内容は main table に保存されているので、
% ip route list table main ip route list table main 192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.33 default via 210.***.***.*** dev ppp0
とするとみることができます。
次に、1. の設定をします。まずは route をルールに従って、
% ip route add 0/0 dev tun0 table 1
のように作成します。 そして、この route へ分岐するための rule を
% ip route add 210.***.***.*** table 1 pref 100
という風に作成します。 このとき、rule を main table への参照よりも優先度を高く設定しておくことで、 tun0 から受け取った packet のみを特別に routing することができます。
ここでは iproute2 を使った複数インターネット接続の方法を紹介しました。 事例として、自宅で試してみた PPPoE + natcracker の接続を挙げましたが、 実際には企業などで ATM + ppp などで利用することが多いと思われます。
そういう場所では iproute2 に加えて、 tc を利用した QoS も使っているかもしれません。 これも興味深い題材なので、気が向いたら実験してみたいですね:)
こういった資料がなかったら、くじけていたでしょう。多大なる感謝を捧げます。
*1 無論、natcracker は通信速度の保証はありません。
*2 routing を IIJ4U に戻せば正しく動作はしますが、非常に面倒です:p
*3 他にも、知らずのうちに設定しているオプションがあるかもしれません。
*4 多くの文書には使わない方がよい、と記述されていますが、うまく組み合わせて使う分には問題ないようです。
*5 0,253-255 は default で利用されている table id です。これらの table を削除するのであれば、利用できます。
*6 やはり、なれている ifconfig を使うのが一番です。