LoginSignup
2

More than 3 years have passed since last update.

SoftEtherでのVPN接続をコマンドから行う - macOS X

Last updated at Posted at 2019-09-10

これは何?

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

Reference

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2