PPTP サーバー
関連記事
Point-to-Point Tunneling Protocol (PPTP) は仮想プライベートネットワークを実装するための手段です。PPTP は PPP パケットをカプセル化する TCP や GRE トンネルを使ってコントロールチャンネルを使用します。
このエントリでは Arch で PPTP サーバーを作成する方法を示します。
目次
インストール
設定
典型的な設定は以下のようになります:
/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
新しい 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]