PPTP-VPN に接続する (CentOS 5.6) - Linux の使い方
Linux で PPTP サーバーへ接続する
たとえば VPN サーバー機能を搭載したルーター BUFFALO WHR-G301N へ Linux から接続するには PPTP クライアントを設定して、接続を行う必要があります。
CentOS 5.6 の場合、rpmforge リポジトリから "pptp" パッケージと "pptp-setup" パッケージをインストールする必要がありました。rpmforge リポジトリを使うには CentOS 5.4 のシステムアップデート取得先としてリポジトリを追加する で記したような方法で、あらかじめ準備をしておく必要があります。
rpmforge を利用する準備ができていれば、次のようにして、PPTP クライアントに必要なパッケージのインストールを行います。
yum install pptp
yum install pptp-setup
これで Linux を PPTP クライアントとして利用するためのパッケージのインストールは完了です。
なお、pptp を動作させるためには pppd も必要なので、場合によっては "pppd" パッケージも別途インストールする必要があるかもしれません。
インストールが完了したら、接続設定は "pptp-setup" を利用すれば簡単です。
たとえば、次のような接続設定を行いたい場合を見てみます。
PPTP サーバー pptp.server.xxx.xx.jp 接続アカウント ACCOUNT 接続パスワード PASSWORD これを設定したい場合には、次のようにして、設定ファイルを作成します。
pptpsetup --create "PPTP1" --server "pptp.server.xxx.xx.jp" --username "ACCOUNT" --password "PASSWORD" --encrypt
このようにすることで、PPTP 接続設定が "/etc/ppp/peers/" ディレクトリ内に "PPTP1" という名前で作成されて、パスワードについては "/etc/ppp/chap-secrets" ファイル内に記載されます。
このとき、"--create" の後に付加した接続設定名には、ハイフン ( - ) はつけられないようでした。アンダースコア ( _ ) なら大丈夫なようです。
設定ができたら、後は次のようにして、先ほど作成した設定ファイル名 "PPTP1" を呼び出してあげることで、接続を開始できました。
pppd call PPTP1 updetach
ここで "updetach" は、接続が完了するまでの間、フォアグラウンドで接続処理を行うためのオプションだそうです。
ちなみに切断は、pppd プロセスを終了させれば良いようですけど、もし PPPoE でプロバイダーに接続する で記したように PPPoE 接続なども行っている環境ではそれも pppd で接続されるようなので、"pkill -x pppd" などで終了させると、そういった別の接続も終了させてしまう感じでした。
目的の PPTP 接続のみを終了させたい場合には、次のようにするのが良さそうです。
pkill -f "^/usr/sbin/pppd call PPTP1\s"
このようにすることで、設定ファイル名 "PPTP1" が指定された pppd プロセスのみを終了させてくれるので、ほかの pppd に依存する接続を終了させずに済むようになると思います。
pptpsetup が作成する設定ファイル
pptpsetup を実行すると、接続設定ファイルとして次のようなものが "/etc/ppp/peers/" ディレクトリ内に作成されます。
# written by pptpsetup
pty "pptp pptp.server.xxx.xx.jp --nolaunchpppd"
lock
noauth
nobsdcomp
nodeflate
name ACCOUNT
remotename PPTP1
ipparam PPTP1
require-mppe-128
このように、"pppd" オプションと "pptp" に渡す引数が指定されたファイルが出来上がっていました。
他にも必要に応じて、"nodefaultroute"(この接続をゲートウェイとして使用しない), "persist"(切断時に再接続を試みる), "proxyarp"(ARP プロキシを有効にする)など、設定を追記しても良いかもしれません。
これらの設定は、接続設定ファイルに個別にでなくても、"/etc/ppp/options.pptp" に記載することでも設定できるようです。
このほかに、"/etc/ppp/chap-secret" ファイルにも、次のようなアカウント情報が記載されます。
# added by pptpsetup for pptp_tachibanadai
ACCOUNT PPTP1 "PASSWORD" *
記載は順に "アカウント名", "remotename に設定されている名称", "パスワード", "IP アドレス" となるようです。
ただ "IP アドレス" については、試してみた感じでは、ここで IP アドレスを指定しても何も影響はない感じでした。これは PPPoE サーバーなどを構築した場合に、接続元の IP アドレスを限定するために使用するもののような感じでした。
ルーティング設定をスクリプトで自動化するには
たとえば、Linux ルーター上で PPTP 接続を行い、取得できたネットワークへのルーティング情報を自動的にシステムに登録したいような場合には、次のようなスクリプトで、pppd call コマンドの戻り値から得た情報を解析して、それをルーティングテーブルに書き込むことも可能でした。
ここで、冒頭で組み込んでいるスクリプト "/etc/ez-net/get_network.sh" というのは、以前に シェルスクリプトでネットワークアドレスを計算する でお話した、ネットワークアドレスを取得するシェルスクリプト関数 "get_network" が定義されたファイルです。
このような感じのスクリプトを実行することで、少なくとも pptp 1.7.2 の PPTP 接続から、その出力結果から、PPTP で接続された外部プライベートネットワークへアクセスするためのルーティング設定を追加することができました。
なお、PPTP の切断については、次のようなスクリプトを用意すれば大丈夫な感じです。
PPTP が切断されて ppp インターフェイスが消滅すれば、自動的にルーティングテーブルも消去される感じなので、これでひとまずの終了処理になるのではないかと思います。