PPTP クライアント

提供: ArchWiki
移動先: 案内検索

関連記事

pptpclient は Microsoft PPTP プロトコルを実装するプログラムです。pptpclient を使うことで、学校や仕事場で使われている Microsoft VPN ネットワーク (あるいは PPTP ベースの VPN) に接続することができます。

PPTP クライアントのインストール

pptpclient パッケージをインストールしてください。

設定

pptpclient を設定する際は、ネットワークの管理者から以下の情報を得る必要があります:

  • VPN サーバーの IP アドレスとホスト名。
  • 接続する際に使用するユーザー名。
  • 接続する際に使用するパスワード。
  • 認証 (Windows) ドメイン名。ネットワークによっては必要ありません。

また、トンネルに名前を付ける必要があります。

pptpsetup を使って設定

root で pptpsetup ツールを実行することでトンネルを設定・削除できます。例:

pptpsetup --create my_tunnel --server vpn.example.com --username alice --password foo --encrypt
pptpsetup --delete my_tunnel

トンネルを設定したら接続が可能です。

手動で設定

pptpsetup を使わずに、必要な設定ファイルを手動で編集する方法もあります。

options ファイルの編集

/etc/ppp/options ファイルは VPN クライアントのセキュリティオプションを設定します。ネットワークの接続に問題が発生する場合、オプションを緩める必要があるかもしれません。このファイルには、最低でも lock, noauth, nobsdcomp, nodeflate オプションを記述する必要があります。

/etc/ppp/options
# Lock the port
lock
# We don't need the tunnel server to authenticate itself
noauth
# Turn off compression protocols we know won't be used
nobsdcomp
nodeflate
# We won't do PAP, EAP, CHAP, or MSCHAP, but we will accept MSCHAP-V2
# (you may need to remove these refusals if the server is not using MPPE)
refuse-pap
refuse-eap
refuse-chap
refuse-mschap

chap-secrets ファイルの編集

/etc/ppp/chap-secrets ファイルにはトンネルの認証に使われる認証情報が含まれます。重要な情報を記述するので、このファイルは root だけしかアクセスできないようにしてください:

# chmod 0600 /etc/ppp/chap-secrets

ファイルを編集してください。ファイルのフォーマットは以下の通りです:

/etc/ppp/chap-secrets
<DOMAIN>\\<USERNAME> PPTP <PASSWORD> *

括弧で囲まれた部分を実際の値に置き換えてください。接続にドメインが必要ない場合は <DOMAIN>\\ は省いてください。

ノート: パスワードに $ などの特殊文字が含まれる場合、パスワードはダブルクォーテーションで囲ってください (")。
警告: ファイルには平文でパスワードを記述するので、ファイルの防護に注意してください。

トンネルに名前を付ける

/etc/ppp/peers/<TUNNEL> ファイルにはトンネルごとの設定オプションを記述します。<TUNNEL> は VPN 接続に使用するトンネルの名前に置き換えてください。ファイルの中身は以下のようになります:

/etc/ppp/peers/<TUNNEL>
pty "pptp <SERVER> --nolaunchpppd"
name <DOMAIN>\\<USERNAME>
remotename PPTP
require-mppe-128
file /etc/ppp/options
ipparam <TUNNEL>

上のセクションと同じように、接続にドメインが必要ない場合は <DOMAIN>\\ は省いてください。<SERVER> は VPN サーバーのリモートアドレスに、<DOMAIN> はユーザーが属するドメインに、<USERNAME> はサーバーに接続する際に使用するユーザー名に、<TUNNEL> は接続の名前に置き換えてください。

ノート:
  • remotename PPTP/etc/ppp/chap-secrets ファイルの <PASSWORD> が確認されます。
  • MPPE のサポートが必要ない場合、上記ファイルや /etc/ppp/options から require-mppe-128 オプションを削除してください。

接続

正しく設定されていることを確認するために、root で以下を実行:

# pon <TUNNEL> debug dump logfd 2 nodetach

設定が問題なければ、pon コマンドは終了しません。正しく接続できることを確認できたら、コマンドを終了してください。

ノート: さらに ip addr show を実行して新しいデバイス ppp0 が存在することを確認しても良いでしょう。

VPN に通常接続するには、次を実行:

# pon <TUNNEL>

<TUNNEL> は先に名前を付けたトンネルの名前に置き換えてください。上のコマンドは root で実行する必要があります。

ルーティング

VPN に接続したら、VPN サーバー上のものにアクセスできるようになっているはずです。リモートネットワークにアクセスするには、ルーティングテーブルに新しいルートを追加する必要があります。

ノート: 設定によっては、VPN に接続するたびにルーティング情報を毎回追加する必要があります。

ルートを追加する方法については詳しくは、次の記事を読んでください。例が大量に載っています: PPTP Routing Howto

スプリットトンネリング

宛先が VPN のネットワークになっているパケットは VPN インターフェイス (通常は ppp0) を通るようにルーティングする必要があります。以下のようにルートを作成してください:

# ip route add 192.168.10.0/24 dev ppp0

上記の設定で宛先が 192.168.10.* のトラフィックは全て VPN のインターフェイス (ppp0) を通過するようになります。

全てのトラフィックをルーティング

全てのトラフィックで VPN 接続を通したい場合、以下を実行してください:

# ip route add default dev ppp0
ノート: 全てのトラフィックが VPN を通るようにルーティングすると接続速度が低下する可能性があります。

/etc/ppp/ip-up.d で全てのトラフィックをルーティング

ノート: /etc/ppp/ip-up.d/ のスクリプトは VPN 接続が確立したときに呼び出されます。
/etc/ppp/ip-up.d/01-routes.sh
#!/bin/bash

# This script is called with the following arguments:
# Arg Name
# $1 Interface name
# $2 The tty
# $3 The link speed
# $4 Local IP number
# $5 Peer IP number
# $6 Optional ``ipparam'' value foo

ip route add default via $4

スクリプトには実行可能属性を付与してください。

/etc/ppp/ip-up.d でポートを使ってスプリットトンネリング

ノート: /etc/ppp/ip-up.d/ のスクリプトは VPN 接続が確立したときに呼び出されます。
/etc/ppp/ip-up.d/01-routebyport.sh
#!/bin/bash

# This script is called with the following arguments:
# Arg Name
# $1 Interface name
# $2 The tty
# $3 The link speed
# $4 Local IP number
# $5 Peer IP number
# $6 Optional ``ipparam'' value foo

echo 0 > /proc/sys/net/ipv4/conf/$1/rp_filter
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr

ip route flush table vpn
ip route add default via $5 dev $1 table vpn

# forward only IRC ports over VPN
iptables -t mangle -A OUTPUT -p tcp -m multiport --dports 6667,6697 -j MARK --set-mark 0x1
iptables -t nat    -A POSTROUTING -o $1 -j MASQUERADE

ip rule  add fwmark 0x1 pri 100 lookup vpn
ip rule  add from $4 pri 200 table vpn
ip route flush cache

スクリプトには実行可能属性を付与して、/etc/iproute2/rt_tables に vpn テーブルを追加してください:

201 vpn

切断

VPN から切断するには以下を実行:

# poff <TUNNEL>

<TUNNEL> はトンネルの名前に置き換えてください。

トラブルシューティング

クライアントの接続がタイムアウトしてしまう場合、クライアントのファイアウォールで GRE が通過できるようになっているか確認してください。iptables の場合、次のコマンドが必要です:

# iptables -A INPUT -p 47 -j ACCEPT

"LCP: timeout sending Config-Requests" でクライアントがタイムアウトする場合、適当なモジュールがロードされていません:

# modprobe nf_conntrack_pptp nf_conntrack_proto_gre

参照

pptpclient の設定に関する詳細情報はウェブサイトで閲覧できます: pptpclient ウェブサイト。この記事の中身はウェブサイトに書かれている Ubuntu のハウツーを元にしています。Ubuntu のハウツーには起動時に接続する方法などのヒントが書かれています。例を修正することでデーモン化あるいはスクリプトにすることで、設定を自動化することが可能です。