【リモートワーク 】VPN接続がやたら切れて仕事にならない件について

# VPN接続が切れまくる

コロナの影響でリモートワークになって3ヶ月。

序盤からイライラはしていたのだが、この日は我慢がピークを迎えた。
<img width="526" alt="VPN切れまくって作業にならない…" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85825/a1bb1adf-016b-6d60-c146-ce8d12a99a09.png">
GitHubでPR作ろうとブラウザをポチポチしていたら、1クリックする度にVPNが切断される。
GitHubはエンタープライズ版を利用しておりVPN接続が必須、VPNはFortiClientというクライアントを使用しており、OneLoginによる管理なので、**毎回2段解認証のアクセスコードを入力しなくてはならない。**

## 原因

<img width="954" alt="CPU使用率に関係している説" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85825/509a8fd9-2dbf-16ec-0652-8cd0bf72f1cd.png">
なるほど。確かにこの日は裏でXcodeビルドをぶん回していた。

どうやらCPU負荷が高いと、VPN接続のバックグランドプロセスが蔑ろにされてしまうことが原因らしい。
デザイナーとかはAdobe製品が足枷になることがあるだろうか。

## 対策

### VPN接続のプロセスを探す

`ps` コマンドでプロセスを一覧、VPNクライアントの `FortiClient` で `grep` してみる。

```shell
$ ps alxww | grep -i FortiClient
  502   587     1   0  31  0  5995936  12328 -      S      ??    0:05.24 /Library/Application Support/Fortinet/FortiClient/bin/CredentialStore
  502   661     1   0  46  0  6626232  56360 -      S      ??    7:47.69 /Applications/FortiClient.app/Contents/Resources/runtime.helper/FortiClientAgent.app/Contents/MacOS/FortiClientAgent
    0   730     1   0  20  0  5996320   9860 -      Ss     ??    0:08.35 /Library/Application Support/Fortinet/FortiClient/bin/fctservctl
  502   773     1   0  46  0  6545264  22888 -      S      ??    2:58.96 /Applications/FortiClient.app/Contents/Resources/runtime.helper/FortiClientAgent.app/Contents/Resources/runtime.helper/FctMiscAgent.app/Contents/MacOS/FctMiscAgent
    0 14216     1   0  20  0  5997792  19772 -      Ss     ??    2:53.84 /Library/Application Support/Fortinet/FortiClient/bin/fcconfig
    0 75603     1   0  20  0  4865952   6772 -      Ss     ??    0:00.31 /Library/Application Support/Fortinet/FortiClient/bin/fctctld
    0 75613 75603   0  20  0  4927400  13204 -      S<     ??    0:16.76 /Library/Application Support/Fortinet/FortiClient/bin/sslvpnd connect -s {ip_address} -o 20443 -b -i {your_domain}
  502 80355  1379   0  31  0  4409328    884 -      R+   s001    0:00.01 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox -i FortiClient
```

なんかいろいろ出てきたが、7行目の `sslvpnd` のプロセスがそれだろう。

2列目の `75613` がプロセスIDで、6列目の `0` が優先度である。
優先度は `-20 ~ 20` の範囲を取り、数が小さいほど優先度が高い。`-20` が最高優先度、`0` がデフォルトで `20` が最低。

デフォルトの優先度になっていたので、上げてみよう。

### プロセスの優先度を変更する

`renice` コマンドを使って優先度を変更する。おそらく `sudo` が必要。
テキトーに最大値との間をとって `-10` にしてみる。

```shell
# sudo renice {priority} {process_id}
$ sudo renice -10 75613
```

### 変更されたことを確認する

もう一度 `ps` を叩いて、優先度が変更されたことを確認する。

```shell
# ps alxww | grep -i {process_id}
$ ps alxww | grep -i 75613
    0 75613 75603   0  20 -10  4927400  13204 -      S<     ??    0:15.98 /Library/Application Support/Fortinet/FortiClient/bin/sslvpnd connect -s 39.110.207.155 -o 20443 -b -i {your_domain}
```

## 結果: 切れにくくなった

日に何度も再接続を余儀なくされていたが、**「1日に1度切れるかどうか」程度まで減少した。**

成功である。
これでVPNの再接続に煩わされることなく作業ができるようになった。

## 課題

しかし、課題も残っている。

たまに `ps` コマンドを叩いてみると、優先度が `0` に戻っていることがある。というか、プロセスIDが変わっている。
どうやら、何かの拍子に接続が切れると自動で再接続を試みてくれているらしく、それで回復できたとしても別プロセスなので優先度が戻ってしまうのだ。

あとはPCを再起動する度に設定しなければいけない点だ。

切れにくくなったとは言え、この状態では煩わしさは完全には排除できない。
まだ改善の余地が残されている。