G1-4

持ち込み PC による実技を含む期末試験実施環境の構築
Development of an Environment for the Final Examination using Carried-in PC
新村 正明
Masaaki NIIMURA
信州大学
Shinshu University
Email: niimura@cs.shinshu-u.ac.jp
あらまし：プログラミング言語などの科目の試験においては，受講者の能力を計るには，プログラム作成等の実技を行うことが望ましい．さらに，授業における演習と同じ環境で試験を行うことで，環境の変化等に伴う負荷を軽減することが可能となる．また，学生の個人所有の情報端末を授業において使用する形態も広まりつつある．本研究では，ネットワークやサーバ仮想化技術を用い，学生の持ち込み PC による実技においても，不正行為が行われにくい試験実施環境の構築を行った．
キーワード：持ち込み PC，期末試験，不正行為対策

1.

はじめに企業において，従業員が私物の情報端末を業務に使用する，いわゆる BYOD（Bring Your Own Device）が広まりつつある．同様に，高等教育機関においても，多数の PC を設置した PC 端末室を用意するのではなく，学生各々が所持する PC やタブレットなどの情報端末で授業を行う形態が広まりつつある．このように，個人所有の情報端末を使用することで，教室外でもレポート作成や演習を行うことができ，授業時間外学修を円滑に進めることが可能となる．
また，プログラミング言語教育など情報端末上での演習が中心となる科目においては，期末試験など受講者の能力を測定する場合，普段演習を行っている環境上で課題を課し評価を行うが望ましい．これは，試験専用の環境を準備するなどの教授者側の負担を減らすほか，受講生も，いつもと同じ環境で課題を解くことができるため，環境の差異による負担を減らすことができる．
しかし，受講者の持ち込みの情報端末で試験を実施する場合，試験期間中の受講者間の情報交換，いわゆるカンニング行為を防止するために，通信を制限する必要がある．
本研究では，受講者の持ち込みの PC を用いて期末試験等を実施する際に，受講者間の情報交換を制限する演習環境の構築を行う．

2.

提案

2.1 想定する利用環境
本提案では，プログラミング演習など，PC 上での操作を行う演習において，学生が所持する PC を利用し，PC にインストールされたソフトウェアもしくはサーバ側で提供する演習環境を用いることとする．
また，課題の提示・提出等は Web 経由で行うものとし，サーバ側で演習環境を提供する場合も Web 経由で行う形態を想定する．さらに，期末試験においても，演習と同程度の内容の行うものとし，演習と同じシステムにより実施するものとする．

インターネット

図 1 試験環境の物理構成
2.2 無線 LAN の利用
受講者間の情報交換においては，有線もしくは無線のネットワークの利用が想定される．また，無線に関しては，通常の無線 LAN と Bluetooth の利用が想定される．
このうち，無線ネットワーク機能については，利用状況が目視では判断しにくく，不正な通信を排除することが困難である．そこで，演習環境への接続自体を無線ネットワークを通じて行うものとし，演習環境側の制御下におくこととする．このため演習環境は無線 LAN により構築することとする（図 1）．
また，Bluetooth に関しては，現時点で PC においてBluetooth を利用したメッセージングソフトウェアがないことから，ある程度の情報交換の制限とはなるが，厳密に行うには，Bluetooth の利用禁止を徹底すると共に，プロトコルアナライザによる監視等が必要となる．
2.3 VLAN の利用
無線 LAN によりネットワーク接続が行われた後，ネットワーク経由での学生間の情報交換を制限する必要がある．そこで，まず，学生各々を別々のネットワークセグメントに収容し，１つのネットワークセグメント内には学生１名しか存在しないようにする．これは，各社の無線 LAN アクセスポイントに，SSID 毎に異なる VLAN-ID を割り当て，VLAN 間でのネットワーク接続を制限する機能があり，これに― 105 ―

教育システム情報学会 JSiSE2016
第41回全国大会 2016/8/29-8/31

より実現することが可能である．
仮想サーバ

2.4 仮想サーバの利用
演習環境を提供するサーバ側での学生間の情報交換を防ぐために，サーバ仮想化技術を用い，学生毎に個別に演習用のサーバを用意する．これにより，学生は個人専用のサーバで演習を行うことになる．
図 2 に示すように，前節の VLAN と，この仮想サーバを組み合わせることで，学生間のネットワーク接続を排除したまま演習環境の提供が可能となる．

3.

VLAN 01
VLAN 02
VLAN 03

VLAN
対応
Switch

図 2 VLAN による学生間のネットワーク分離実装例

物理サーバ

本提案に基づき構築したシステムを期末試験に適用した例を説明する．試験科目はデータベースであり，学生は専用のサーバで提供される phpMyAdminを用いて SQL の作成と実行を行う．最終的な試験環境の構成は図 3 のようになった．

VLAN

ネットワークセグメント

3.1 無線 LAN - VLAN の設定

VLAN

無線 LAN アクセスポイントとして，SSID -VLANの割り当てが可能であり，かつ，SSID 間の通信を禁止する機能をもつ機種を選定した．この機能を有する無線 LAN アクセスポイントは複数存在する．
また，SSID には学生の学籍番号を設定し，ステルス機能により PC のネットワーク検索からは接続できないようにした．
3.2 サーバ設定（仮想サーバ）
演習環境を提供するサーバの機能として，ネットワークセグメントの分離と仮想サーバの提供が必要となる．
仮想サーバの提供に関しては，受講者の人数から100 台以上の仮想サーバが必要であることと，試験会場へのサーバの持ち運びを考慮して 1 台の物理サーバでの環境構築が望ましいことから，軽量なサーバ仮想化技術であるコンテナ技術を用いることとした．今回の実装では Docker を用いた．Docker は，親サーバのネットワークポートを用いて通信を行うことから，親サーバのネットワークアドレスを共有する必要がある．そこで，我々の先行研究(1)の成果を用い，リバースプロクシにより学生の学籍番号に応じて各々の Docker に接続する方法を用いた．
3.3 サーバ設定（ネットワーク）
無線 LAN の機能により分離された VLAN を収容するために，Linux Network NameSpace 機能を用いて学習者毎のネットワークセグメントを生成し，VLAN との対応付けを行った．
また，DHCP サービスをセグメント毎に提供した．
この DHCP サービスで，セグメントあたり 1 つのアドレスのみを配布し，各セグメントへの複数台の PCのアクセス制限を実現した．また，各々のセグメントから，Docker 用のセグメントへの接続が必要となることから，学生の PC からは Docker の親サーバがDefault Gateway となるよう，ルーティング情報の配布を行った．このサーバ上で，パケット交換サービスを停止することで，学生間の情報交換を制限する．

ネットワークセグメント

ネットワーク
セグメント

Port

仮想サーバ
Docker
DHCP
サーバ

リバース
プロクシ
Port

仮想サーバ
Docker

図 3 サーバ内のネットワーク構成
Default Gateway がこのように指定されていることで，ティザリング等の他のネットワーク接続手段を用いようとした場合でも，インターネット経由での通信を制限することが可能となる．
3.4 試験の実施
上記の設定により，2015 年度後期の期末試験を実施した．無線 LAN アクセスポイントとしては，
BUFFALO WAPM-APG600H を用いた．この機種は，32 の SSID を収容することができ，受講生は 100 名程度であったことから，4 台のアクセスポイントを準備した．また，物理サーバとしては，CPU : Core i76700K 3.4GHz Memory : 32GB SSD : 256GB のサーバを用意し CentOS 上で仮想サーバ・ネットワークの設定を行った．
この環境で，学生は phpMyAdmin による SQL の作成・実行を行った．ネットワーク接続に関しては，事前に接続確認を行い，同時アクセス可能であることを確認した．また，試験実施中に DB サーバが高負荷になる SQL の実行が数件あったが，Docker のリソース制限機能により，他の受験者に影響が及ぶことはなかった．

4.

まとめ

本提案により，学生の持ち込み PC による期末試験実施環境の提供が可能となった．今後は，Bluetoothなどの他の無線通信手段への対応や，試験サーバへの攻撃，想定外の通信方法の発見などのためにネットワーク監視機能を追加する予定である．
参考文献(1) 落合聡裕, 國宗永佳, 新村正明 : SDN を用いた受講者個別の動的な演習用サーバの提供方法 ; 電子情報通 信 学 会 技 術 研 究 報 告 ( 教 育 工 学 ), 115, (492),
ET2015-95, pp.11-14(2016).

― 106 ―