Sonicwall の SSL VPN クライアント を Systemd 経由で接続、切断ができるようにしました。
Unitファイルを作成
File: $HOME/.config/systemd/user/netextender.service
[Unit]
Description=SonicWall NetExtender VPN Client
[Service]
Type=forking
ExecStart=%h/bin/netext start
ExecStop=%h/bin/netext start
[Install]
WantedBy=default.target
開始スクリプトを作成
File: $HOME/bin/netext
# !/bin/bash
CONF=$HOME/.vpn
function start() {
# Start netExtender
/usr/sbin/netExtender <$CONF &
exit 0
}
function stop() {
PID=$(pgrep netExtender)
if [ -z "$PID" ]; then
echo "netExtender not running."
exit 2
fi
# send SIGTERM Signal
kill -s SIGTERM $PID > /dev/null 2>&1
while :; do
pgrep netExtender > /dev/null
if [ $? -ne 0 ]; then
echo "netExtender stopped"
break
fi
sleep 1
done
exit 0
}
case $1 in
"start") prepare_start && start; break;;
"stop") stop; break;;
esac
接続情報
テキストファイルに次の接続情報を記述します。
- VPNサーバー:ポート
- ユーザ名
- パスワード
- ドメイン
$HOME/.vpn
に接続情報を記述します。
$ cat <<EOF > ~/vpn
vpn.example.com:4433
takeume2
hogehoge
LocalDomain
EOF
パーミッションを設定します。
$ chmod 0600 ~/vpn
Systemd をリロードして反映します。
$ systemctl --user daemon-reload
使い方
-
systemctl --user status netextender
: ステータス確認 -
systemctl --user stop netextender
: 切断 -
systemctl --user start netextender
: 接続する
接続する
$ systemctl --user stop netextender
$ systemctl --user status netextender
● netextender.service - SonicWall NetExtender VPN Client
Loaded: loaded (/home/takeume2/.config/systemd/user/netextender.service; indirect; vendor preset: enabled)
Active: active (running) since Fri 2020-10-30 23:28:11 JST; 46min ago
Process: 9393 ExecStart=/home/takeume2/bin/netext (code=exited, status=0/SUCCESS)
Main PID: 9394 (netExtender)
CGroup: /user.slice/user-1000.slice/user@1000.service/netextender.slice/netextender.service
├─9394 /usr/sbin/netExtender
├─9399 pppd call sslvpn mtu 1280 mru 1280
└─9466 /usr/sbin/nxMonitor
10月 30 23:28:10 lemur6 systemd[3608]: Client IP Address: 10.254.128.12
10月 30 23:28:10 lemur6 systemd[3608]: You now have access to the following 1 remote networks:
10月 30 23:28:10 lemur6 systemd[3608]: 10.0.0.0/255.0.0.0
10月 30 23:28:10 lemur6 systemd[3608]: NetExtender connected successfully. Type "Ctrl-c" to disconnect...
10月 30 23:28:11 lemur6 systemd[3608]: Started netExtender VPN Client
切断する
$ systemctl --user stop netextender
$ systemctl --user status netextender
● netextender.service - SonicWall NetExtender VPN Client
Loaded: loaded (/home/takeume2/.config/systemd/user/netextender.service; indirect; vendor preset: enabled)
Active: inactive (dead) since Sat 2020-10-31 00:19:30 JST; 16s ago
Process: 9393 ExecStart=/home/takeume2/bin/netext (code=exited, status=0/SUCCESS)
Main PID: 9394 (code=exited, status=0/SUCCESS)
10月 31 00:19:24 lemur6 pppd[9399]: Terminating on signal 15
10月 31 00:19:30 lemur6 pppd[9399]: Connection terminated.
10月 31 00:19:30 lemur6 pppd[9399]: Modem hangup
10月 31 00:19:30 lemur6 pppd[9399]: Exit.
10月 31 00:19:30 lemur6 nete[9393]: SSL VPN logging out...
10月 31 00:19:30 lemur6 nete[9393]: SSL VPN connection is terminated.
10月 31 00:19:30 lemur6 nete[9393]: Exiting NetExtender client
10月 31 00:19:30 lemur6 systemd[3608]: Stopped netExtender VPN Client
自分用メモ
-
~/.netExtender.log
にログが出力されるので Systemd の User モードにした。 - 自動起動しても Network Unreachable になる。Systemd User モードの場合の、依存関係がよくわからない。
- 実行用ユーザを作って systemd から起動したほうが良さげ。