Ubuntu14.04.2でSoftetherVPNクライアントとPPTPサーバ(2)

# 続きを書く前に

前回[Ubuntu14.04.2でSoftetherVPNクライアントとPPTPサーバ(1)](http://qiita.com/genysakai/items/eb6c319af0f9dc1e158f)からの続きです。その前に、こんなことをしている経緯を記しておきます。

## 経緯について

何でいまさらPPTPなの？ごもっとも。
ただ、クライアントからの接続がPPTPに限定されていて、ウチのVPNサーバ（SoftetherVPN）ではそのまま受けられない（Window7以降のSSTPなら接続できるけど）。

Windowsマシンを途中に立てるのは云々。。。という事情があって、やむなくPPTPの受け口を作らなければならなくなった次第。というわけで下の全体構成図の中の今回の記事の部分について書いています。

## 全体構成図
![2015030102.png](https://qiita-image-store.s3.amazonaws.com/0/70884/c12b1d9a-357d-8bf6-9b08-04903673bb77.png)

この構成にすれば、PPTPでのNWとSEVPNで作ったNWをルーティングするだけで済むんじゃない？（速度はどうか別にして）。という事なんです。



# PPTPサーバのインストールと設定

pptpd自体のインストールは難しくもなんともありません。その後の接続テストでいろいろ試行錯誤する必要が出てきました。下記に出てくるIPアドレスは上の全体構成図の内容と比べて実際のIPアドレスに置き換えてください。

既にRaspberryPiでPPTPDのインストール＆設定されている方が[RaspberryPI(というかUbuntu)上にVPNサーバー構築(PPTP)](http://qiita.com/sumyapp/items/b7300a9ffa316d676aa1)という記事をまとめられていますので、それを参考に設定しました。[summyapp](http://qiita.com/sumyapp)さん感謝！

## pptpdのインストールと設定
インストールしたら、pptp上の自分のローカルIP、接続元へリースするIPアドレスを設定します。

```bash:pptpdのインストール
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install pptpd
```

```bash:pptpdの設定
$ sudo vi /etc/pptpd.conf
```

```c:/etc/pptpd.conf
localip 192.168.100.2
remoteip 192.168.100.100-130
```

## DNS設定
今回の要件ではDNS参照の設定はいらないのですが、それを設定するためのファイルにある内容が次に関係してくるので書いておきます。

```bash:pptpdのオプション設定
$ sudo vi /etc/ppp/pptpd-options
```

ファイルの中のエントリにms-dnsという項目があるのでそこに設定すれば、クライアントにDNSサーバ参照の情報が渡されます。

```bash:/etc/ppp/pptpd-options
ms-dns 8.8.8.8
```

で、このファイルのエントリには、最初のほうに

```c:/etc/ppp/pptpd-options
# Authentication

# Name of the local system for authentication purposes
# (must match the second field in /etc/ppp/chap-secrets entries)
name pptpd
```

があって、この"pptpd"を次の設定項目「pptp接続用アカウント設定」で使用する/etc/ppp/chap-secretsファイルの第2フィールド、サーバ名のところに記述するようにします。デフォルトではpptpdになっていてそれをそのまま記述すればいいのでデフォルトのまま進めていれば特に問題になることは無いと思います。


## pptp接続用のアカウント設定
「サーバ名」の項目には先ほどのpptpdを指定して、「割り当てIP」にはユーザごとに固定ならそれを、サーバに任せるなら*を記述します。設定を反映させるためにpptpdを再起動して完了です。

```bash:pptp接続用のアカウント設定
$ sudo vi /etc/ppp/chap-secrets
```

```c:/etc/ppp/chap-secrets
# User名  サーバ名  パスワード  割り当てIP
client    pptpd    p@ssW0rD    *
client2   pptpd    PaSsWoRd    192.168.100.130
```

```bash:pptpdの再起動
$ sudo /etc/init.d/pptpd restart
* Restarting PoPToP Point to Point Tunneling Server pptpd  [ OK ]
```


## IPフォワード設定

```bash:IPフォワード設定
$ sudo vi /etc/sysctl.conf
```

```ini:/etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
```

```bash:設定を反映
$ sudo sysctl -p
net.ipv4.ip_forward = 1
```
となればOK。

## MTU/MRU

この項目の設定は、パフォーマンスに影響するため、実際にはテストしながら（パケット見ながら）調整していったほうがいいのですが、今回の要件では保守作業中に切れない！こと優先なので、最初から少し小さめの値にしています。設定ファイルには「低速回線であれば296もお勧め(TCP/IPヘッダ40bytes+データ256bytes」！とか書いてあります。iPad+3Gからも繋ぐから何とかしてくれ！とか言われたら、ここを調整すると幸せになれるかもしれません。

```bash:pppオプションの設定
$ sudo vi /etc/ppp/options
```

```c:/etc/ppp/options
# Set the MRU [Maximum Receive Unit] value to <n> for negotiation.  pppd
# will ask the peer to send packets of no more than <n> bytes. The
# minimum MRU value is 128.  The default MRU value is 1500.  A value of
# 296 is recommended for slow links (40 bytes for TCP/IP header + 256
# bytes of data).
#mru 542
mru 1320
...
...
...
# Set the MTU [Maximum Transmit Unit] value to <n>. Unless the peer
# requests a smaller value via MRU negotiation, pppd will request that
# the kernel networking code send data packets of no more than n bytes
# through the PPP network interface.
#mtu <n>
mtu 1320
```

## ファイアーウォールの壁

ここまでやって、さあ繋ごうと思っても（１）で設定したFirewallが立ちはだかります。単に接続のテストだけをするなら、

```bash:ufwを無効化
$ sudo ufw diable
```

してテストしてみてください。テスト終わったら必ず有効化しておいてください。

```bash:ufw有効化
$ sudo ufw enable
```

クライアントから接続成功した場合の接続～切断までのログの例を載せておきます。3箇所のxxx.yyy.aaa.bbbは実際にはクライアントのGlobalIPが記録されます。

```c:/var/log/syslog
...
Mar  1 16:43:35 PPTPSRV pptpd[7331]: CTRL: Client xxx.yyy.aaa.bbb control connection started
Mar  1 16:43:35 PPTPSRV pptpd[7331]: CTRL: Starting call (launching pppd, opening GRE)
Mar  1 16:43:37 PPTPSRV pppd[7332]: Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
Mar  1 16:43:37 PPTPSRV pppd[7332]: pppd 2.4.5 started by root, uid 0
Mar  1 16:43:37 PPTPSRV pppd[7332]: Using interface ppp0
Mar  1 16:43:37 PPTPSRV pppd[7332]: Connect: ppp0 <--> /dev/pts/2
Mar  1 16:43:38 PPTPSRV pppd[7332]: peer from calling number xxx.yyy.aaa.bbb authorized
Mar  1 16:43:38 PPTPSRV pppd[7332]: MPPE 128-bit stateless compression enabled
Mar  1 16:43:40 PPTPSRV pppd[7332]: Cannot determine ethernet address for proxy ARP
Mar  1 16:43:40 PPTPSRV pppd[7332]: local  IP address 192.168.100.2
Mar  1 16:43:40 PPTPSRV pppd[7332]: remote IP address 192.168.100.100
```

ここまでが接続成功までのログ、接続元のグローバルIPや、クライアントにPPTP用のIPアドレスが割り当てられていることが分かります。
そして、下がクライアントから切断されるときに記録されるログ。接続された時間、送受信のパケット量等が記録されていることが分かります。

```c:/var/log/syslog
Mar  1 16:43:48 PPTPSRV pppd[7332]: LCP terminated by peer (wM-^E!S^@<M-Mt^@^@^@^@)
Mar  1 16:43:48 PPTPSRV pppd[7332]: Connect time 0.2 minutes.
Mar  1 16:43:48 PPTPSRV pppd[7332]: Sent 14988 bytes, received 29904 bytes.
Mar  1 16:43:48 PPTPSRV pptpd[7331]: CTRL: Reaping child PPP[7332]
Mar  1 16:43:48 PPTPSRV pppd[7332]: Hangup (SIGHUP)
Mar  1 16:43:48 PPTPSRV pppd[7332]: Modem hangup
Mar  1 16:43:48 PPTPSRV pppd[7332]: Connection terminated.
Mar  1 16:43:48 PPTPSRV pppd[7332]: Exit.
Mar  1 16:43:48 PPTPSRV pptpd[7331]: CTRL: Client xxx.yyy.aaa.bbb control connection finished
```

### 余談

外につながっているから当り前とはいえ、ufwのdropログの多さに辟易しながらの作業でした。こんなかんじ↓（笑）

```c:/var/log/syslog
Mar  1 16:45:12 PPTPSRV kernel: [42624.557988] [UFW BLOCK] IN=eth0 OUT= MAC=aa:bb:cc:dd:ee:ff:gg:hh:ii:jj:kk:ll:mm:nn SRC=123.192.92.150 DST=125.10.10.10 LEN=58 TOS=0x00 PREC=0x00 TTL=113 ID=13130 PROTO=UDP SPT=28564 DPT=11108 LEN=38
Mar  1 16:45:12 PPTPSRV kernel: [42624.577620] [UFW BLOCK] IN=eth0 OUT= MAC=aa:bb:cc:dd:ee:ff:gg:hh:ii:jj:kk:ll:mm:nn SRC=123.192.92.150 DST=125.10.10.10 LEN=48 TOS=0x00 PREC=0x00 TTL=113 ID=13134 PROTO=UDP SPT=28564 DPT=11108 LEN=28
Mar  1 16:45:12 PPTPSRV kernel: [42624.581512] [UFW BLOCK] IN=eth0 OUT= MAC=aa:bb:cc:dd:ee:ff:gg:hh:ii:jj:kk:ll:mm:nn SRC=123.192.92.150 DST=125.10.10.10 LEN=48 TOS=0x00 PREC=0x00 TTL=113 ID=13135 PROTO=UDP SPT=28564 DPT=11108 LEN=28
Mar  1 17:10:15 PPTPSRV kernel: [44126.752383] [UFW BLOCK] IN=eth0 OUT= MAC=aa:bb:cc:dd:ee:ff:gg:hh:ii:jj:kk:ll:mm:nn SRC=58.20.54.249 DST=125.10.10.10 LEN=40 TOS=0x00 PREC=0x00 TTL=243 ID=39573 PROTO=TCP SPT=50140 DPT=1944 WINDOW=1024 RES=0x00 SYN URGP=0
Mar  1 17:13:07 PPTPSRV kernel: [44298.828408] [UFW BLOCK] IN=eth0 OUT= MAC=aa:bb:cc:dd:ee:ff:gg:hh:ii:jj:kk:ll:mm:nn SRC=82.221.105.6 DST=125.10.10.10 LEN=92 TOS=0x08 PREC=0x20 TTL=106 ID=52421 PROTO=UDP SPT=19646 DPT=5008 LEN=72
Mar  1 17:15:11 PPTPSRV kernel: [44423.226961] [UFW BLOCK] IN=eth0 OUT= MAC=aa:bb:cc:dd:ee:ff:gg:hh:ii:jj:kk:ll:mm:nn SRC=124.238.181.132 DST=125.10.10.10 LEN=60 TOS=0x00 PREC=0x00 TTL=49 ID=55413 DF PROTO=TCP SPT=62322 DPT=23 WINDOW=5808 RES=0x00 SYN URGP=0
Mar  1 17:15:14 PPTPSRV kernel: [44426.219973] [UFW BLOCK] IN=eth0 OUT= MAC=aa:bb:cc:dd:ee:ff:gg:hh:ii:jj:kk:ll:mm:nn SRC=124.238.181.132 DST=125.10.10.10 LEN=60 TOS=0x00 PREC=0x00 TTL=49 ID=55414 DF PROTO=TCP SPT=62322 DPT=23 WINDOW=5808 RES=0x00 SYN URGP=0
```

### この後

次は、いよいよufwとiptablesの設定をしてからSoftetherVPNのクライアント導入～全線開通までの流れを書いていきたいと思います。