macOSで pptp 接続

# 概要

macOSでPPTP接続がサポートされていないのでコマンドベースで繋げる方法のメモです。
ちょっとだけ繋げたい、たまにしか使わない、わざわざアプリ入れたくないという方におすすめです。

アプリ入れる場合は、ShimoというVPNクライアント(有料）などがあります。

## 試したOS
macOS Mojave (10.14.5)

## 追記 2019/11/20
MacをCatalinaにアップグレードすると、そもそもPPTP.ppp 自体がマシンから削除されてしまうので、この方法では接続できません。


# 手順

pppd コマンドを使って接続します。

## 設定ファイルを作成する

`/etc/ppp/peers/` の下に `VPNサーバー名`というファイルを作成します。

例えばVPNサーバーが `test.vpnserver.com` というアドレスの場合以下のようにファイルを作成します。

```shell
$ sudo touch /etc/ppp/peers/test.vpnserver.com

```

## 設定内容を記述する

作成したファイルに次の内容を貼り付けます。
**test.vpnserver.com** の部分は自分で作成したファイル名に変更して実行します。

```
$ sudo vi /etc/ppp/peers/test.vpnserver.com
```

次の内容をコピーして貼り付けます。

```shell
plugin PPTP.ppp
noauth
remoteaddress "<test.vpnserver.com>"
user "<USERNAME>"
password "<PASSWORD>"
redialcount 1
redialtimer 5
idle 1800
# mru 1368
# mtu 1368
receive-all
novj 0:0
ipcp-accept-local
ipcp-accept-remote
refuse-eap
refuse-pap
refuse-chap-md5
hide-password
mppe-stateless
mppe-128
# require-mppe-128
looplocal
nodetach
ms-dns 8.8.8.8
usepeerdns
# ipparam gwvpn
defaultroute
debug
```

以下の部分を変更します。

"\<test.vpnserver.com>"：VPNのサーバー名
"\<USERNAME>"：VPN接続のユーザー名
"\<PASSWORD>"：VPN接続のパスワード

保存して終了します。

> VPN接続時に暗号化しない場合は mppe-128 などをコメントアウトしてください

## 接続する

`pppd call` を使って先ほど作成したファイルを指定して接続します。

```
$ sudo pppd call test.vpnserver.com
```

これで以下のようなデータが表示されれば、接続されています。
また、接続するとプロセスが起動したままとなります。

```
Sat Jul  6 14:51:30 2019 : publish_entry SCDSet() failed: Success!
Sat Jul  6 14:51:30 2019 : publish_entry SCDSet() failed: Success!
Sat Jul  6 14:51:30 2019 : PPTP connecting to server 'xxx.xxx.xxx.xxx' (xxx.xxx.xxx.xxx)...
Sat Jul  6 14:51:30 2019 : PPTP connection established.
Sat Jul  6 14:51:30 2019 : PPTP set port-mapping for en0, interface: 10, protocol: 0, privatePort: 0
Sat Jul  6 14:51:30 2019 : using link 0
Sat Jul  6 14:51:30 2019 : Using interface ppp0
Sat Jul  6 14:51:30 2019 : Connect: ppp0 <--> socket[34:17]
...
Sat Jul  6 14:51:31 2019 : Received acsp/dhcp dictionaries
Sat Jul  6 14:51:31 2019 : Committed PPP store
Sat Jul  6 14:51:31 2019 : pptp_wait_input: Address added. previous interface setting (name: en0, address: 192.168.3.3), current interface setting (name: ppp0, family: PPP, address: xxx.xxx.xxx.xxx, subnet: 255.255.0.0, destination: xxx.xxx.xxx.xxx).
Sat Jul  6 14:51:31 2019 : PPTP port-mapping update for en0 ignored: VPN is the Primary interface. Public Address: xxxxxx, Protocol: None, Private Port: 0, Public Port: 0
Sat Jul  6 14:51:31 2019 : PPTP clearing port-mapping for en0
Sat Jul  6 14:51:34 2019 : rcvd [IPV6CP TermReq id=0x1]
...
```

このプロセスは Ctrl + C とかで終了できないので、めんどくさいですがプロセスIDとかを調べてKillします。

## 接続終了

ps コマンドで接続を調べます。

```
$ ps aux | grep pppd
```

pppdを実行している一覧からプロセスIDを確認します。
＊以下の場合は 34283

```
root    34283   0.0  0.0  4464780   6204   ??  Ss    2:51PM   0:00.02 pppd call test.vpnserver.com

```

killコマンドで確認したIDを指定して実行します。

```
$ kill 34283
```

実行すると、プロセスが起動していた方のターミナルは次のように接続終了データが表示されます。

```
Sat Jul  6 14:59:57 2019 : Terminating on signal 15.
Sat Jul  6 14:59:57 2019 : ipcp: down
Sat Jul  6 14:59:57 2019 : sent [LCP TermReq id=0x8 "User request"]
Sat Jul  6 14:59:57 2019 : Connection terminated.
Sat Jul  6 14:59:57 2019 : Connect time 8.5 minutes.
Sat Jul  6 14:59:57 2019 : Sent 1405665 bytes, received 6277979 bytes.
Sat Jul  6 14:59:57 2019 : PPTP disconnecting...
Sat Jul  6 14:59:57 2019 : PPTP clearing port-mapping for en0
Sat Jul  6 14:59:57 2019 : PPTP disconnected
```

これで終了しました。