openfortivpn + OpenFortiGUI 〜FortiClient VPNの代替として〜

openfortivpn + OpenFortiGUI 〜FortiClient VPNの代替として〜
Page content

「Ubuntu (x86_64) のデスクトップ環境からFortinet VPNへ接続する際に、Fortinetの公式クライアントFortiClient VPNを使わず、オープンソースなものを使ってみた」という内容のメモです。ちょっとだけ逸般の誤家庭にとって参考になるかもしれません。

Fortinet VPNへのSSL-VPN接続手順

CLI (openfortivpn) での接続

SSL-VPN接続に必要な最小限の設定情報を見極めるため、まずは最初に比較的シンプルな、コマンドラインでのVPN接続を試します。

  1. openfortivpnをパッケージで導入する
    $ sudo apt install openfortivpn
    $ openfortivpn --version
    1.17.1
    
  2. 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 ()
    
  3. 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)
    
  4. 正しい接続先を指定していて、上記のような「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)
    
  5. 「INFO: Tunnel is up and running.」が表示されればVPN接続は成功している。接続を終了するにはCtrl+Cを入力する

GUI (OpenFortiGUI) での接続

  1. OpenFortiGUI | Bits and Bytes からOSに合うdebパッケージをダウンロードする
    • Ubuntu 22.04の場合: openfortigui_0.9.8-1_amd64_jammy.deb
  2. OpenFortiGUIとそれに必要なパッケージをインストールする
    $ sudo dpkg -i ./openfortigui_0.9.8-1_amd64_jammy.deb
    $ sudo apt --fix-broken install # 必要に応じて
    
  3. デスクトップ画面にてOpenFortiGUIを起動する (Xfce環境だと [アプリケーション] > [インターネット] > [openFortiGUI] で起動)
  4. OpenFortiGUIにてメニューバーの [ファイル] > [設定] にある SUDO -E Option: SUDO Preserve Env. (>=Ubuntu 19.10/Debian10 Fix) をONにして [保存] する
  5. OpenFortiGUIにてアイコンの [追加] > [VPN] をクリックし、「CLIでの確認」4で用いたVPN接続の設定を新規追加して [保存] する
  6. OpenFortiGUIのVPN接続一覧から使用したいVPN接続設定を選択してアイコンの [接続] を押すと、VPN接続が実行される。状態が「切断」から「接続済み」へ変化すると接続成功。[切断] を押すと接続は切断される
  7. 各VPN接続設定ごとに細かい設定も行えるようだ

追記 [2022-12-15]: Network Manager

試してはいないが、下記リンク先で紹介されているやり方だと、元々あるデスクトップ環境のNetwork Managerと融合させることもできるのかもしれません。

参考リンク