簡単にVPNを構築できるツール、tinc:Network Masters
VPNの構築は今でこそさほど難しくないが、少し凝った使い方をしようと思えば、意外にその情報は少ない。VPNにかんするあなたのわがままに応えてくれるtincという有用なソフトウェアを紹介しよう。
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側では、先ほどのサーバをデフォルトルートの転送先にするなどして、トラフィックが適切にサーバにルーティングされるようにする必要がある。
tincでは、VPNを作成するたびに設定ファイルが「/etc/tinc」のサブディレクトリ(VPN名がその名前になる)内に用意される。このように設定ディレクトリがネットワーク名で分けられることで、ネットワーク別の設定ファイルをマージしなくても複数のVPNを起動できる。tinc自体の利用形態はクライアント/サーバモデルに限定されてはいないが、サーバマシンはノートPCのIPアドレスを事前に知っているわけではなく、自分からはVPN接続を開始できないので、ノートPCをクライアントと見なすと分かりやすい。
ここからは、サーバ側の設定ファイルについて説明する。以下の例では、VPNの名前を「my_home_vpn」としている。「/etc/networks」内の各ネットワークに名前をつけ、tincの設定でも同じ名前を使うようにするとよい。「/etc/networks」にエントリを追加しておけば、「route」のようなコマンドの出力が見やすくなる。サーバ側「tinc.conf」ファイルの内容がきわめて単純なのは、tincデーモンがすべてのネットワークインタフェースでクライアントからの接続待ちを行うからだ。
tincは、各種スクリプトが使える場合には、それらを呼び出して特定のタスクを実行する。例えば、VPN接続の確立にはtinc-upスクリプトが、切断にはtinc-downが使用される。これらのスクリプトによって、ルーティングテーブルの変更、NFS共有フォルダのマウント/アンマウント、通知用メッセージの表示など、さまざまな処理を行わせることができる。tinc-upとtinc-downの両スクリプトは「/etc/tinc /my_home_vpn」ディレクトリにある(パスの最後の要素は指定したVPN名になる)。tinc-upスクリプトの内容は、どんなホストでもほぼ同じだ。違いはVPN起動時にtincのネットワークインタフェースに割り当てるIPアドレスだけで、このサーバでは192.168.11.100となる。tinc-downスクリプトの方は、どのホストでも同じ内容でよい。
この例では、VPN上のホストがサーバとノートPCの2台しかない。サーバの設定ファイル名はtincserverであり、これはtinc.confファイルに記された「Name」パラメータに一致させる必要がある。ノートPC用の設定ファイルは、そこに指定されたIPアドレスあてのトラフィックだけをそのPCにルーティングするようにtincに指示するとともに、そのマシンの公開鍵の情報も持つ。クライアントの公開鍵は、「tinc.conf」ファイルが用意されていれば「tincd -n my_home_vpn -K」コマンドで生成できる。ノートPC用設定ファイルに記述する公開鍵は、ノートPCの「/etc/tinc/my_home_vpn/hosts /laptop」というファイルから取得すればよい。同様に、サーバ側の公開鍵を生成すると、サーバマシンの「/etc/tinc /my_home_vpn/hosts/tincserver」というファイルに公開鍵が出力される。これらの公開鍵は秘密鍵ではないので、双方のマシンの設定ファイルに追加しておくとよいだろう。そうすれば、どちらのマシンでもファイルの内容がまったく同じになって都合がよい。以下に、サーバ側の各設定ファイルの内容を示す。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
サーバ側の設定は以上だ。ノートPC側では、tinc.confとtinc-upの2つのファイルを変更するだけでよい。tinc.conf内のマシン名を変えるのは当然として、tinc-upにはtincserverマシンに接続するための記述を追加する(以下を参照)。そのほかの設定ファイルについては、マニュアルを参照してほしい。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
最初にVPNをテストする際には、以下のようにtincをデバッグモードにしてフォアグラウンドで実行し、問題なく接続できるか確認するとよい。 tincdを次のようにして実行したコンソールでCtrl+cキーを押すと、tincはverboseモードになり、パケットの取得や送出が分かるようになる。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
tincによる接続が確立されると、マシンに新しいネットワークインタフェースが設定され、VPN上の各マシンへの新たなルートができ上がる。tincによってVPN接続が確立されているときのノートPC側のネットワークの設定内容を以下に示す。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
tinc.confの内容が単純で、tincのhostsディレクトリ内にある各ファイルの記述をマシンごとに変えなくてよいので、2台のホストによるVPNの設定はごく短時間で済む。マスカレードによるファイアウォールで保護されたマシンでtincによるVPNを構築する設定例が参考になるだろう。また、tincを使ってネットワークスイッチの動作を再現し、VPNを特殊なネットワークアプリケーションで使うことも可能だ。割り当てられるIPアドレスが不確実になりがちなノートPCやモバイル機器上のサービスに接続できるtincは、すでにネットワークのセキュリティが(WPA2などで)保護されている場合にも役立つ。
Ben Martinは10年以上前からファイルシステムに携わっている。博士号を持ち、現在はlibferris、各種ファイルシステム、検索ソリューションを中心としたコンサルティング業務に従事。
関連記事
- ネットワークセキュリティ管理者のためのディストリビューション Network Security Toolkit
ネットワークの監視・解析・セキュリティについて責任を持たなければならないネットワークセキュリティ管理者にとって、「Network Security Toolkit」は常用するに値する。 - ネットワーク上でのシステム管理を容易にするPuppet
システム管理コマンドを複数のマシンに対して発行できるPuppetは、宣言型言語を学ぶ手間が掛かるが、ソフトウェアのインストールや設定の手間を大きく軽減してくれる強力なツールだ。 - Firewall Builderによるファイアウォールの設定
IPトラフィックのフィルタリング設定に役立つFirewall Builderは、定義したパケットフィルタリングポリシーとその実装を分けることで、ハードウェアに依存しない運用に役立ってくれる。 - さらなる機能向上を果たした最新版Nmap
誕生から10年を迎えるポートスキャニングツール「Nmap」。最新版ではGUIフロントエンドであるZenmapなども採用され、操作性は格段に向上した。これまでNmapに縁のなかったユーザーであってもぜひとも一度試してみることをお勧めしたい。 - システム管理者が作り上げるネットワーク管理ツール Func
Funcと呼ばれるネットワーク管理ツールは、OpenViewやTivoliのような大規模製品を必ずしも必要としない人にとって有益なものになるだろう。
Copyright © 2010 OSDN Corporation, All Rights Reserved.