PPTP クライアント

提供: ArchWiki
2021年10月7日 (木) 15:35時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (→‎参照)
ナビゲーションに移動 検索に移動

関連記事

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

警告: PPTP プロトコルは本質的にセキュアではありません。詳しくは http://poptop.sourceforge.net/dox/protocol-security.phtml を参照。

インストール

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

“EAP: unknown authentication type 26; Naking” と表示される場合、/etc/ppp/options.pptpを開いて refuse-chaprefuse-mschap の行をコメントアウトして、以下のようにトンネルファイルのファイルエントリオプションを追加してください:

/etc/ppp/peers/<tunel>
# written by pptpsetup
pty "pptp vpn.foo.com --nolaunchpppd"
lock
noauth
nobsdcomp
nodeflate
name USERNAME
remotename vpn
file /etc/ppp/options.pptp
ipparam vpn
require-mppe-128

備考

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