コンテナ版Workspace ONE Tunnelを展開してみる

コンテナ版Workspace ONE Tunnelを展開してみる

Omnissa Workspace ONE UEM におけるセキュリティ機能の1つとして、 VPN を提供する Omnissa Workspace ONE Tunnel があります。

そのサーバー側コンポーネントとしては、最も代表的であり複数のゲートウェイサービス機能を有する Omnissa Unified Access Gateway のほかに、Tunnel ゲートウェイサービス機能のみを有するコンテナ版 Workspace ONE Tunnel が提供されています。

今回はコンテナ版 Workspace ONE Tunnel のデプロイを紹介していきます。

Tunnel ゲートウェイ 接続テスト成功


事前準備

参考資料

コンテナ版 Workspace ONE Tunnel の展開手順については以下を参考にしています。


今回は RHEL とのバイナリ互換のある AlmaLinux を利用するため、 Docker Docs の RHEL 向けドキュメントを参考にしています。

なお、 CentOS は2021年末に RHEL とのバイナリ互換性としてのディストリビューションから、 RHEL のアップストリームとなる CentOS Stream へと移行していることを踏まえ、他のブログ等で言及されている CentOS 向けのリポジトリは使用していません。


動作要件

コンテナ版 Workspace ONE Tunnel では、Tunnel ゲートウェイサービスを実行するホスト、Tunnel コンテナをデプロイする Tunnel CLI ツール (dux) を実行するサーバーの2つが必要です。

それぞれのシステム要件は以下の通りです。

  • Tunnel ゲートウェイサービスを実行するサーバー (以後、 Docker ホスト)
    • ホスト OS 要件
      • 任意の Linux ディストリビューション
        • 一部組み込み Linux 環境は対応不可
      • Linux 環境上に Docker がインストールされ動作している
      • パスワード無し sudo での全コマンド管理者権限実行が可能
    • 通信要件
      • UEM Console API への接続
      • AWCM への接続
      • カスケード接続の場合はフロントエンドとバックエンドの通信が可能
  • Tunnel CLI ツール (dux) を実行するサーバー (以後、管理ホスト)
    • ホスト OS 要件
      • CentOS/RHEL 7以上、または macOS
        • CentOS/RHEL 7以上の場合
          • yum/dnf での導入
          • rpm パッケージでの導入
        • macOS の場合
          • 要 brew (HomeBrew, パッケージマネージャ)
      • Tunnel コンテナイメージデータを指定パスへ格納
        • CentOS/RHEL 7以上の場合
          • /opt/omnissa/dux/images/
        • macOS の場合
          • Intel プロセッサ搭載機種の場合
            • /usr/local/var/opt/omnissa/dux/images
          • Apple シリコン搭載機種の場合
            • /opt/homebrew/var/opt/omnissa/dux/images/
    • 通信要件
      • Tunnel サーバーへの ssh 接続が可能


なお、コンテナイメージ バージョン 24.10、および、 Tunnel CLI ツール バージョン 2.3 の時点では、コンテナ版 Workspace ONE Tunnel を利用した場合にアウトバウンドプロキシの指定が行えません。

そのため、 Tunnel ゲートウェイサービスが直接 UEM Console API および AWCM に接続が行える環境である必要があります。

また、「パスワード無し sudo での全コマンド管理者権限実行が可能」については、セキュリティの観点で考慮が必要な項目であるため、専用のユーザーを作成する方針とします。


前提条件

今回は以下の環境にて実施しています。

  • 両サーバー共通
    • 動作環境
      • 仮想マシン
    • OS
      • AlmaLinux 9.5
        • Minimal インストール
    • RAM
      • 8GB
    • ストレージ
      • 20GB
    • 初期ユーザー構成
      • root
        • 無効化
      • user
        • 管理者ユーザー
  • 製品バージョン情報
    • Workspace ONE UEM コンソール
      • 2410
    • Tunnel コンテナイメージ
      • 24.10.482-2024.11.28-2127985
    • Tunnel CLI ツール
      • 2.3.0.405
なお、 Workspace ONE UEM コンソール側でのトンネルサーバー構成は、 Unified Access Gateway と同様であるため、今回は実施済みである前提としています。

コンテナ版Workspace ONE Tunnelセットアップ

Workspace ONE Tunnel コンテナイメージの取得

Workspace ONE Tunnel のコンテナイメージ、および、 CLI ツールのインストールファイルは、Omnissa Customer Connect から取得が可能です。

ダウンロードには Omnissa Customer Connect アカウントでのサインインが必要です。

執筆時点の2025年4月では、以下のパスからたどることができました。

[Product and Accounts] > [All Products] > [Omnissa Workspace ONE Tunnel - View Download Components] > [Workspace ONE Tunnel for Linux - Go to Downloads] > [DOWNLOAD NOW]

以下のリンクにて、プラットフォーム別の選択ページを直接開くことも可能です。

Download Omnissa Workspace ONE Tunnel

Omnissa Customer Connect Download Page

なお、CLI ツールについては、今回の手順では本ファイルではなく専用リポジトリからの取得にて実施するため、ここでのダウンロードは行いません。


1. 管理ホスト:事前準備

Docker ホストへの接続に利用する ssh 鍵ペアを作成します。

  1. ssh 鍵ペアの作成コマンドを実行
    $ ssh-keygen
  2. ssh 鍵ペアをデフォルトの保存先で作成するため Enter キーを押下
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/user/.ssh/id_rsa): 
  3. CLI ツールの仕様によりパスフレーズを利用できないためそのまま Enter キーを押下
    Created directory '/home/user/.ssh'.
    Enter passphrase (empty for no passphrase): 
  4. 再度そのまま Enter キーを押下
    Enter same passphrase again: 
  5. CLI ツールの仕様によりパスフレーズを利用できないため入力せずに Enter キーを押下
    Your identification has been saved in /home/user/.ssh/id_rsa
    Your public key has been saved in /home/user/.ssh/id_rsa.pub
    The key fingerprint is:
    SHA256:2SIUcg6sqS57ta+oiKMO8P8LThcOAgI9AtTAV5tu6yw user@al9-dux
    The key's randomart image is:
    +---[RSA 3072]----+
    |*+o.+.o          |
    |o.oo.=o.         |
    |o..+ oo          |
    |..o ..   o       |
    |... .oo S .      |
    |o. .oo.o .       |
    |o ..ooo          |
    |*..E+o           |
    |X*. =*+.         |
    +----[SHA256]-----+
    
  6. 作成した鍵ペアの公開鍵情報を表示、出力された文字列を控える
    $ cat ~/.ssh/id_rsa.pub


2. Docker ホスト: Docker コンポーネントインストール

Docker ホストとするサーバーで Docker コンポーネントをインストールします。

今回は Docker 公式リポジトリからパッケージの取得を行います。

なお、 Docker 公式のドキュメントでは dnf-plugins-core のインストールが求められていますが、 AlmaLinux 9 では Minimal インストールであっても標準インストールされていたため省略しています。

  1. Docker 公式リポジトリをパッケージマネージャーに追加
    $ sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
  2. Docker パッケージをインストール
     $ sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
  3. 下記のようにパッケージのダウンロードおよびインストールが完了するまで待機
    ※[-y] オプションによりインストール時、 GPG Key の承認を自動的に実施しています。セキュリティ上、明確に GPG Key の確認を行う必要がある場合はオプションを外してください。
    Docker CE Stable - x86_64                                                                                                                                                      70 kB/s |  32 kB     00:00    
    Dependencies resolved.
    ==============================================================================================================================================================================================================
     Package                                                    Architecture                            Version                                           Repository                                         Size
    ==============================================================================================================================================================================================================
    Installing:
     containerd.io                                              x86_64                                  1.7.25-3.1.el9                                    docker-ce-stable                                   43 M
     docker-buildx-plugin                                       x86_64                                  0.21.1-1.el9                                      docker-ce-stable                                   16 M
     docker-ce                                                  x86_64                                  3:28.0.1-1.el9                                    docker-ce-stable                                   20 M
     docker-ce-cli                                              x86_64                                  1:28.0.1-1.el9                                    docker-ce-stable                                  8.3 M
     docker-compose-plugin                                      x86_64                                  2.33.1-1.el9                                      docker-ce-stable                                   15 M
    Installing dependencies:
     container-selinux                                          noarch                                  3:2.232.1-1.el9                                   appstream                                          55 k
     fuse-overlayfs                                             x86_64                                  1.14-1.el9                                        appstream                                          66 k
     libslirp                                                   x86_64                                  4.4.0-8.el9                                       appstream                                          67 k
     slirp4netns                                                x86_64                                  1.3.1-1.el9                                       appstream                                          46 k
    Installing weak dependencies:
     docker-ce-rootless-extras                                  x86_64                                  28.0.1-1.el9                                      docker-ce-stable                                  3.2 M
    
    Transaction Summary
    ==============================================================================================================================================================================================================
    Install  10 Packages
    
    Total download size: 106 M
    Installed size: 422 M
    Downloading Packages:
    (1/10): libslirp-4.4.0-8.el9.x86_64.rpm                                                                                                                                       1.0 MB/s |  67 kB     00:00    
    (2/10): container-selinux-2.232.1-1.el9.noarch.rpm                                                                                                                            799 kB/s |  55 kB     00:00    
    (3/10): fuse-overlayfs-1.14-1.el9.x86_64.rpm                                                                                                                                  953 kB/s |  66 kB     00:00    
    (4/10): slirp4netns-1.3.1-1.el9.x86_64.rpm                                                                                                                                    4.5 MB/s |  46 kB     00:00    
    (5/10): docker-ce-28.0.1-1.el9.x86_64.rpm                                                                                                                                      12 MB/s |  20 MB     00:01    
    (6/10): docker-buildx-plugin-0.21.1-1.el9.x86_64.rpm                                                                                                                          9.7 MB/s |  16 MB     00:01    
    (7/10): docker-ce-rootless-extras-28.0.1-1.el9.x86_64.rpm                                                                                                                     7.3 MB/s | 3.2 MB     00:00    
    (8/10): docker-ce-cli-28.0.1-1.el9.x86_64.rpm                                                                                                                                  14 MB/s | 8.3 MB     00:00    
    (9/10): containerd.io-1.7.25-3.1.el9.x86_64.rpm                                                                                                                                17 MB/s |  43 MB     00:02    
    (10/10): docker-compose-plugin-2.33.1-1.el9.x86_64.rpm                                                                                                                         30 MB/s |  15 MB     00:00    
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Total                                                                                                                                                                          30 MB/s | 106 MB     00:03     
    Docker CE Stable - x86_64                                                                                                                                                      27 kB/s | 1.6 kB     00:00    
    Importing GPG key 0x621E9F35:
     Userid     : "Docker Release (CE rpm) <docker@docker.com>"
     Fingerprint: 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35
     From       : https://download.docker.com/linux/rhel/gpg
    Key imported successfully
    Running transaction check
    Transaction check succeeded.
    Running transaction test
    Transaction test succeeded.
    Running transaction
      Preparing        :                                                                                                                                                                                      1/1 
      Installing       : docker-buildx-plugin-0.21.1-1.el9.x86_64                                                                                                                                            1/10 
      Running scriptlet: docker-buildx-plugin-0.21.1-1.el9.x86_64                                                                                                                                            1/10 
      Installing       : docker-compose-plugin-2.33.1-1.el9.x86_64                                                                                                                                           2/10 
      Running scriptlet: docker-compose-plugin-2.33.1-1.el9.x86_64                                                                                                                                           2/10 
      Running scriptlet: container-selinux-3:2.232.1-1.el9.noarch                                                                                                                                            3/10 
      Installing       : container-selinux-3:2.232.1-1.el9.noarch                                                                                                                                            3/10 
      Running scriptlet: container-selinux-3:2.232.1-1.el9.noarch                                                                                                                                            3/10 
      Installing       : containerd.io-1.7.25-3.1.el9.x86_64                                                                                                                                                 4/10 
      Running scriptlet: containerd.io-1.7.25-3.1.el9.x86_64                                                                                                                                                 4/10 
      Installing       : docker-ce-cli-1:28.0.1-1.el9.x86_64                                                                                                                                                 5/10 
      Running scriptlet: docker-ce-cli-1:28.0.1-1.el9.x86_64                                                                                                                                                 5/10 
      Installing       : libslirp-4.4.0-8.el9.x86_64                                                                                                                                                         6/10 
      Installing       : slirp4netns-1.3.1-1.el9.x86_64                                                                                                                                                      7/10 
      Installing       : fuse-overlayfs-1.14-1.el9.x86_64                                                                                                                                                    8/10 
      Running scriptlet: fuse-overlayfs-1.14-1.el9.x86_64                                                                                                                                                    8/10 
      Installing       : docker-ce-rootless-extras-28.0.1-1.el9.x86_64                                                                                                                                       9/10 
      Running scriptlet: docker-ce-rootless-extras-28.0.1-1.el9.x86_64                                                                                                                                       9/10 
      Installing       : docker-ce-3:28.0.1-1.el9.x86_64                                                                                                                                                    10/10 
      Running scriptlet: docker-ce-3:28.0.1-1.el9.x86_64                                                                                                                                                    10/10 
      Running scriptlet: container-selinux-3:2.232.1-1.el9.noarch                                                                                                                                           10/10 
      Running scriptlet: docker-ce-3:28.0.1-1.el9.x86_64                                                                                                                                                    10/10 
      Verifying        : container-selinux-3:2.232.1-1.el9.noarch                                                                                                                                            1/10 
      Verifying        : fuse-overlayfs-1.14-1.el9.x86_64                                                                                                                                                    2/10 
      Verifying        : libslirp-4.4.0-8.el9.x86_64                                                                                                                                                         3/10 
      Verifying        : slirp4netns-1.3.1-1.el9.x86_64                                                                                                                                                      4/10 
      Verifying        : containerd.io-1.7.25-3.1.el9.x86_64                                                                                                                                                 5/10 
      Verifying        : docker-buildx-plugin-0.21.1-1.el9.x86_64                                                                                                                                            6/10 
      Verifying        : docker-ce-3:28.0.1-1.el9.x86_64                                                                                                                                                     7/10 
      Verifying        : docker-ce-cli-1:28.0.1-1.el9.x86_64                                                                                                                                                 8/10 
      Verifying        : docker-ce-rootless-extras-28.0.1-1.el9.x86_64                                                                                                                                       9/10 
      Verifying        : docker-compose-plugin-2.33.1-1.el9.x86_64                                                                                                                                          10/10 
    
    Installed:
      container-selinux-3:2.232.1-1.el9.noarch       containerd.io-1.7.25-3.1.el9.x86_64        docker-buildx-plugin-0.21.1-1.el9.x86_64  docker-ce-3:28.0.1-1.el9.x86_64  docker-ce-cli-1:28.0.1-1.el9.x86_64 
      docker-ce-rootless-extras-28.0.1-1.el9.x86_64  docker-compose-plugin-2.33.1-1.el9.x86_64  fuse-overlayfs-1.14-1.el9.x86_64          libslirp-4.4.0-8.el9.x86_64      slirp4netns-1.3.1-1.el9.x86_64      
    
    Complete!
  4. Docker コンポーネントを自動起動する設定を行うと同時に起動
    $ sudo systemctl enable --now docker
  5. 以下のように出力されることを確認
    Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.


3. Docker ホスト: SSH 待ち受けポートの限定

メーカー側の推奨として SSH サーボスを待ち受けるインターフェースの制限が求められているため、 SSH サービスの設定変更を行います。

なお、実施しない場合でも展開自体は行えますが、展開検証時および展開時に警告が表示されます。

  1. SSH サービスの設定ファイルを編集
    $ sudo vi /etc/ssh/sshd_config
  2. [ListenAddress] 行で待ち受けを行う IP アドレスを指定
    ListenAddress 192.0.2.1 ※実際の Docker ホストの IP アドレスを指定
  3. SSH サービスをリロードして設定を反映
    sudo systemctl reload sshd.service


4. Docker ホスト:管理用ユーザー追加

「パスワード無し sudo での全コマンド管理者権限実行が可能」を実現するにあたり、セキュリティ上のリスクを小さくするために、 以下の方針としています。

  • 専用ユーザーを作成
  • 専用ユーザーはパスワードログイン不可​
    • su による他ユーザーからの切り替えは不可​
  • 専用ユーザーは ssh で鍵ペアによるログインのみ許可​
  • 専用ユーザーのみ全コマンドで sudo のパスワード無しを設定​

必要に応じて追加の対策を実施してください。

上記方針に従い、 Docker ホスト上に専用ユーザー dux を作成します。

  1. 専用ユーザー dux を UID 2000 でホームディレクトリを含めて作成
    ※UID は環境に応じて修正してください。
    $ sudo adduser -m -s /bin/bash -u 2000 -U dux
  2. dux ユーザーの パスワード付き sudo を許可するための設定ファイルを新規作成
    $ sudo visudo -f /etc/sudoers.d/dux
  3. 以下の定義を記載して保存
    dux ALL= NOPASSWD: ALL
  4. dux ユーザーのホームディレクトリに .ssh ディレクトリを追加
    $ sudo -i -u dux mkdir /home/dux/.ssh
  5. 許可する ssh 鍵ペアの公開鍵を登録するファイルを新規作成
    $ sudo -i -u dux vi /home/dux/.ssh/authorized_keys
  6. [1. 管理ホスト事前準備] - 6 で出力された公開鍵情報を記載して保存
  7. 許可する ssh 鍵ペアの公開鍵を登録するファイルのパーミッションを適切なものに変更
    $ sudo -i -u dux chmod 0600 /home/dux/.ssh/authorized_keys


5. 管理ホスト: Tunnel CLI ツールのインストール

今回の手順では、 Linux 向けのリポジトリ登録による方法を記載します。

その他、 Linux 向けに Tunnel CLI ツールの rpm パッケージを用いてローカルインストールを行う方法、 macOS 向けのサードパーティ製パッケージマネージャである HomeBrew を用いてインストールする方法が提供されています。

  1. Tunnel CLI ツール用の専用リポジトリを作成
    $ cat << EOF | sudo tee /etc/yum.repos.d/dux.repo
    [dux]
    name=Workspace ONE Tunnel CLI
    baseurl=https://packages.omnissa.com/ws1-tunnel/dux
    enabled=1
    gpgcheck=0
    EOF
  2. Tunnel CLI ツールをインストール
    $ sudo dnf install -y dux
  3. 下記のようにパッケージのダウンロードおよびインストールが完了するまで待機
    AlmaLinux 9 - AppStream                                                                                                                                                       5.0 kB/s | 4.2 kB     00:00    
    AlmaLinux 9 - AppStream                                                                                                                                                       5.3 MB/s |  15 MB     00:02    
    AlmaLinux 9 - BaseOS                                                                                                                                                          4.3 kB/s | 3.8 kB     00:00    
    AlmaLinux 9 - BaseOS                                                                                                                                                          6.6 MB/s |  17 MB     00:02    
    AlmaLinux 9 - Extras                                                                                                                                                          4.2 kB/s | 3.3 kB     00:00    
    AlmaLinux 9 - Extras                                                                                                                                                           16 kB/s |  13 kB     00:00    
    Workspace ONE Tunnel CLI                                                                                                                                                      446  B/s | 1.6 kB     00:03    
    Dependencies resolved.
    ==============================================================================================================================================================================================================
     Package                                        Architecture                                      Version                                                Repository                                      Size
    ==============================================================================================================================================================================================================
    Installing:
     dux                                            x86_64                                            2.3.0.405-1                                            dux                                            3.0 M
    
    Transaction Summary
    ==============================================================================================================================================================================================================
    Install  1 Package
    
    Total download size: 3.0 M
    Installed size: 9.1 M
    Downloading Packages:
    dux-2.3.0.405-1.x86_64.rpm                                                                                                                                                    1.4 MB/s | 3.0 MB     00:02    
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Total                                                                                                                                                                         1.4 MB/s | 3.0 MB     00:02     
    Running transaction check
    Transaction check succeeded.
    Running transaction test
    Transaction test succeeded.
    Running transaction
      Preparing        :                                                                                                                                                                                      1/1 
      Running scriptlet: dux-2.3.0.405-1.x86_64                                                                                                                                                               1/1 
      Installing       : dux-2.3.0.405-1.x86_64                                                                                                                                                               1/1 
      Running scriptlet: dux-2.3.0.405-1.x86_64                                                                                                                                                               1/1 
    installed
    
      Verifying        : dux-2.3.0.405-1.x86_64                                                                                                                                                               1/1 
    
    Installed:
      dux-2.3.0.405-1.x86_64                                                                                                                                                                                      
    
    Complete!
  4. Tunnel CLI ツールの動作確認のためバージョン情報を確認
    $ dux version
  5. 下記のようにバージョン情報が出力されることを確認
    Workspace ONE Tunnel CLI (dux)
    2.3.0.405
  6. Tunnel CLI ツールの初回設定を実施
    $ dux init
  7. 下記のように初期化成功と出力されることを確認
    Deployment manifest initialized successfully in /opt/omnissa/dux/

6. 管理ホスト: Tunnel コンテナ展開準備

Omnissa Workspace ONE Tunnel では、 docker コマンドを用いずに [Tunnel CLI ツール] と専用構成ファイルでの定義を用いた展開を行います。

管理ホストにて実施する展開の事前準備を記載します。

  1. 管理ホストのユーザーホームディレクトリに Tunnel コンテナイメージを格納
  2. Tunnel コンテナイメージを Tunnel CLI ツールの既定のディレクトリに格納
    $ sudo mv ~/24.10.482-2024.11.28-2127985.tar.gz /opt/omnissa/dux/images/
  3. Tunnel CLI ツールで使用する構成ファイルを編集
    $ sudo vi /opt/omnissa/dux/ts_manifest.yml
  4. uem セクションにて、環境に応じて以下を設定
    uem:
      url: https://asXXX.awmdm.com ※Tunnel 連携先 UEM API サーバー URL
    
      tunnel_config_id: 550e8400-e29b-41d4-a716-446655440000 ※Tunnel 構成 UUID
    
      group_id: <Tunnnel 構成先グループ ID>
    
      admin:
        username: <管理者アカウント ID>
    [tunnel_config_id:]と[group_id:]はいずれかのみでも可能です。
  5. tunnel_server セクションにて、環境に応じて以下を設定して保存
    「:」と値の間に半角スペースが必要で有るため注意してください。
    tunnel_server:
      image_name: 24.10.482-2024.11.28-2127985.tar.gz ※ Tunnel コンテナイメージ ファイル名
    
      ssh_login_credentials:
        ssh_user: dux ※Docker ホストへ接続する際のユーザーを指定
        ssh_key_path: /home/<user>/.ssh/id_rsa ※ssh 鍵ペアの秘密鍵ファイルパスを指定
        #ssh_port: ※Docker ホストの ssh ポートが 22 以外の場合はコメントアウトして番号を指定
    
      hosts:
        - address: 192.0.2.1 ※Docker ホストアドレス
    
          # The deployment role for the server.
          # 0 - basic mode
          # 1 - cascade mode - frontend
          # 2 - cascade mode - backend
          server_role: 0 ※ベーシックモードとして Tunnel を構成する場合
    
      # Add entries to the container hosts file to manually link FQDN to IP address
      # Format:
      ## - host_name:
      ##   ip_address:
      host_entries: ※host定義を行う場合のみ指定​
  6. 構成ファイルのチェックおよび展開の試験を実施
    $ dux deploy -d
  7. 構成ファイルの検証が成功して、 Docker ホストの接続に確認が求められたら [yes] を入力して Enter キーを押下
    Manifest file syntax validation is successful
    
    Verifying Tunnel Server image location given in manifest: 24.10.482-2024.11.28-2127985.tar.gz
    
    The authenticity of host '192.0.2.1:22' can't be established.
    Fingerprint of the host's key:SHA256:kHMbnxnn/RK8B8Ou4I4nHuDcOPRscpIndI0MqA3KXuk
    Do you want to continue connecting? (yes/no): 
  8. 以下のように展開検証が成功することを確認T
    Added host 192.0.2.1:22 to known_hosts
    
    Verifying deployment prerequisites on 192.0.2.1
    Verifying docker is installed and running on 192.0.2.1
    
    Checking open SSH connections to confirm SSH is configured securely
    SSH is securely enabled only on the internal IP.
    
    Checking for availablility of sufficient free disk space
    Host 192.0.2.1 is good to deploy
    Manifest file and hosts are good to deploy!


7. 管理ホスト: Docker ホストへの Tunnel ゲートウェイサービス展開

構成ファイルの検証後、当該定義にて展開を開始します。

  1. Tunnel コンテナの展開を開始
    $ dux deploy
  2. 構成ファイルで指定した管理者アカウントのパスワードを入力して Enter キーを押下
    Enter UEM password: 
  3. Tunnel コンテナ用のパフォーマンスチューニングを行うため [y] を入力して Enter キーを押下
    The perf_tune option has been enabled in the manifest. The perf_tune script will modify the Tunnel server host machines to provide recommended performance settings. Do you want to run the perf_tune script? (y/n):
  4. 以下のように Tunnel ゲートウェイサービスの展開が成功することを確認
    Checking open SSH connections to confirm SSH is configured securely
    SSH is securely enabled only on the internal IP.
    
    Preparing for Tunnel server container deployment on 192.0.2.1
    Tunnel server container image is already present on the host. Will not need to copy the image for deployment
    Deploying new Tunnel server container on 192.0.2.1
    Tunnel server container ID: 18a7d00aecf21155d098703703f8264ce2964038a5574a33dd1a32bdad0490ac
    
    Fetching the deployment status. Please wait. This may take some time
    Node number(n): 1        Version: 24.10.el9.482          CPU:   0.50%    Memory:   722.000 MB   Devices: 0      Cascade: off            Status: Running
    Deployment is up!
    Deploy command has completed on 192.0.2.1


Tunnel ゲートウェイサービスのステータス確認

展開した Tunnel ゲートウェイサービスのステータスは、管理ホストの Tunnel CLI ツールにて確認を行うことができます。

以下に、確認できる情報の一例を紹介します。

ステータス確認

  1. Tunnel CLI ツールにてステータスコマンドを実行
    $ dux status
  2. 以下のようにバージョンや CPU/RAM 使用率や接続状況が出力される
    Status of Tunnel Server containers deployed
    
    1. Host: 192.0.2.1        Node number(n): 1        Version: 24.10.el9.482          CPU:   3.02%    Memory:   786.000 MB   Devices: 0      Cascade: off            Status: Running


VPN レポート情報確認

  1. Tunnel CLI ツールにてレポートコマンドを実行
    $ dux report
  2. 以下のように詳細なレポート情報が出力される
    Vpnreport of Tunnel Server containers deployed
    
    1. Host: 192.0.2.1 
    Tunnel Version:      24.10.el9.482                                     
    Console Version:     24.10.135.3                                     
    Operating System:    AlmaLinux 9.2 (Turquoise Kodkod)                                     
    MultiTunnel Config:  Tunnel Container                      
    MultiTunnel Cfg UID: 550e8400-e29b-41d4-a716-446655440000     
    # of Devices:        0         Peak:      0                     
    A:0  iOS:0  Mac:0  Win:0  Lnx:0  ChmeOS:0  Othrs:0  SDK:0  
    # of Connections:    0         Peak:      0                     
    # of Traffic Rules:  1         Enabled:   Yes                   
    # of Proxies:        1         Up:        0         Down: 1      
    API Connectivity:    Up        Last Resp: 200 OK                 
    AWCM Connectivity:   Up        Last Resp: 200 OK                 
    API via Traf Rules:  No                                    
    Cascade Mode:        Off       Reverse Connect:     No             
    KCD Proxy Support:   No        Config Locked:       No          
    TLS Port Sharing:    No        Deployment Mode:     Prod        
    FIPS Mode:           No        NSX Mode:            No          
    ZTNA DTR:            No        # of ZTNA DTR:       0            
    Appliance Mode:      No        Container Mode:      Yes          
    MFA:                 Off    JWT:                 No                         
    Service Status:      Up                                         
    Log Lvl:             Error                                 
    SOCKS Downstream:       0.000 Kbps                         
    SOCKS Upstream:         0.000 Kbps                         
    NAT Downstream:         0.000 Kbps                         
    NAT Upstream:           0.000 Kbps                         
    Total Downstream:       0.000 Kbps                         
    Total Upstream:         0.000 Kbps                         
    CPU 1:  3.96%% CPU 2:  6.00%%                              
    Average CPU:             3.55 %%                           
    Memory Virtual:       786.000 MB                           
    Memory Resident:       71.391 MB                           
    Memory Share:          15.625 MB                           
    Certificate Expiry Info                                    
    Server cert:        Feb 07,2027                            
    API cert:           Feb 07,2045                            
    Client cert:        Feb 07,2045                            
    API Last Sync:        2025-04-20 06:12:16                    
    AWCM Last Sync:       2025-04-20 06:19:39                    
    Up Time:              0d 2h 7m 54s                         
    # of Allowlisted Devices:          0                       
    # of Devices Since Start:          0                       
      Using DTLS:                      0                       
    # of Device Failures                                       
      Closed Handshake:                0                       
      Failed Handshake:                0                       
      Rejected due to DDoS Protection: 0                       
      Blocked due to ZTNA Policy:      0                       
      Blocked by Admin:                0                       
      Unable to Connect to BackEnd:    0                       
      Device Not in Allowlist:         0                       
      Device Non-Compliant:            0                       
      Device Non-Managed:              0                       
    # MFA                                                      
      Succeeded:                       0                       
      Failures:                        0                       
      JWT Failures:                    0                       
    Outbound Traffic Since Start                               
      # of Successful Connections:     0                       
      # of Failed Connections:         0                       
      # of Blocked by ZTNA:            0                       
      # Using Proxy:                   0                       
      # Not Using Proxy:               0                       
    # of Flows by Device Type                                  
      iOS:         0                                           
      Android:     0                                           
      Windows:     0                                           
      MacOS:       0                                           
      Linux:       0                                           
      ChromeOS:    0                                           
      Others:      0                                           
    # of Flows from SDK Bundled App:  0                        
    # of Flows by Protocol                                     
      TCP:                             0                       
      UDP:                             0                       
        Connected UDP:                 0                       
        Connectionless UDP:            0                       
        Per Device UDP Limit:          1321                    
    Popular Apps                             TCP   UDP   PKT   
      1.                                     0     0     0     
      2.                                     0     0     0     
      3.                                     0     0     0     
      4.                                     0     0     0     
      5.                                     0     0     0     
      6.                                     0     0     0     
      7.                                     0     0     0     
      8.                                     0     0     0     
    Devices with Most Traffic                TCP   UDP   PKT   
      1.                                     0     0     0     
      2.                                     0     0     0     
      3.                                     0     0     0     
      4.                                     0     0     0     
      5.                                     0     0     0     
      6.                                     0     0     0     
      7.                                     0     0     0     
      8.                                     0     0     0     
    Top Destinations                         TCP   UDP   PKT   
      1.                                     0     0     0     
      2.                                     0     0     0     
      3.                                     0     0     0     
      4.                                     0     0     0     
      5.                                     0     0     0     
      6.                                     0     0     0     
      7.                                     0     0     0     
      8.                                     0     0     0  


Tunnel ゲートウェイサービスの停止と削除

Tunnel ゲートウェイサービスは、管理ホストの Tunnel CLI ツールにてサービスの停止や起動、削除を行うことができます。

Tunnel ゲートウェイサービスの停止

  1. Tunnel CLI ツールにて停止コマンドを実行
    $ dux stop
  2. 停止対象のサービス情報を確認して [y] を入力して Enter キーを押下
    Are you sure you want to stop the Tunnel Server containers deployed in all the hosts given in the manifest? 
    ip : 192.0.2.1 node-number : 1 
    Please confirm (y/n): 
  3. サービスが停止して以下のメッセージが出力される
    Tunnel server container was successfully stopped on 192.0.2.1


Tunnel ゲートウェイサービスの再起動

Tunnel サービスを再起動する、停止したサービスを起動する場合、いずれも restart コマンドを使用します。

起動状態を問わず、出力内容は同じでした。

  1. Tunnel CLI ツールにて再起動コマンドを実行
    $ dux restart
  2. 再起動対象のサービス情報を確認して [y] を入力して Enter キーを押下
    Are you sure you want to restart the Tunnel Server containers deployed in all the hosts given in the manifest? 
    ip : 192.0.2.1 node-number : 1 
    Please confirm (y/n): 
  3. サービスが再起動して以下のメッセージが出力される
    vpnserver Container was successfully restarted on 192.0.2.1


Tunnel ゲートウェイサービスの削除

  1. Tunnel CLI ツールにて削除コマンドを実行
    $ dux destroy
  2. 削除対象のサービス情報を確認して [y] を入力して Enter キーを押下
    Are you sure you want to destroy the Tunnel Server containers deployed in all the hosts given in the manifest?
    ip : 192.0.2.1 node-number : 1 
    Please confirm (y/n):
    
  3. Tunnel コンテナが Docker 上から削除されて以下のメッセージが出力される
    Tunnel server container was successfully destroyed on 192.0.2.1


Omnissa Workspace ONE UEM コンソールでの表示

Unified Access Gateway での構成時と同様、 Tunnel 構成の [接続のテスト] にて接続されている Tunnel ゲートウェイの情報が確認できます。

Tunnel ゲートウェイ コンテナ版表示

ただし、明確に Unified Access Gateway とコンテナ版 Tunnel ゲートウェイサービスとしての表示はされません。

ただし、バージョンは表記されるため、今後のリリースで同一バージョンとなる可能性もありますが、区別を行うことは可能です。

なお、今回の検証時点では、以下のようにバージョン情報の関連性を確認できました。

  • Workspace ONE UEM コンソールでの表記
    • 24.10.el9.482
  • コンテナイメージのファイル名
    • 24.10.482-2024.11.28-2127985.tar.gz


おわりに

今回は コンテナ版 Workspace ONE Tunnel を Docker 上に展開する流れを紹介しました。

Unified Access Gateway は仮想アプライアンスであるため、展開がサポートされていない環境では利用することが難しい場合があるため、そのような環境では簡単に展開することができます。

一方、パスワード無しで全コマンドに sudo を実行する要件はセキュリティ上の考慮事項が大きいと感じます。

Docker に慣れていない管理者向けに Tunnel CLI ツールでの展開が提供されていますが、 Docker に慣れている管理者にとっては逆に手間を感じるケースもあると思います。

また、現時点では Unified Access Gateway 向けには提供されているリソース要件が提供されていない点も注意が必要です。

この3つにより、他の Docker コンテナとの同時起動は難しい場合もあると思います。

そのため、通常の Docker コンテナとしての展開もサポートされると望ましいと感じました。

また、個人的な感想として Unified Access Gateway が利用可能な環境では、そちらを使う方が管理や操作が扱いやすいため、それぞれの特性を踏まえた導入が望ましいと考えています。

コメント

このブログの人気の投稿

【自宅ラボ】VCSA のリストアを実施してみる (vSphere 8)

TestDPC を用いた Android EMM トラブルシューティング方法

LinuxでOmnissa Workspace ONE Tunnelを利用してみる (UEM設定編)

【自宅ラボ】VCSA のバックアップを実施してみる (vSphere 8)