Debian GNU/Linux での pptpd 設定 (サーバ側で NAPT しない場合)

※ VPS 等で pptpd を設定し、nat する場合は、「Debian GNU/Linux での pptpd 設定 (サーバ側で NAPT する場合)」を参照下さい。

以前、VPS において、pptpd の設定を行ったが、これはグローバル IPv4 の割り当てが 1 個のみで、VPN クライアントはこの IPv4 を共有して出ていくように、VPN 用のプライベートネットワークから NAPT (IP Masquerade) する構成だった。

今回は、PPTP クライアントの IPv4 アドレスが、その LAN のネットワーク内と同一ネットワーク内に存在するような設定を行ってみた。

例えば、自宅のルータで、GRE と TCP 1723 を LAN 内のサーバに通信できるようにしておいて、外部から自宅へ VPN 接続をする用途を想定している。

■前提

  • ネットワーク内において、いくつかのプライベート IP アドレスが自由に使用できる環境である。
  • 今回は 192.168.1.0/24 な一般的な家庭内 LAN を想定。
  • VPN 側に割り当てられる IPv4 アドレスは、他の機器で使用されていない、されない事。
  • OS は Debian GNU/Linux 6.0 squeeze を利用した。
  • PPTP サーバ名は localpptpd とする。

■想定するネットワーク

  • ネットワークアドレス : 192.168.1.0/24
  • デフォルトゲートウェイ : 192.168.1.1
  • DNS サーバ : 192.168.1.1
  • pptpd を設定するサーバ : 192.168.1.2 (インタフェースは eth0)
  • VPN クライアントに割り当てる IPv4 アドレス : 192.168.1.201 ~ 192.168.1.210 (サーバ側では ppp0 ~ ppp9 のインタフェースと通信する)

■設定

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

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

・/etc/pptpd.conf を修正

option /etc/ppp/pptpd-options
logwtmp
localip 192.168.1.2
remoteip 192.168.1.201-210

※ localip はサーバ自身の eth0 の IPv4 アドレスを指定する。
※ remoteip には、VPN クライアントに割り当てる IPv4 アドレスを指定する。

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

name localpptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 192.168.1.1 # DNS サーバを指定
proxyarp
nodefaultroute
lock
nobsdcomp
mtu 1280
mru 1280

※ mtu と mru の指定をしておかないと、接続できないサイトなどが出る可能性がある。

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

ユーザ名 localpptpd パスワード *

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

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

・iptables のルールに以下を追加。

# iptables -P FORWARD DROP
# iptables -A INPUT -i eth0 -p 47 -d 192.168.1.2 -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp –dport 1723 -d 192.168.1.2 -j ACCEPT
# iptables -A INPUT -i ppp+ -j ACCEPT
# iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT
# iptables -A FORWARD -i eth0 -o ppp+ -j ACCEPT
# iptables -A FORWARD -i ppp+ -o ppp+ -j ACCEPT

※必要に応じて、上記の設定が恒常的に有効となるように何らかの方法で設定する。

・/etc/sysctl.conf を修正

net.ipv4.ip_forward = 1

を追加。

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

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

■結果

以下の通り、一応正常に通信できたことを確認。

  • 自宅ルータ側で、GRE プロトコルと、TCP 1723 を今回設定した自宅サーバにスルーする様に設定。
  • iPhone でクライアント側設定し、3G 経由で自宅ルータの IPv4 アドレス宛 (自宅サーバ) サーバ側に、PPTP 接続が行えることを確認。
  • その上で、自宅 LAN 内の機器にアクセス可能であることを確認。
  • さらに、自宅ルータに当たっている IPv4 アドレスから、インターネットへ出て行っていることを確認。
  • VPN 接続されている機器同士での ping 疎通が出来ていることを確認。

・追記 (2012/08/02)

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