tinc を使えば、仮想プライベートネットワーク(Virtual Private Network:VPN)を構築できる。VPNでは、2台のコンピュータがインターネットのような安全でないネットワークを介して通信するが、仮想ネットワーク上のホスト間のトラフィックはすべて暗号化される。
tincは、ノートPCを自宅のWi-Fi(無線LAN)ルータに接続する場合にも使える。すでにWPA2を利用して、正当なホストしか無線LANルータに接続できないようにしているかもしれない。だが、無線LANに接続するノートPCに固定アドレスを割り当てることはできないだろう。そのため、ノートPC自体のSSHデーモンに接続したり、ノートPC上のNFS共有フォルダにアクセスしたりするには、無線LANルータがそのノートPCに割り当てたIPアドレスを割り出さなければならない。だが、ノートPCと自宅のサーバでtincを起動しておけば、こうした推測は不要になる。ノートPCの固定のVPN IPアドレスを使って接続できるからだ。
tincでは、マシンごとに複数のVPNを構築し、個別に起動することができる。tincに必要なカーネル側の機能は、ユニバーサルTUN/TAPドライバだけである。このドライバは、カーネルモジュールとしてディストリビューションのカーネルパッケージ内にたいてい用意されている。このカーネルモジュールが利用可能かどうかを確かめるには、rootとして「modprobe tun」を実行したうえでdmesgの内容をチェックする。そこにTUN/TAPドライバに関する記述があれば、デバイス「/dev/net/tun」が追加されている。見つからない場合は、カーネルをコンパイルする必要があるだろう。
tincのパッケージは、Ubuntu GutsyのUniverseリポジトリに収録されているほか、openSUSEユーザであれば1-Clickインストールという手軽な方法が使える。また、Fedora 7用はあるが今のところFedora 8用はない。ソースからビルドする場合は、lzo、openssl、zlibの開発版パッケージをインストールしておくこと(でないとMakefileを生成できない)。また、プレフィックスや各種パスを「./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var」のように明示的に指定する必要があるだろう。
tincによって新たなVPNを構築すると、新しいネットワークインタフェースが設定される。VPN上への情報の送信には、カーネルによる通常のパケットルーティングが使われる。たとえば、192.168.1.222~192.168.1.232のアドレスプールからランダムにIPアドレスが割り当てられるノートPCが1台あるとする。ローカルネットワークには1台のサーバが接続されており、このサーバは192.168.1.221という固定IPアドレスを持つ。ここでサブネット192.168.11.0/24をVPN用に使うとすると、たとえばサーバには192.168.11.100、ノートPCには固定の192.168.11.7を割り当てることができる。
これでサーバは、ネットワークインタフェースカード(NIC)に割り当てられた192.168.1.221とVPN IPアドレスとして割り当てられた192.168.11.100という2つのIPアドレスを持つことになる。ノートPCのほうは、無線LANルータへの接続時に192.168.1.222~192.168.1.232のいずれかのアドレスが与えられるが、VPN IPアドレスとしては常に192.168.11.7を使用する。LAN上のほかのホストは、サブネット192.168.11.0/24宛てのトラフィックを上記のサーバに送信すれば、ノートPCのVPNアドレス192.168.11.7を使ってノートPC上のサービスに接続できるはずである。またノートPC側では、先ほどのサーバをデフォルトルートの転送先にするなどして、トラフィックが適切にサーバにルーティングされるようにする必要がある。
