これは何?
macOSからSoftEtherを使ったVPN接続をコマンドから行ったときの手順のメモとスクリプト。
前提条件
- macOS X Mojave以降
- システム内でSUDOの権限が付与されていること
- SoftEtherからSoftEther VPN ClientのmacOS版をダウンロードしインストールされ、コマンドが動作すること(ダウンロードはここから) ← 「SoftEther VPN Client」「Mac OS X」「(持ってるmacのタイプを選択)」
手順
SoftEtherVPN Clientの設定
ここがとても詳しいのでこちらを参照。
起動と停止
シェルスクリプトを実行してVPN接続、切断を行う。なおRouteの追加は手動で行うことを想定している。
コマンド実行にはsudoを実行する権限が必須。
コマンド
# 接続
$ ./activatesoftether.sh on
# 切断
$ ./activatesoftether.sh off
スクリプトは以下。事前に実行権限の付与が必須。
コマンド
$ chmod u+x activatesoftether.sh
activatesoftether.sh
#!/bin/bash
set -e
PLATFORM=mac # mac / linux
VPNPATH=[PATH to vpnclient command]/vpnclient_${PLATFORM}
VPNCLIENT=${VPNPATH}/vpnclient
VPNCMD=${VPNPATH}/vpncmd
GATEWAY=[VPN接続後のGateway:一旦接続して調査が必要]
ROUTETO=[VPN接続後、VPNを経由してアクセスするCIDER(例:ROUTETO=192.168.0/24)]
ROUTETOIP=[VPN接続後、VPNを経由してアクセスを行う開始IP(例:ROUTETOIP=192.168.0.0)]
ROUTETOCIDER=[VPN接続後、VPNを経由してアクセスするCIDER(例:ROUTETOCIDER=255.255.255.0)]
ACCOUNTNAME="[ACCOUNT NAME]"
function addDeleteRoute () {
if [ `netstat -nr | grep ${GATEWAY%.*} | grep ${ROUTETO} | wc -l` -gt 0 ] ; then
sudo /sbin/route delete -net ${ROUTETOIP} ${GATEWAY} ${ROUTETOCIDER}
fi
case $1 in
add)
sudo /sbin/route add -net ${ROUTETOIP} ${GATEWAY} ${ROUTETOCIDER}
printf "\n"
echo " ---- >>>> ROUTE ADDED <<<< ----"
printf "\n"
;;
delete)
printf "\n"
echo " ---- >>>> ROUTE DELETED <<<< ----"
printf "\n"e
;;
esac
}
case $1 in
on)
# Delete Route First
addDeleteRoute "delete"
# start vpn client
echo " -- Connect VPN and Start VPN Client --"
printf "\n"
printf "password: "
read -s pwd
echo "${pwd}" | sudo -S ${VPNCLIENT} start
echo " ---- >>>> Connected <<<< ----"
# exec vpncmd
${VPNCMD} << EOF
2
localhost
AccountConnect $ACCOUNTNAME
EOF
# get ip address by dhcp
echo "${pwd}" | sudo -S ipconfig set tap0 dhcp # for mac
until [ `netstat -nr | grep ${GATEWAY%.*} | grep UG | wc -l` -eq 1 ] ;
do
printf "."
sleep 3
done
printf "\n\n"
addDeleteRoute "add"
echo " ---- >>>> Connected <<<< ----"
printf "\n"
echo "-- [to check and to add route] -----------"
echo "$ netstat -nr | grep ${GATEWAY%.*} | grep UG"
echo "$ sudo /sbin/route add -net ${ROUTETOIP} ${GATEWAY} ${ROUTETOCIDER}"
echo "-----------------------------"
;;
off)
# exec vpncmd
${VPNCMD} << EOF
2
localhost
AccountDisconnect $ACCOUNTNAME
EOF
# stop vpn client
echo "-- Disconnect VPN and Stop VPN Client --"
printf "\n"
printf "password: "
read -s pwd
echo "${pwd}" | sudo -S ${VPNCLIENT} stop
addDeleteRoute 'delete'
echo " ---- >>>> Disconnected <<<< ----"
printf "\n"
echo "-- [to check and to delete route] -----------"
echo "$ netstat -nr | grep ${GATEWAY%.*} | grep UG"
echo "$ sudo /sbin/route delete -net ${ROUTETOIP} ${GATEWAY} ${ROUTETOCIDER}"
echo "-----------------------------"
;;
*)
echo "[ERROR] Specify on/off"
echo " $ ${0} [on/off]"
esac