PPTP サーバー

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

Point-to-Point Tunneling Protocol (PPTP) は仮想プライベートネットワークを実装するための手段です。PPTP は PPP パケットをカプセル化する TCP や GRE トンネルを使ってコントロールチャンネルを使用します。

このエントリでは Arch で PPTP サーバーを作成する方法を示します。

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

インストール

公式リポジトリpptpdインストールしてください。

設定

ヒント: 設定例が /usr/share/doc/pptpd ディレクトリに存在します。

典型的な設定は以下のようになります:

/etc/pptpd.conf
# See man pptpd.conf to get more information about this file

# pppd options file. By default, /etc/ppp/options is used
option /etc/ppp/options.pptpd

# Server IP in local network
localip 192.168.1.2

# IP address ranges used to assign IPs to new connecting clients
# Here we define two ranges for our 192.168.1.* subnet: 234-238 and 245
remoteip 192.168.1.234-238,192.168.1.245

それから pppd の options ファイルを作成してください。この例では /etc/ppp/options.pptpd になります:

/etc/ppp/options.pptpd
# Read man pppd to see the full list of available options

# The name of the local system for authentication purposes
name pptpd

# Refuse PAP, CHAP or MS-CHAP connections but accept connections with
# MS-CHAPv2 or MPPE with 128-bit encryption
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128

# Add entry to the ARP system table
proxyarp

# For the serial device to ensure exclusive access to the device
lock

# Disable BSD-Compress and Van Jacobson TCP/IP header compression
nobsdcomp
novj
novjccomp

# Disable file logging
nolog

# DNS servers for Microsoft Windows clients. Using Google's public servers here
ms-dns 8.8.8.8
ms-dns 8.8.4.4
ノート: ファイルのパース時に問題が発生しないように、上記のファイルの最後の行は空行にしてください。

そしてユーザーを認証するための認証情報を記述したファイルを作成します:

/etc/ppp/chap-secrets
# <username> <server name> <password> <ip addresses>
user2    pptpd    123    *

上記の場合、ユーザー名が user2 でパスワードが 123 で認証されます。

sysctl 設定ファイル /etc/sysctl.d/30-ipforward.conf を作成してカーネルのパケット転送を有効化し、サブネットにアクセスできるクライアントに接続できるようにします (インターネット共有#パケット転送の有効化も参照):

/etc/sysctl.d/30-ipforward.conf
net.ipv4.ip_forward=1

最後に sysctl に設定の変更を反映させてください:

# sysctl --system

iptables ファイアウォールの設定

iptables の設定を変更して PPTP クライアントからアクセスできるようにします:

# Accept all packets via ppp* interfaces (for example, ppp0)
iptables -A INPUT -i ppp+ -j ACCEPT
iptables -A OUTPUT -o ppp+ -j ACCEPT

# Accept incoming connections to port 1723 (PPTP)
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT

# Accept GRE packets
iptables -A INPUT -p 47 -j ACCEPT
iptables -A OUTPUT -p 47 -j ACCEPT

# Enable IP forwarding
iptables -F FORWARD
iptables -A FORWARD -j ACCEPT

# Enable NAT for eth0 и ppp* interfaces
iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE
iptables -A POSTROUTING -t nat -o ppp+ -j MASQUERADE
ノート: "eth0" はサーバーに接続するときに使用する実際のイーサネットインターフェイスに置き換えてください。

新しい iptables のルールを保存するには:

# iptables-save > /etc/iptables/iptables.rules

詳細は Iptables を読んでください。

UFW ファイアウォールの設定

ufw の設定を変更して PPTP クライアントがアクセスできるようにします。

/etc/default/ufw のデフォルトの転送ポリシーを変更してください:

/etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

そして /etc/ufw/before.rules を編集して、ヘッダの後、*filter 行の前に以下のコードを追加します:

/etc/ufw/before.rules
# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Allow traffic from clients to eth0
-A POSTROUTING -s 172.16.36.0/24 -o eth0 -j MASQUERADE

# commit to apply changes
COMMIT

pptp のポート 1723 を開きます:

ufw allow 1723

ufw を再起動して変更を適用してください:

ufw disable
ufw enable

サーバーの起動

pptpd.service を使って PPTP サーバーを起動・有効化してください。

トラブルシューティング

他のサービスと同じように、エラーを調査するときは Systemd#トラブルシューティング を見てください。

クライアント側で Error 619 が発生する

/etc/pptpd.conf 内の logwtmp オプションを探してコメントアウトしてください。このオプションが有効になっている場合、クライアントの接続と切断を記録するのに wtmp が使われます。

#logwtmp

pptpd[xxxxx]: Long config file line ignored

/etc/pptpd.conf の最後の行に空行を追加してください [1]

ppp0: ppp: compressor dropped pkt

クライアントからサーバーに接続する際にこのエラーが表示される場合、以下のスクリプトを /etc/ppp/ip-up.d/mppefixmtu.sh に追加してください:

#!/bin/sh
CURRENT_MTU="`ip link show $1 | grep -Po '(?<=mtu )([0-9]+)'`"
FIXED_MTU="`expr $CURRENT_MTU + 4`"
ip link set $1 mtu $FIXED_MTU

スクリプトに実行可能属性を付与:

# chmod 755 /etc/ppp/ip-up.d/mppefixmtu.sh

参照: [2]