Zoomでホストとして参加せずにミーティングを開催する場合の注意点

情報処理学会第82回全国大会オンライン開催ではZoomのビジネスプランを40ホスト分、1か月分だけ契約しました(前の記事)。さらに全国大会終了後、同じくオンライン開催した情報処理学会のいくつかの研究会でもこの契約でミーティングをスケジュールしました。ここではその際に経験して得た知識を書いておきます。

前提として、書いている岡部はZoomの公式のドキュメントをほとんどは読まないまま適当に使ってみて困ったらぐぐってなんとかしようとする人間です。そんなことはマニュアル読めばわかるやろということでしたらご容赦ください。

要点

「ホストの前の参加を有効にする」の設定でホスト不在のミーティングを運用するのは便利だが注意すべき点がある、ということなのですが、長くなってしまったので要点をまとめておきます。

  • 各ミーティングにはそれをスケジュールしたホストが紐づく。一人のホストに紐づいている会議は(ホスト不在のミーティングであっても)同時に一つしか開催できない。
  • ホスト不在のミーティングはスケジュールされている時間以外でもミーティングID(URL)を知っていれば参加できてしまう。
  • 複数ホストのライセンスを契約したら、その数だけZoomのユーザ(メールアドレス)を登録してそれぞれにホストのライセンスを割り当てないといけない。

Zoomの規約

Zoomの規約:https://zoom.us/jp-jp/terms.html には下記の通り記載されており、さらに契約すると「有償プランが使えるアドレスを他者と共有するのは規約違反ですのでご注意ください」というメールが送られてきました。

  • 「ホスト」とは、本ミーティングの日程設定および開始を実行できる個人を意味します。各ミーティングに1名のホストが存在します。
  • 「指定ホスト」とは、ミーティングを主催する権利をお客様から与えられている、お客様の指定従業員またはお客様の指定請負業者を意味します。指名ホストは、無制限の数のミーティングを主催できますが、1度に主催できるミーティングは1つのみです。指定ホストライセンスは、指定ホストになるためのライセンスを受けた個人以外の人物によって共有されたり使用されたりすることはありません。

ホストとホストキー

ホスト不在のミーティング

全国大会では実際のセッション会場に対応するミーティングのミーティングID(URL)を参加者(座長・発表者・聴講者)に知らせておき、以下のようなホスト不在のミーティングで運用しました。

  • Zoomではミーティングをスケジュールする際に「ホストの前の参加を有効にする」にチェックをいれておくと、ホストが参加しなくても URL だけを知っている人が参加すればミーティングが開始される。
  • そのままだとホスト不在の(参加者のだれも管理権限を持たない)状態で会議が行われる。画面の共有などにホストの許可が要らない設定にしておけば最低限のことはできる。
  • ただしマイクをONにしたまま雑音を流している参加者を強制ミュートしたりすることはできない。

ホストキー

  • ミーティングをスケジュールしたホストは、参加者に自分の「ホストキー」(6桁の数字)を伝えておくことで、ミーティングに参加することなく当該ミーティングのホスト権限を委任することができる。(規約上、パスワードを教えてホスト権限を預けるのは禁止です)
  • ホストキーを知っている参加者は、ホスト不在のミーティングにおいて画面に現れる「ホストを要求」をクリックし、ホストキーを入力することで、そのミーティングのホストになる。
  • ホスト権限を得た参加者は、他の参加者にホスト権限を移したり、他の参加者を「共同ホスト」にすることができる。
  • ホスト権限を持つ参加者が、他の参加者にホスト権限を移すことなく、かつ全体に対してミーティングを終了することなく、ミーティングから退出した場合、共同ホストがいればそちらにホスト権限が移る。共同ホストがいない状態でホスト権限を持つ参加者が退出した場合、最も早くから参加している参加者にホスト権限が移る。
  • 当該ホストのホストキーはZoomにサインインしてプロフィールの設定の一番下のあたりを見るとわかる(非表示になっている)。
  • ホストキーは変更しない限り同じ値である。すなわちホストキーを伝えた相手が以後のミーティングでホスト権限を使えないようにしたければ、速やかにホストキーを変更しておくことが必要である。

同時開催のミーティング

1ホストでのミーティングの同時開催?

同時開催のミーティングをホストすることは可能ですか? 」というページに書いてあることですが、

  • Zoomでは、すべてのミーティングに、それをスケジュールしたホストが紐づき、一人のホストに紐づいた会議は同時に一つしか開催できない、という制約がある。
  • 一方、(これがややこしいのですが) ホストが2つの異なるミーティングを同じ時間にスケジュールすることはできる。
  • さらにホストが両方のミーティングに対して「ホストの前に参加」機能を有効にしていると、先に参加者が参加したミーティングが開始され、後から参加者が参加しようとしたミーティングの側では 「Please wait for the host to start this meeting(ホストが本ミーティングを開始するまでお待ちください)」  のメッセージが表示される。
  • (さらにややこしいことに)ミーティングはスケジュールされた時間より前から参加できてしまう。すなわちホストがミーティングを時間が重ならないようにスケジュールしていたとしても、 「ホストの前に参加」機能を有効にしてそのミーティングID(URL)を参加者に伝えると、上記の競合が生じうる。
  • (さらにさらにややこしいことに)ミーティングはスケジュール上終了していてもしばらく(1週間?)は参加できてしまう。終了したミーティングをすぐに参加できなくするためには、zoom.usにサインインしてミーティング→前回のミーティングで表示される残っている予約を明示的に削除してやらねばならない。

複数ホストを契約し同時に複数のミーティングを開催する

複数ホストを契約し対応するユーザを登録する

  • 前項の通り1ホストが同時に開催できるミーティング数は一つだけである。同時に複数のミーティングを開催できるようにするためには、契約上のホスト数を増やすことが必要。
  • しかし、ホストを増やす契約をしても、それだけでは有償ホストとして制限時間のないミーティングをスケジュールするライセンスの数が増えるだけで、1ホストが同時に開催できるミーティング数が増えるわけではない。増やしたホストの分のユーザを追加で登録する(別々のメールアドレスとパスワードを設定する)必要がある。(参考:「Zoomで、同じ時間に複数のセミナーを開催するには!?」)
  • たとえば全国大会のように40のミーティングを同時に開催するには、40のユーザを登録して、それぞれにホストのライセンスを付与してやる必要がある。
  • ユーザの登録は「ユーザ管理」から行う。「インポートする」を使うとCSVファイルに記述したユーザを一括登録できる。

ミーティングのスケジュール

実際にライセンス数分の個人に紐づけてそれぞれにホストとしてミーティングを管理してもらうのであればよいのですが、全国大会では学会事務局で40ホスト分のミーティングを一括管理していました。そのような場合には以下のようにすると便利です。

  • 各ユーザにおいて「個人」の「設定」を選択して表示される画面の一番下にある「スケジュールする権限」のところで「スケジュールする権限を付与する人は」を選択して、実際にサインインしてミーティングをスケジュールするユーザー(たとえば全体の管理者である「オーナー」)を指定しておく。 スケジュール権限を付与できるのは、「ユーザ管理」で同じアカウントに登録されているユーザであり、かつ付与する側と同じライセンスを付与されているユーザーに限られる。
  • スケジュールするユーザーがスケジュールを行う際に、「新しいミーティング」のところに現れる「のスケジュール」のところでそのミーティングのホストとなる「自分」以外のユーザを選択できるようになる。
  • スケジュールするユーザのミーティングスケジュールには、スケジュールする権限を持つ他のホストのミーティングも表示され、変更や削除が可能。

P4 の simple_switch を使って Docker コンテナ間で ping する

Docker コンテナ間で P4 をデバッグできれば色々デバッグが捗るのでできるようにする(今回は mininet は使わない)。

今回使う P4 プログラムは https://github.com/p4lang/tutorials/tree/master/exercises/basic

(Optional) iptables, masq, forward を無効化する

ハマらないために、 `/etc/docker/daemon.json` で設定しても良い。

{
  "ip-forward": true,
  "ip-masq": true,
  "iptables":true
}

お互いに通信できないコンテナを作る

Docker network を別々にすれば(`simple_switch` がなければ)お互いに通信できない。

 $ docker network create network1 --subnet=172.18.100.0/24
 $ docker network create network2 --subnet=172.18.200.0/24

コンテナをたてる

IP とネットワークを指定する。

 $ docker run --rm -it --ip=172.18.100.2 --network=network1 --name=container1 busybox sh
 $ docker run --rm -it --ip=172.18.200.2 --network=network2 --name=container2 busybox sh  

simple_switch をたてる

コンテナの veth にアタッチする。Bridge interface でも良い。

 $ sudo simple_switch build/basic.json -i 1@veth65e0b28 -i 2@veth79593d4 --log-console

仮想スイッチにエントリを入れる

MAC アドレスは Docker コンテナ側から見た MAC アドレスであることに注意。

$ simple_switch_CLI
 Obtaining JSON from switch…
 Done
 Control utility for runtime P4 table manipulation
 RuntimeCmd: table_add MyIngress.ipv4_lpm MyIngress.ipv4_forward 172.18.200.2/32 => 02:42:d1:d2:6b:16 2
 Adding entry to lpm match table MyIngress.ipv4_lpm
 match key:           LPM-ac:12:c8:02/32
 action:              MyIngress.ipv4_forward
 runtime data:        02:42:d1:d2:6b:16  00:02
 Entry has been added with handle 0
 RuntimeCmd: table_add MyIngress.ipv4_lpm MyIngress.ipv4_forward 172.18.100.2/32 => 02:42:d3:9d:be:4f 1
 Adding entry to lpm match table MyIngress.ipv4_lpm
 match key:           LPM-ac:12:64:02/32
 action:              MyIngress.ipv4_forward
 runtime data:        02:42:d3:9d:be:4f  00:01
 Entry has been added with handle 12

これで ping が相互に届き、返事もできるようになる。

なお、MAC アドレスを(外から見たものにする等して)間違えていた場合、宛先インターフェースまでは届くものの返事はしない。

IPSJ 第82回全国大会 Zoomシステム構成

情報処理学会 第82回全国大会 のオンライン開催で使ったZoomの構成に関する情報をとりいそぎメモ書きレベルで公開します。

Zoom契約

2020年2月21日 Zoomビジネス用アカウント(10ホスト)$199.90/月 (2020/2/21-2020/3/30)
2020年2月26日 40ホストに変更 $496.31 (2020/2/26-2020/3/20)

設定

ユーザの登録

  • 契約時にオーナーアカウントを専用のメールアドレスで設定(ユーザ名はYasuo Okabe, 所属IPSJ で登録)、ホストライセンスを付与
  • 残り39ライセンスに相当するメールアドレスを研究室のメールサーバに設定
  • 各ユーザ名CSVファイルに入れて、Zoomで一括登録リクエスト。各ユーザにホストのライセンスが紐づくように指定
  • 届いたユーザ登録用メールについて手作業でユーザ登録(パスワードはあらかじめ乱数で生成しておきコピペ)
  • 各ユーザに対応するホストキーを控える(Excelにコピペ)
  • 各ユーザのミーティングをスケジュールする権限をオーナーアカウントに付与(必須ではないがオーナーアカウントで一覧できて便利)

ミーティングの設定

  • ミーティングをスケジュールする際の設定を「ビデオ:参加者:オフ、参加者をエントリー後にミュート、ホスト前の参加を有効、チャット可、プライベートチャット可、共同ホスト可、画面共有可(全参加者可、他の人が共有している場合に共有開始可)」に変更
  • 各ユーザにログインし「3/2から3/7まで0時から24時間の繰り返しミーティング」をスケジュール、対応するミーティングID URLを控える

Kubernetes 日記 2019/11/14

こんにちは。京都は紅葉しつつあります。

まず、前回建てるのに成功した flannel に、サンプルの Service を立てて詳しく見てみました。flannel は VXLAN を使ってノード間の通信を行っています。

flannel の詳細は多くの記事が存在するので割愛します。

flannel を見終わった後は kubernetes のダッシュボードを立ててみました。インストールはドキュメントに従って行います。

“Kubernetes 日記 2019/11/14” の続きを読む

Kubernetes 日記 2019/10/28

こんにちは。Kubernetes の季節が深まってまいりました。今回は実際に Service を立てて iptables を眺めてみました。

以下のページに従って Stateless な Service を立てます。

https://kubernetes.io/docs/tutorials/stateless-application/expose-external-ip-address/

Service の ClusterIP によってアクセスできるようになった後は、オペレーションせずに iptables の様子を眺めることにしました。

“Kubernetes 日記 2019/10/28” の続きを読む

Kubernetes 日記 2019/10/07

こんにちは。Kubernetes の季節ですね。岡部・宮崎研究室でも Kubernetes を構築し始めました。

Kubernetes (k8s) とは?

https://kubernetes.io/

Kubernetes とはコンテナオーケストレーションシステムです。サービスを立ち上げる際のコンテナ配置やネットワーク構成をやってくれるありがたいものです。

構築する

今日から実際にサーバーに k8s を立てていきます。基本的に公式ドキュメントを読みながらやっていきます。

https://kubernetes.io/docs/setup/

“Kubernetes 日記 2019/10/07” の続きを読む