launchdでvpndを自動起動。あれっ?繋がらない?

launchdを使ってOS起動時にvpndを自動起動してみた。

 

こちらを参考にさせて頂きました。

 

なお設定環境は以下となります。

MacBookPro (13-inch, Early 2011)

OS X El Capitan 10.11.4

vpn設定ファイルの準備

 

まず、下記の設定ファイルを作成します。(詳細は割愛)

/Library/Preferences/SystemConfiguration/com.apple.RemoteAccessServers.plist

/etc/ppp/users.plist

 

launchctlのplist作成

まず、


/Library/LaunchDaemons/com.apple.vpnd.plist(ファイル名は任意)

 

を作成します。

com.apple.vpnd.plist

 


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Disabled</key>
        <false/>
        <key>Label</key>
        <string>com.apple.vpnd</string>
        <key>Program</key>
        <string>/usr/sbin/vpnd</string>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/sbin/vpnd</string>
                <string>-x</string>
                <string>-i</string>
                <string>com.apple.ppp.l2tp</string>
        </array>
        <key>KeepAlive</key>
        <true/>
        <key>RunAtLoad</key>
        <true/>    
</dict>
</plist>

launchctlからサービス起動

サービスを起動するには、


launchctl load /Library/LaunchDaemons/com.apple.vpnd.plist

サービスを停止するには、


launchctl unload /Library/LaunchDaemons/com.apple.vpnd.plist

サービスの起動状況を確認するには、


launchctl list

 

動作確認 → 不具合発生!

1.OS再起動

2.サービス起動状態確認

 -->launchctl list より、com.apple.vpndが起動している

  ps -ef |grep vpnd より、vpnd -x -i com.apple.ppp.l2tpプロセスが存在

3.Client側からVPN接続

 -->接続不可。個人的に色々試してみたところOS起動時すぐにvpnd(L2TP)起動すると何故か接続できない。※一方PPTPは問題無く接続可能だった。

対策

OS起動後少し経ってからvpndを起動させると接続OKだったので適当にスクリプトを作成して、それをlaunchctlで起動させることにした。

少々格好悪いけど…。他に良い方法があれば教えて下さい。

start_vpnd.sh

 


#!/bin/bash

sleep 120
vpnd -x -i com.apple.ppp.l2tp

com.apple.vpnd.plist

 


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Disabled</key>
        <false/>
        <key>Label</key>
        <string>com.apple.vpnd</string>
        <key>ProgramArguments</key>
        <array>
                <string>/Users/hoge/macro/start_vpnd.sh</string>
        </array>
        <key>KeepAlive</key>
        <true/>
        <key>RunAtLoad</key>
        <true/>    
</dict>
</plist>

不具合に関して

launchctlに関わらず、ユーザとグループのログイン項目から

vpnd(L2TP)を起動する時も同様で、

OS起動直後だとvpndは起動できてもClient側からVPN接続できない。

(一度vpndを停止させて起動し直せば接続できるようになる。自動起動の意味が無い…。)

原因はよくわかりませんが、sleepを入れてvpndの起動を少し遅らせれば正常にVPNが繋げられるのでとりあえずこのまま様子見としたいと思います。

 

2chに同様の人がいました。こちらはOSはYosemiteですね。