社内へのアクセスにVPNを利用している人は多いと思います。
Mac OSXは標準でPPTPやL2TPなどのプロトコルに対応しています。
しかしながら、設定内容は合っているのに接続直後に切断されてしまったり安定しないケースがしばしばあります。
そんな時の対処方法をまとめました。
以下の方法についてそれぞれ説明します。
- MTU値を調整する
- PPTPマルチパススルー機能のついたルータを買う
- 自動再接続スクリプトを書く
MTU値を調整する
個人的にはこの方法が最も有効です。
MTU(Maximum Transmission Unit)とは、一度にネットワークへ送信できる最大のパケットサイズの事です。
大きいほど一度に沢山のデータを送信できますが、エラー率も上がり再送信コストが大きいというトレードオフがある設定値です。
これを調整する事で、切断の頻度を改善できます。
現在のMTU値を確認
まずは、現在のMTU値を確認しましょう。
「ターミナル.app (Terminal.app)」を開いて以下のコマンドを入力してください。
$ sudo ifconfig
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether xx:xx:xx:xx:xx:xx
inet6 xxxx::xxxx:xxx:xxxx:xxx8%en0 prefixlen 64 scopeid 0x4
inet 10.200.2.130 netmask 0xffff0000 broadcast 10.200.255.255
nd6 options=1<PERFORMNUD>
media: autoselect
status: active
ppp0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
inet 10.100.0.5 --> 10.255.254.0 netmask 0xffff0000
en0
はイーサネットのネットワークです。つまりLANですね。 ppp0
はPPTPのVPNです。
そして、en0
のMTUは 1500
で、 ppp0
のMTUは1500
である事が確認できます。
問題はこのppp0
の1500
という値です。
MTU値を変更
/etc/ppp/ip-up
というパスのファイルを作成して、以下の内容を記述します。
#!/bin/sh
/sbin/ifconfig ppp0 mtu 1300
また、ファイルのパーミッションを755
に変更してください。
$ sudo chmod 755 /etc/ppp/ip-up
ip-up
というファイルは、VPNに接続するたびに実行されるスクリプトです。
これで、接続時にMTU値が1300に調整されるようになりました。
試しに再接続してみてください。
この値をいろいろ変えてみて、安定する値を探ってください。
僕の場合はMac OSX Yosemiteで、 500
で安定しています。
PPTPマルチパススルー機能のついたルータを買う
複数人がVPNに接続する、または複数台が同時にVPNに接続する環境の人に有効です。
ルータは、VPNのパケットをアドレス変換(NAT)しないで通す機能があり、これをPPTPパススルーと言います。
家庭用のルータなどでは、この機能は1台までしか使えず、同時に複数の接続があると正しく対処できません。
そのため、同時接続して通信すると混線が発生して頻繁な切断を引き起こします。
この問題は、PPTPマルチパススルーに対応したルータを使う事で解決します。
自動再接続スクリプトを書く
上記2つのアプローチでも尚安定しない場合は、自動で再接続するApple Scriptを書くのが有効です。
簡単ですので、試してみてください。Yosemiteでも動作確認済みです。
ネットワーク名を確認する
この画面では、VPN接続名は「VPN (PPTP)」である事がわかります。
これを覚えておきます。
AppleScriptを書く
以下のようなアイコンの「アプリケーション」→「ユーティリティ」→「スクリプトエディタ」を開きます。
新規作成して、以下のスクリプトを貼り付けてください。
on idle
tell application "System Events"
tell current location of network preferences
set myConnection to the service "VPN (PPTP)"
if myConnection is not null then
if current configuration of myConnection is not connected then
connect myConnection
end if
end if
end tell
return 120
end tell
end idle
「VPN (PPTP)」のところを、あなたのVPN接続名に置き換えてください。
以下のような画面になります。
できたら、以下のような設定で保存します。
スクリプトを起動する
保存したスクリプトを、VPNが切断された状態で起動してみてください。
自動でVPNが接続されましたか?やりましたね!
ためしに手動で切断してみてください。しばらくすると、再接続を試みるはずです。
接続状態をチェックする間隔は2分間ですが、変更できます。
スクリプト中のreturn 120
という箇所を、任意の秒数に変更してください。