Kali Linux で OpenVPN接続時のIPアドレスをパネルに表示する

HackTheBoxでリバースシェルを張ったり、PythonのSimpleHTTPServerでWebサーバを立てたりするとき、VPNで使っている自分のIPアドレスがわからなくなることありますよね！
そこでKali Linuxのデスクトップ上部にあるpanelにVPN接続時のIPアドレスを表示するようにしてみたので、その方法をまとめます。

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67875/1c2463cc-0daa-6ccc-9168-a28e138f64ed.png)

今回紹介する方法は Kali Linuxで使用しているデスクトップ環境 Xfce4のプラグインを利用して実現しています。そのため Xfce4を使っているLinuxのデスクトップ環境であれば同様の方法が使えると思います。

# Xfce4 Generic Monitor panel plugin

今回使用するのはXfce4のpanel pluginであるGeneric Monitor です。Generic Monitorは指定したコマンドを定期的に実行して、その出力結果をパネルに表示してくれるpluginです。

https://docs.xfce.org/panel-plugins/xfce4-genmon-plugin/start

https://github.com/xfce-mirror/xfce4-genmon-plugin

Kali Linuxではaptでこのpluginが管理されており、デフォルトでインストールされているようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67875/046cfb87-ad96-b604-39a4-58e24f9b1981.png)

# Generic Monitorをpanelに追加する

Generic Monitorをpanelに追加するのは、panelを右クリックして表示されるメニューから行います。
メニューの "Panel"->"Add New Items" を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67875/978cf4dc-729b-e3c7-cb50-32f9f6cb0f66.png)

選択すると以下のように、新しく追加するアイテムの選択画面が出てくるので、"Generic Monitor" を選択して "Add" します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67875/2a9dacac-4003-e4d3-bd75-2307e51166c3.png)

"Add" すると一番右側に"Generic Monitor"が追加されるので、右クリックして "Move" でpanelの適当な位置に移動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67875/6e81afed-51a6-ed9c-08bb-94ae421b7203.png)

適当な位置に移動したら、再び右クリックをして "Properties"をクリックします。クリックすると以下のような設定画面が表示されるはずです。
ここで実行するコマンドやラベル、実行周期、フォントを指定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67875/0924d48d-e935-8f76-0e95-bcb93249b7c2.png)

# VPNのIPアドレスを表示するスクリプトを作成する

Generic MonitorのCommandで指定するスクリプトを作ります。

OpenVPNでVPN接続するとトンネルインターフェース（tun0）を作成し、このインターフェース経由でVPN先の環境と通信を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67875/48584fe7-4dfa-7eb1-e319-f668817c23df.png)

そこでtun0の有無で処理を分岐させ、接続されている場合はtun0のIPアドレスを表示するシェルスクリプトを作ります。

```bash:tu0-ip.sh
#!/bin/bash

/sbin/ifconfig tun0 | grep tun0 > /dev/null
if [ $? -eq 0 ]
then
  tun0_ip=$(/sbin/ifconfig tun0 | grep -A1 tun0 | grep inet | cut -d" " -f10)
  echo "<txt>tun0: ${tun0_ip}</txt>"
  echo "<tool>VPN Address is ${tun0_ip}</tool>"
else
  echo "<txt></txt>"
fi
```

ここでポイントなのが、`<txt>` や `<tool>` などのタグを指定することでGeneric Monitorで表示する情報の調整ができることです。
タグには以下のような種類があります。

- `<txt>` : 表示するテキスト
- `<img>` : 表示する画像へのpath
- `<click>` : 画像をクリックしたときに実行するコマンド
- `<tool>` : マウスオーバした時に表示するテキスト
- `<bar>` : バーに表示するパーセンテージ
- `<icon>` : 表示するアイコン名
- `<iconclick>` : アイコンをクリックしたときに実行するコマンド

参考: https://github.com/xfce-mirror/xfce4-genmon-plugin/blob/master/README#L66-L74

今回はシンプルに `<text>`でIPアドレスを表示し、`<tool>` で詳細なメッセージを表示するようにしています。

# 作成したスクリプトを実行するコマンドに指定する

作成したスクリプトをbashで実行するように、プロパティの "Command" で以下のように指定します。

```
bash /home/kali/.config/xfce4/panel/genmon-scripts/tun0-ip.sh
```

スクリプトファイルの設置場所はどこでも良いですが、私は xfce4のpanelの設定が保存されている `/home/kali/.config/xfce4/panel/` に `genmon-scripts` というディレクトリを作成し、スクリプトを設置しました。


"Period" （実行間隔）もお好みで、デフォルトでは30秒になっていますが私は5秒間隔にしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67875/fc5936ad-52b1-ae19-82d4-89df2a032615.png)

最後に "Save" をクリックすると設定が反映されます。

VPNを接続してIPアドレスが正しく表示されれば成功です！

# 余談

Generic Monitorはコマンドを指定して柔軟に出力結果を表示できるので、以下のようにサンプルやスクリプトを公開している人もいます。他に何か表示したい情報がある人はこのスクリプトを使ってみたり、参考にオレオレスクリプトを作ってみると良いでしょう。

https://git.xfce.org/panel-plugins/xfce4-genmon-plugin/tree/scripts

https://xtonousou.github.io/xfce4-genmon-scripts/