Debian GNU/Linux での pptpd 設定 (サーバ側で NAPT する場合)

※自宅サーバ等で pptpd を設定し、サーバ側で NAPT する必要が無い場合は、「Debian GNU/Linux での pptpd 設定 (サーバ側で NAPT しない場合)」を参照下さい。

・・・

pptpd の設定で混乱して悔しいので、再度設定してみたメモ。

とは言っても、ほとんど「さくらのVPSでiPhone用の野良WiFi通信傍受対策のPPTPサーバ(VPN)を設定したメモ – nori_no のメモ」を参考にさせて頂いた。

今回の設定は NAPT (IP Masquerade) する場合。(VPN 側ネットワークからの通信は、サーバのグローバル IPv4 アドレスである、aaa.bbb.ccc.ddd を経由してインターネットに出ていく)

※以前、混乱した原因は、NAPT する場合とそうでない場合がごっちゃになったからだと思う。

■前提

  • WAN 側インタフェースは eth0 でグローバル IPv4 アドレスは aaa.bbb.ccc.ddd
  • VPN 側インタフェースは ppp0 ~ 9 で IPv4 アドレスは 192.168.64.1
  • VPN クライアント側に当てる IPv4 アドレスは 192.168.64.11 ~ 192.168.64.20
  • OS は Debian GNU/Linux 6.0 squeeze
  • PPTP サーバ名は pptpd
  • DNS サーバは PPTP サーバ上で動作しており、VPN 側ネットワークからの問い合わせに応答する様に設定しているものとする

■設定

サーバ側設定手順としては、以下の通り。

・pptpd をインストール
# apt-get install pptpd

・/etc/pptpd.conf を修正

option /etc/ppp/pptpd-options
logwtmp
localip 192.168.64.1
remoteip 192.168.64.11-20

※ localip はサーバ自身の IPv4 アドレスではなく、VPN 側の PPTP サーバのもの。(任意のプライベート IPv4 アドレス)
※前回は、ここを取り違えていた・・・。

・/etc/ppp/pptpd-options を修正

name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 192.168.64.1
nodefaultroute
lock
nobsdcomp
mtu 1280 # 2012/01/14 修正
mru 1280 # 2012/01/14 追記

※ proxyarp は必要ない。(これはおそらく、クライアント側にあてるネットワークと PPTP サーバ外側のネットワークを LAN 上において同一にする場合に必要だと思う。)

・/etc/ppp/chap-secrets に PPTP 接続するアカウントを設定

ユーザ名 pptpd パスワード *

※上記のような書式で指定する。

・pptpd を再起動
# /etc/init.d/pptpd restart

・iptables のルールに以下を追加。
# iptables -P FORWARD DROP
# iptables -A INPUT -i eth0 -p tcp –dport 1723 -d aaa.bbb.ccc.ddd -j ACCEPT
# iptables -A INPUT -i eth0 -p 47 -d aaa.bbb.ccc.ddd -j ACCEPT
# iptables -A INPUT -i ppp+ -p udp –dport 53 -d 192.168.64.1 -j ACCEPT
# iptables -A FORWARD -i ppp+ -o eth0 -s 192.168.64.0/24 -j ACCEPT
# iptables -A FORWARD -i eth0 -o ppp+ -d 192.168.64.0/24 -m state –state RELATED,ESTABLISHED -j ACCEPT
# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.64.0/24 -j MASQUERADE
※必要に応じて、上記の設定が恒常的に有効となるように何らかの方法で設定する。

・/etc/sysctl.conf を修正

net.ipv4.ip_forward = 1

を追加。

・/etc/sysctl.conf の設定内容を有効とする
# sysctl -p

・pptpd への接続制限
/etc/hosts.allow, /etc/hosts.deny にて pptpd への接続制限を設定。

■結果

以下の通り。

  • iPhone でクライアント側設定 → ちゃんと aaa.bbb.ccc.ddd を経由してインターネットへ接続している。
  • Mac OS X でクライアント側設定 → ちゃんと aaa.bbb.ccc.ddd を経由してインターネットへ接続している。(ただし、ppp0 インタフェースの MTU を 1200 程度に設定する必要有り)
    これは、下記の「/etc/ppp/pptpd-options」に「mtu 1280」および「mru 1280」の指定を追加することで解決した。

■修正

  • 2012/01/14
    タイトルを「Net: 再度 pptpd を設定」から改題。
    「/etc/ppp/pptpd-options」において
    ・mtu 1280
    ・mru 1280
    の指定を追加した。(一部のサイトが VPN 経由で接続できなかったため。)

■追記 (2012/08/02)

VPNなどで使われる認証プロトコル「MS-CHAPv2」、クラックされる | スラッシュドット・ジャパン セキュリティ」の通り、PPTP で用いられる認証プロトコル、「MS-CHAPv2」がクラックされたとのことですので、この内容での設定については、強く非推奨とします。