GMOクラウド VPS 上に PPTP サーバーを構築する


### はじめに

現在、ベトナムのハノイで生活しているのですが、ハノイ市内は殆どのカフェやレストランで wifi を提供してくれて東京よりもネット環境が良い位に感じます。

でも、セキュリティ的にザルなのは間違い無いですし、途中経路で誰が覗いているか分かりません。野良 wifi と変わりませんね。

そんなとき、自前で VPN サーバーを構築しておけば、全ての通信を VPN 経由にすることで、安心して wifi が利用できます。また、政治的な理由で Facebook への接続が遮断されるようなときもこれがあれば安心ですね。

なお GMOクラウド VPS は物理サーバーが関東（東京？）にあるようで、VPNを経由すれば海外からも radiko で東京の放送が聴ける、という噂もあるようです。
利用規約的にOKか分からないので、試していませんし、そのために構築したということもありません。

本当ですよ。

### 前提条件
ubuntu12.04 上に構築します。仕事では殆ど ubuntu サーバーを使っているので。
また、徹頭徹尾 root ユーザーで作業しています。ミスったら OS 再インストールするのが漢ってもんだ、というワイルドな方以外はちゃんと一般ユーザーで適宜 sudo して下さい。

### pptpd のインストール
インストールと言っても、`apt-get`するだけです。便利な世の中ですね。

```
:~# apt-get install -y pptpd
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  bcrelay
The following NEW packages will be installed:
  bcrelay pptpd
0 upgraded, 2 newly installed, 0 to remove and 10 not upgraded.
Need to get 95.2 kB of archives.
After this operation, 330 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ precise/main bcrelay amd64 1.3.4-5ubuntu2 [11.2 kB]
Get:2 http://archive.ubuntu.com/ubuntu/ precise/main pptpd amd64 1.3.4-5ubuntu2 [84.0 kB]
Fetched 95.2 kB in 1s (51.6 kB/s)
Selecting previously unselected package bcrelay.
(Reading database ... 48203 files and directories currently installed.)
Unpacking bcrelay (from .../bcrelay_1.3.4-5ubuntu2_amd64.deb) ...
Selecting previously unselected package pptpd.
Unpacking pptpd (from .../pptpd_1.3.4-5ubuntu2_amd64.deb) ...
Processing triggers for ureadahead ...
ureadahead will be reprofiled on next reboot
Processing triggers for man-db ...
Setting up bcrelay (1.3.4-5ubuntu2) ...
Setting up pptpd (1.3.4-5ubuntu2) ...
Starting PPTP Daemon: pptpd.
```

### 各種設定

#### /etc/pptpd.conf
まずは pptpd 自体の設定を。IP アドレスは非VPN環境と同じものにならないようにして下さい。
街の wifi 環境なんて大抵買ってきた router をつるしで使っているでしょうから、第3オクテットが 13 だったら被らないんじゃないか、と思います。
ベトナムでは 13 と言う数字は縁起が悪いですし。

```diff
76,77c76,77
< #localip 192.168.0.1
< #remoteip 192.168.0.234-238,192.168.0.245
---
> localip 192.168.13.254
> remoteip 192.168.13.101-150
```


#### /etc/ppp/pptpd-options
DNS を指定します。Google さん、いつもありがとうございます。

```diff
55,56c55,56
< #ms-dns 10.0.0.1
< #ms-dns 10.0.0.2
---
> ms-dns 8.8.8.8
> ms-dns 8.8.4.4
```

#### /etc/ppp/chap-secrets
接続する時に使うアカウントを作成します。街のカフェのインターネットから接続するのでアドレスは any にします。

```diff
3c3
< 
---
> username pptpd password *
```

#### /etc/network/if-pre-up.d/masquerade
このファイルは新たに作成します。ネットワーク起動時に VPN 用に設定したアドレスで IP masquerade を有効にします。

```bash
vi /etc/network/if-pre-up.d/masquerade
#######
#!/bin/sh
iptables -t nat -A POSTROUTING -s 192.168.13.0/24 -j MASQUERADE
#######
chmod +x /etc/network/if-pre-up.d/masquerade
```
#### /etc/sysctl.conf
忘れずにフォワーディングを有効にします。

```diff
28c28
< #net.ipv4.ip_forward=1
---
> net.ipv4.ip_forward=1
```

#### /etc/ppp/options
途中のルーターの設定によっては MTU 値を下げておかないとヘッダーが追加された事で通らないことがあり得ます。ちょいとパフォーマンスで損しますが、どこのルーターに繋げるか分かりません。下げておきましょう。

```diff
190c190
< #mtu <n>
---
> mtu 1400
```

### 接続確認

念のために、ここまでの設定をしたら一度サーバーを再起動して動作確認してみましょう。サーバーの再起動が嫌であれば、

* `sysctl -p` を打つ
* `/etc/network/if-pre-up.d/masquerade` を実行する
* pptpd を再起動する

で多分大丈夫です。試して無いですけど。

あとは、iPhone等から、PPTPの設定をして接続できればOKです。
「すべての信号を送信」しておきましょう。