OpenStack環境で、 FreeBSD Jail + VIMAGE を使った 疑似インターネット実験環境の構築

Slides:



Advertisements
Similar presentations
Xen Dom0 on FreeBSD のある生 自己紹介 FreeBSD -current を使ってます – というか、 -current しかつかってません RaspberryPi の pkg binary 作ってます – 最近更新できてません FreeBSD Workshop.
Advertisements

1 ログイン ユーザ名: root パスワード: hosei (初期設定). 2 はじめに 対象 学部 1 年生 日時 毎週木曜 6 限 18 : 30 ~ 19:30 ( 初回のみ ~ 20 : 00) 開催場所 W211 各自持参するもの ノート PC LAN ケーブル.
IP over DVB-RCS の設計と実装 研究背景 DVB-RCS 衛星回線を用いて受信局から送信局への狭帯域な戻り回線を提供 Forward Link Return Link HUB Terminal.
1 ルータ・スイッチ 基礎教育 (基礎編). 2 Agenda ~基礎編~ シスコ機器との接続方法 IOS とメモリの種類 ルータの起動順序 IOS のアクセスレベル パスワードの設定 インターフェースの設定 show コマンド copy コマンド debug コマンド CDP ( Cisco Discovery.
ネットワークからみるPCC 寺内康之.
UNIX利用法.
安全なログオン手順 2004/08/26 Port139 伊原 秀明.
UNIX利用法 情報ネットワーク特論資料.
クラウド上の仮想マシンの安全なリモート監視機構
(株)アライブネット RS事業部 企画開発G 小田 誠
Unix生活 Vol.1
Linux インストール      のための基礎知識 物理実験 I 情報実験第9回 2003/12/12 中神 雄一.
(株)アライブネット RS事業部 企画開発G 小田 誠
スキルチェック Unix編.
Android と iPhone (仮題) 情報社会とコンピュータ 第13回
join NASS ~つながりあうネットワーク監視システム~
第3回 ファイルとフォルダ 伊藤 高廣 計算機リテラシーM 第3回 ファイルとフォルダ 伊藤 高廣
Linux リテラシ 2006 第2回 基本コマンド2.
SoftLayerへのお引越し方法 お客様環境(或いは他社クラウド)からSoftLayerへの移行は簡単です。
解析サーバの現状と未来 2006/07/18 衛星データ処理勉強会 村上 弘志 現状のシステム構成など 統合解析環境としての整備
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
Step.4 基本IPネットワーク PC 1 PC 2 PC 3 PC
WindowsNTによるLAN構築 ポリテクセンター秋田 情報・通信系.
輪講: 詳解TCP/IP ACE B3 suzuk.
第13回 今日の目標 §4.3 情報セキュリティー 情報化社会の特徴を社会的な面から概観する 情報に関わる危険の要因を示す
HTTPプロトコルとJSP (1) データベース論 第3回.
ネストした仮想化を用いた VMの安全な帯域外リモート管理
ファイアウォール 基礎教育 (1日目).
ネットワーク性能評価.
基幹理工学研究科 情報理工学専攻 後藤研究室 修士1年 魏 元
インターネット技術特論 B:コマンドライン, shell 山口 実靖
アスペクト指向プログラミングを用いたIDSオフロード
Step.9 VPN VPNのトンネルを張る PC 3 PC 1 PC 2 論理ネットワーク1 xx (自動割当)
Linux リテラシ 2006 第4回 ネットワーク CIS RAT.
FreeBSDインストール 2002年4月10日.
九州大学キャンパスクラウド 利用法 情報ネットワーク特論 講義資料.
08年度授業補助TA ジュン ネットワーク設計演習Ⅱ 実機演習まとめ.
杉山耕一朗(北大理) 2009/02/06 epnetfan
Cisco Router GUI設定 CCPE3.2 紹介 本資料に記載の各社社名、製品名は、各社の商標または登録商標です。
Xenによる ゲストOSの監視に基づく パケットフィルタリング
分散IDSの実行環境の分離 による安全性の向上
KISSMEコード開発 完成まであと一歩。。かな?
IaaS型クラウドにおける インスタンス構成の動的最適化手法
CCP Express 3.3 アップグレード ガイド
仮想メモリを用いた VMマイグレーションの高速化
複数ホストに分割されたメモリを用いる仮想マシンの監視機構
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
デジタル画像とC言語.
Web - 01 IIS を インストールしよう.
実践ロボットプログラミング LEGO Mindstorms EV3 で目指せロボコン!
Step.1 LinuxとIPコマンド ifconfig [-a] [インタフェース名] arp [-n]
Step.7 ダイナミック(動的)ルーティング
Cisco Configuration Professional Express 3.3 アップデート
IaaS環境におけるVMのメモリ暗号化による情報漏洩の防止
未使用メモリに着目した 複数ホストにまたがる 仮想マシンの高速化
複数のオーバレイネットワークを制御するためのプライベートなネットワーク環境
インターネットにおける パーソナルネットワークの構築
VPNとホストの実行環境を統合するパーソナルネットワーク
仮想環境を用いた 侵入検知システムの安全な構成法
企画 協力 制作 画像提供:JAXA/NASA 高学年用.
仮想マシンに対する 高いサービス可用性を実現する パケットフィルタリング
本当は消去できていない!? ~データを完全消去する方法~
本当は消去できていない!? ~データを完全消去する方法~
衛星回線を含むネットワークにおける 動的経路制御に関する研究
システムプログラミング 第10回 プロセス間通信3 簡易Web server(準備) Chat プログラム 担当:青木義満、篠埜 功
強制パススルー機構を用いた VMの安全な帯域外リモート管理
異種セグメント端末による 分散型仮想LAN構築機構の設計と実装
nチャネルメッセージ伝送方式のためのjailによる経路制御
ユーザ認証の盗聴 2002/9/10 峯 肇史 牧之内研究室「インターネット実習」Webページ
VPNクライアント接続 サーバー保守のための安全な経路+作業者単位のアクセス制御 簡単な図 (網羅性より象徴性)
Presentation transcript:

OpenStack環境で、 FreeBSD Jail + VIMAGE を使った 疑似インターネット実験環境の構築 株式会社インターネットイニシアティブ 山本 茂 shigeru@iij.ad.jp

自己紹介 FreeBSDは 2.1.5から 基本的に current しか使っていない Linuxはよくわからない BSD自体は大学で4.3BSDにふれたのが最初 基本的に current しか使っていない もちろん業務用PCもcurrent よって release 版のことはよくわからない Linuxはよくわからない 必要迫られるとmanとgoogleで調べてなんとかする 今はFreeBSD/RaspberryPiで遊んでます http://freebsd-current.os-hackers.jp/pub/FreeBSD/ @BsdHacker

概要 FreBSD の Jail と VIMAGE の紹介 OpenStack環境で疑似インターネット環境を作って実験してみた なぜ軽量仮想化を使ったのか OpenStackで使ってわかったTips

FreBSD の Jail と VIMAGE の紹介

FreeBSDのJail(1) chroot(8)の発展系 root directoryを変更する プロセスの実行環境を分離 ファイルシステムに対するアクセスを制限できる プロセスの実行環境を分離 プロセスの実行をJailの中だけに制限できる Jailで実行中のプロセスはJail外のプロセスに対して影響を与えられない Linux emulator機能を利用すると、linux環境を作ることができる ただし、現在対応しているのは32bit環境のみ

FreeBSDのJail(2) Jail外ではすべてのプロセスが見える jail 1 では、p1 だけが見える

VIMAGE(1) Jail毎に異なるネットワークスタックを作成できるようにするための拡張 FreeBSD 9.0 Releaseから普通に使える ただし、kernelのre-compileは必要 オプションを付けずにコンパイルしたものは使えない 混ぜるな危険 まだ対応できていないドライバ/スタックもある ネットワークインタフェースを自由にJailに配置できる Jailに配置されたネットワークはJail専用になる

VIMAGE(2) Jail外では、em0とem3が見える Jail 1 では、em1 だけが見える p0 p1 p2 p3 em0 em1 em2 em3 Jail外では、em0とem3が見える Jail 1 では、em1 だけが見える Jail 2 では、em2 だけが見える

chroot/jail/VIMAGEのまとめ ファイルシステム 分離 プロセス 共通 ネットワークスタック

Jail + VIMAGE で遊んでみよう jailを四つ作る それぞれのjailにはネットワークインタフェースを二つ作る ループ状に接続 bridge3 bridge1 lan1 lan1 lan1 lan1 jail 1 jail 2 jail 3 jail 4 lan0 lan0 lan0 lan0 bridge0 bridge2

材料 FreeBSD 9.1 Relase jail(8), jls(8), jexec(8) epair(4) if_bridge(4) “optin VIMAGE”をつけてkernelを再構築 jail(8), jls(8), jexec(8) epair(4) if_bridge(4) Ifconfig(8) Nameオプション tmpfs(5) nullfs(5)

作り方 VIMAGE付きのFreeBSD環境を用意する Jail用のファイルシステムを準備する “vnet”オプション付きでjailを作成

VIMAGE付きのFreeBSD環境を用意 FreeBSD 9.1 Release をインストールする source code を取得する インストール時にsrcを入れておくと楽 “option VIMAGE”を追加してkernelを再構築する # cd /usr/src/sys/amd64/conf # cat > VIMAGE <<EOM include GENERIC ident VIMAGE option VIMAGE EOM # cd /usr/src # make buildworld # make buildkernel KERNCONF=VIMAGE # make installkernel KERNCONF=VIMAGE

Jail用のファイルシステムを準備する chroot と同じように各Jail用のrootを用意する “cp –r”, tar, dump なのでファイルをすべてコピーする ZFSを使ってcloning nullfsを使って必要なディレクトをmount

Jail用のファイルシステムの作成 # mkdir –p /jail # mount –t tmpfs tmpfs /jail # for I in 1 2 3 4 do mkdir –p /jail/jail${i} mkdir -p /jail/jail${i}/{dev,proc,lib/libexec,etc,bin,sbin,usr,var} mount –t devfs devfs /jail/jail${i}/dev mount –t procfs proc /jail/jail${i}/proc for d in lib libexec etc bin sbin usr var mount –t nullfs /${d} /jail/jail${i}/${d} done

“vnet”オプション付きでjailを作成 指定オプション 目的 -c Jailの作成 persist 恒常的なJail環境の作成 vnet VIMAGEを利用する jid JailのIDを指定する path Jailのroot filesystemを指定する host.hostname Hostnameを設定する # jail –c persist vnet jid=1 path=/jail/jail1 host.hostname=“jail-1” # jail –c persist vnet jid=2 path=/jail/jail2 host.hostname=“jail-2” # jail –c persist vnet jid=3 path=/jail/jail3 host.hostname=“jail-3” # jail –c persist vnet jid=4 path=/jail/jail4 host.hostname=“jail-4” # jls JID IP Address Hostname Path 1 - jail-1 /jail/jail1 2 - jail-2 /jail/jail2 3 - jail-3 /jail/jail3 4 - jail-4 /jail/jail4

作ったjailにインタフェースを作成 epairインタフェースを作成する A/Bの二つの口をもつ仮想インタフェース イメージはEthernetケーブル AからB、BからAにパケットが送信される # kldload if_epair # for i in 1 2 3 4 do for n in 0 1 ifconfig epair1${n} create ifconfig epair${i}${n}a vnet ${i} jexec ${i} ifconfig epair${i}${n}a name lan${n} jexec ${i} ifconfig lan${n} inet6 –ifdisabled accept_rtadv up ifconfig epair${i}${n}b up done

各jailのインタフェースを接続 仮想ブリッジインタフェース(if_bridge)を作成し、b側のepairインタフェースを接続していく イメージとしては仮想HUB # ifconfig bridge0 create up # ifconfig bridge0 addm epair10b addm epair20b # ifconfig bridge1 create up # ifconfig bridge1 addm epair21b addm epair31b # ifconfig bridge2 create up # ifconfig bridge2 addm epair30b addm epair40b # ifconfig bridge3 create up # ifconfig bridge3 addm epair41b addm epair11b

各jailのネットワーク設定を行う 後はjexecコマンドを使って操作する以外は、通常のネットワーク設定作業と同じ # jexec 1 ifconfig lan0 inet 192.168.4.1/24 # jexec 1 ifconfig lan1 inet 192.168.1.1/24 # jexec 2 ifconfig lan1 inet 192.168.1.2/24 # jexec 2 ifconfig lan0 inet 192.168.2.2/24 # jexec 3 ifconfig lan0 inet 192.168.2.3/24 # jexec 3 ifconfig lan1 inet 192.168.3.3/24 # jexec 4 ifconfig lan1 inet 192.168.3.4/24 # jexec 4 ifconfig lan0 inet 192.168.4.4/24 # for i in 1 2 3 4 do jexec ${i} sysctl net.inet.ip.forwarding=1 jexec ${i} sysctl net.inet6.ip6.forwarding=1 jexec ${i} route add default 192.168.${i}.$(((${i}%4)+1)) done

Tips epairをEthernetケーブル、bridgeをHUBとみなすことで、ケーブルのつなぎ変えを再現できる Jail側のインタフェースはどのJailでも同じ構成にしておくと設計が楽 できるだけ計算で決められるようなJailのホスト名、インタフェース名、アドレス設定、ネットワーク構成にしておくことで、大規模なネットワークを構成しやすい

参考資料 http://people.allbsd.org/~hrs/FreeBSD/sato-FBSD20120608.pdf たぶん、こちらの方がわかりやすいです

Openstack環境で疑似インターネット環境を作って実験してみた

OpenStackでFreeBSD Jail/VIMAGEを使った疑似インターネット環境の構築 NICTの委託研究にかかわっていた 大規模コンテンツ配信基盤を実現するアクセス網のクラウド化

ルータ コアルータ 局舎ルータ ホームノード P2P情報提供サーバ P2P型コンテンツ配信サーバ Cache, meta info エッジノード meta info Cache, ホームノード 局舎ルータ コアルータ P2P情報提供サーバ P2P型コンテンツ配信サーバ ルータ

実験ネットワークに対する要求 エンドノードをいっぱい作りたい ルータもいっぱい作りたい ネットワーク構成も自由に変更したい エンドノードやルータの実装に手を入れたい 物理的な機器を使うにはお金が… なら仮想化環境を使おう

一般的な仮想化環境を考えてみる エンドノード一つにVM一つ ルータ一つにVM一つ VMのメモリ2Gとすると、Host側のメモリが32Gだと、16VM/1Hostぐらいか? エンドノードを100ノードぐらい作りたい場合、7Hostぐらい必要 1000ノードだと63Hostぐらい… ネットワーク構成を自由にしたいならVLANが使えるL2 switchが必要 これってStarBet…

そうだ、JailとVIMAGEがあった Jailは軽量仮想化なので、いっぱいノードが作成できる FreeBSDならコードもあるていどわかっている lxc… Linuxはよく知らないんです…

JID/インタフェース名 計算でJIDやインタフェース名を決められるようにする VMの番号: VID = 1,2,3,… 数を変えやすくするため VMの番号: VID = 1,2,3,… コアルータ JID(C) = VID = 1,2,3,… 局舎ルータ JID(R) = (JID(C)×10 + r), r = 1,2,3,… ホームノード JID(H) = (JID(R)×10 + h), h = 1,2,3,… エッジノード JID(E) = 100 + (JID(R)×10 + e), e=1,2,3,… ユーザ JID(U) = 200 + (JID(R)×10 + u), u = 1,2,3,… インタフェース番号 = JID×10 + i, i = 0,1,2,3 Jail側はlan0, lan1, lan2, lan3 Jail外はepairNb, Nはインタフェース番号

こういうJailになりました Core Router: 1 局舎ルータ: 9 局舎一つあたりのEdge/Home/Userの数: 9組 合計: (9×3)×9 + 1 = 243 c1 r11 r19 e111 e112 e199 h211 h212 h299 u311 u312 u399

さらに数を増やす場合 同じ構成のVMを立ち上げる tun(4)を使ってVM間の接続回線を作る IPv6アドレスを使ってtunnelを作成 作ったtunnelをbridge/epairを使ってL2接続 VM1 VM2 tun0 tun0 bridge1000 bridge1000 Core Router Core Router

OpenStack上で使う場合のTips 1/3 ディスクイメージは小さい方がいい 必要最小限のイメージを作る 標準以外のソフトはpkgで起動後に入れる GPTを使って、起動時に空き領域を確保する 設定などはリモートから取得できるようにしておく VMを削除するとディスクイメージごと消える

OpenStack上で使う場合のTips 2/3 使う必要がないメモリは使わない Jail自体よりJailで動くプロセスの方がメモリを使う 不要なプロセスは立ち上げない 経路制御もできればstaticで設定 ZFSを使わず、UFSを使う 変更されない部分は、NULLFS 設定ファイルの名前を別々にして、設定ファイルをオプションで指定 必要に応じてUNIONFSの利用も考える

OpenStack上で使う場合のTips 3/3 HostnameにVMのIDを入れておき、hostnameからVMのIDを取り出す 設定は、計算で決まるようにしておく 設定が楽になるようにするため 本当はOpenStack対応を頑張るのが正道なんだろうけど…

まとめ FreeBSDのJailとVIMAGEはそこそこ使えるようになっている Jail/VIMAGE/epair/bridgeを組み合わせると実験ネットワークの構築が簡単にできる Jailは軽量仮想化なので数を稼ぎやすい Jailは完全/準仮想環境でも利用できるため、実験環境を固定できる