bridge+epairで仮想HUBをvitochaで作ってみる

先日書いた記事
bridge+epairで仮想HUBを作ってみる=>できた -

を@tss_ontapさんが作成したvitochaを用いて作成します。

              • -

vitochaについての情報はこちら。
公式サイト
VITOCHA

説明スライド
VIMAGE仮想ネットワーク構築クラスライブラリ VITOCHA (通称バーチャル◯もちゃ)

              • -

ネットワーク図は前回とほぼ同じです。
今回はswitchにIPaddrを割り当てていません。
f:id:shutingrz:20140714171640p:plain

スクリプト
#!/usr/local/bin/ruby

require './vitocha/vitocha.rb'

tomocha=Operator.new

#create switch
switchNAME = "switch"
switch=Bridge.new(switchNAME)
switch.on

#hostjail connect switch
epaira, epairb = tomocha.createpair
epairaIP = "192.168.20.1"
epairaMASK = "255.255.255.0"

ifconfig(epaira + " inet " + epairaIP + " netmask " + epairaMASK)
ifconfig(epaira + " up")
switch.connect(epairb)
switch.up(epairb)


#create server01
serverNAME = "server01"
epairaIP = "192.168.20.11"
epairaMASK = "255.255.255.0"

server = Server.new(serverNAME)
epaira, epairb = tomocha.createpair
server.connect(epaira)
server.assignip(epaira,epairaIP,epairaMASK)
tomocha.register(epaira,serverNAME,epairaIP,epairaMASK)
server.up(epaira)
switch.connect(epairb)
switch.up(epairb)

#create server02
serverNAME = "server02"
epairaIP = "192.168.20.12"
epairaMASK = "255.255.255.0"

server = Server.new(serverNAME)
epaira, epairb = tomocha.createpair
server.connect(epaira)
server.assignip(epaira,epairaIP,epairaMASK)
tomocha.register(epaira,serverNAME,epairaIP,epairaMASK)
server.up(epaira)
switch.connect(epairb)
switch.up(epairb)
スクリプトを動かす
 # ./test.rb 
Hi, I'll do your job.
shell(#<Th:0x00000801d901a8>): /usr/sbin/jls host.hostname
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig bridge create
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig bridge0 vnet switch
shell(#<Th:0x00000801d901a8>): /usr/sbin/jexec switch ifconfig bridge0 name vbridge0
shell(#<Th:0x00000801d76f28>): /usr/sbin/jexec switch ifconfig vbridge0 up
shell(#<Th:0x00000801d901a8>): /usr/sbin/jexec switch ifconfig vbridge0 up
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig epair create
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig epair0a link 02:c0:e4:00:0:0a
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig epair0b link 02:c0:e4:00:0:0b
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig epair0a inet 192.168.20.1 netmask 255.255.255.0
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig epair0a up
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig epair0b vnet switch
shell(#<Th:0x00000801d901a8>): /usr/sbin/jexec switch ifconfig vbridge0 addm epair0b
shell(#<Th:0x00000801d901a8>): /usr/sbin/jexec switch ifconfig epair0b up
shell(#<Th:0x00000801d901a8>): /usr/sbin/jls host.hostname
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig epair create
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig epair1a link 02:c0:e4:00:1:0a
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig epair1b link 02:c0:e4:00:1:0b
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig epair1a vnet server01
shell(#<Th:0x00000801d901a8>): /usr/sbin/jexec server01 ifconfig epair1a inet 192.168.20.11 netmask 255.255.255.0
shell(#<Th:0x00000801d901a8>): /usr/sbin/jexec server01 ifconfig epair1a up
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig epair1b vnet switch
shell(#<Th:0x00000801d901a8>): /usr/sbin/jexec switch ifconfig vbridge0 addm epair1b
shell(#<Th:0x00000801d901a8>): /usr/sbin/jexec switch ifconfig epair1b up
shell(#<Th:0x00000801d901a8>): /usr/sbin/jls host.hostname
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig epair create
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig epair2a link 02:c0:e4:00:2:0a
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig epair2b link 02:c0:e4:00:2:0b
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig epair2a vnet server02
shell(#<Th:0x00000801d901a8>): /usr/sbin/jexec server02 ifconfig epair2a inet 192.168.20.12 netmask 255.255.255.0
shell(#<Th:0x00000801d901a8>): /usr/sbin/jexec server02 ifconfig epair2a up
shell(#<Th:0x00000801d901a8>): /sbin/ifconfig epair2b vnet switch
shell(#<Th:0x00000801d901a8>): /usr/sbin/jexec switch ifconfig vbridge0 addm epair2b
shell(#<Th:0x00000801d901a8>): /usr/sbin/jexec switch ifconfig epair2b up
jail hostから192.168.20.11(server01)にpingを打ってみる。
# ping 192.168.20.11
PING 192.168.20.11 (192.168.20.11): 56 data bytes
64 bytes from 192.168.20.11: icmp_seq=0 ttl=64 time=0.293 ms
64 bytes from 192.168.20.11: icmp_seq=1 ttl=64 time=0.253 ms
jail hostから192.168.20.12(server02)にpingを打ってみる
# ping 192.168.20.12
PING 192.168.20.12 (192.168.20.12): 56 data bytes
64 bytes from 192.168.20.12: icmp_seq=0 ttl=64 time=0.328 ms
64 bytes from 192.168.20.12: icmp_seq=1 ttl=64 time=0.080 ms
server01から192.168.20.12(server02)にpingを打ってみる
# jexec server01 ping 192.168.20.12
PING 192.168.20.12 (192.168.20.12): 56 data bytes
64 bytes from 192.168.20.12: icmp_seq=0 ttl=64 time=0.124 ms
64 bytes from 192.168.20.12: icmp_seq=1 ttl=64 time=0.080 ms

全て疎通できてますね。
vitochaを使えばepairのMACaddrの重複を防ぐことができ、また別プログラムとの連携も可能になります。



以上。