openfortivpn + OpenFortiGUI 〜FortiClient VPNの代替として〜
Page content
「Ubuntu (x86_64) のデスクトップ環境からFortinet VPNへ接続する際に、Fortinetの公式クライアントFortiClient VPNを使わず、オープンソースなものを使ってみた」という内容のメモです。ちょっとだけ逸般の誤家庭にとって参考になるかもしれません。
Fortinet VPNへのSSL-VPN接続手順
CLI (openfortivpn) での接続
SSL-VPN接続に必要な最小限の設定情報を見極めるため、まずは最初に比較的シンプルな、コマンドラインでのVPN接続を試します。
- openfortivpnをパッケージで導入する
$ sudo apt install openfortivpn $ openfortivpn --version 1.17.1
- VPN管理者からクライアント証明書
CLIENT.p12
(PKCS #12) が配布されていたら、クライアント証明書からユーザ証明書USER.crt.pem
とユーザ鍵USER.key.pem
を取り出す (参考ページ)## ユーザ証明書 $ openssl pkcs12 -in CLIENT.p12 -out USER.crt.pem -clcerts -nokeys -legacy Enter Import Password:(Import Passwordを入力) ## ユーザ鍵 $ openssl pkcs12 -in CLIENT.p12 -out USER.key.pem -nocerts -nodes -legacy Enter Import Password:(Import Passwordを入力) ## 参考: 私の環境の場合、opensslコマンドに「-legacy」を付けない場合には次のエラーが発生した $ openssl pkcs12 -in CLIENT.p12 -out USER.crt.pem -clcerts -nokeys Enter Import Password:(Import Passwordを入力) Error outputting keys and certificates 4087D00B827F0000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:../crypto/evp/evp_fetch.c:349:Global default library context, Algorithm (RC2-40-CBC : 0), Properties ()
- openfortivpnコマンドを直接実行してVPN接続を試す
$ sudo openfortivpn 接続先IPアドレス:接続先ポート番号 -u VPNユーザ名 --user-cert=USER.crt.pem --user-key=USER.key.pem VPN account password: (パスワードを入力) ERROR: Gateway certificate validation failed, and the certificate digest is not in the local whitelist. If you trust it, rerun with: ERROR: --trusted-cert XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ERROR: or add this line to your configuration file: ERROR: trusted-cert = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (snip)
- 正しい接続先を指定していて、上記のような「Gateway certificate validation failed」エラーメッセージが表示された場合、メッセージにあるように「
--trusted-cert=XXXXX...
」を追加した上でVPN接続を試してみる$ sudo openfortivpn 接続先IPアドレス:接続先ポート番号 -u VPNユーザ名 --user-cert=USER.crt.pem --user-key=USER.key.pem --trusted-cert=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX VPN account password: (パスワードを入力) INFO: Connected to gateway. INFO: Authenticated. INFO: Remote gateway has allocated a VPN. Using interface ppp0 Connect: ppp0 <--> /dev/pts/4 INFO: Got addresses: [XXX.XXX.XXX.XXX], ns [XXX.XXX.XXX.XXX, XXX.XXX.XXX.XXX] INFO: Negotiation complete. INFO: Negotiation complete. local IP address XXX.XXX.XXX.XXX remote IP address XXX.XXX.XXX.XXX INFO: Interface ppp0 is UP. INFO: Setting new routes... INFO: Adding VPN nameservers... INFO: Tunnel is up and running. ^CINFO: Cancelling threads... (snip)
- 「INFO: Tunnel is up and running.」が表示されればVPN接続は成功している。接続を終了するにはCtrl+Cを入力する
GUI (OpenFortiGUI) での接続
- OpenFortiGUI | Bits and Bytes からOSに合うdebパッケージをダウンロードする
- Ubuntu 22.04の場合:
openfortigui_0.9.8-1_amd64_jammy.deb
- Ubuntu 22.04の場合:
- OpenFortiGUIとそれに必要なパッケージをインストールする
$ sudo dpkg -i ./openfortigui_0.9.8-1_amd64_jammy.deb $ sudo apt --fix-broken install # 必要に応じて
- デスクトップ画面にてOpenFortiGUIを起動する (Xfce環境だと [アプリケーション] > [インターネット] > [openFortiGUI] で起動)
- OpenFortiGUIにてメニューバーの [ファイル] > [設定] にある
SUDO -E Option: SUDO Preserve Env. (>=Ubuntu 19.10/Debian10 Fix)
をONにして [保存] する - OpenFortiGUIにてアイコンの [追加] > [VPN] をクリックし、「CLIでの確認」4で用いたVPN接続の設定を新規追加して [保存] する
- OpenFortiGUIのVPN接続一覧から使用したいVPN接続設定を選択してアイコンの [接続] を押すと、VPN接続が実行される。状態が「切断」から「接続済み」へ変化すると接続成功。[切断] を押すと接続は切断される
- 各VPN接続設定ごとに細かい設定も行えるようだ
追記 [2022-12-15]: Network Manager
試してはいないが、下記リンク先で紹介されているやり方だと、元々あるデスクトップ環境のNetwork Managerと融合させることもできるのかもしれません。