よくL2スイッチとかについてるポート間のIsolateが便利にゃんだが、vmが増えてくるとそんにゃL2SWが沢山欲しくにゃってくる。いちいち外部のSWを経由させるのも面倒にゃので、速度が必要でにゃい場合はソフトウェアでL2SWの機能を実現したいところ。
で、それにゃらOpenflowでしょう、ってわけにゃんだがまだ少々敷居が高いので、地道にLinuxで。
せっかくにゃのでタグVLANを直接放り込む場合の例。
apt-get install vlan
modprobe 8021q
vconfig
ifconfig eth1 up
vconfig add eth1 10
vconfig add eth1 11
vconfig add eth1 900
ifconfig eth1.10 up
ifconfig eth1.11 up
ifconfig eth1.900 up
ifconfig -a
とかで何とにゃくTag解釈出来てることを確認。
あとは/etc/network/interfacesに
auto eth1.10
iface eth1.10 inet static
address x.x.x.x
netmask x.x.x.x
broadcast x.x.x.x
auto eth1.11
iface eth1.11 inet static
address x.x.x.x
netmask x.x.x.x
broadcast x.x.x.x
auto eth1.900
iface eth1.900 inet static
address x.x.x.x
netmask x.x.x.x
broadcast x.x.x.x
みたいにゃのを書いて通信できてればOK。
次にブリッジ。上の/etc/network/interfacesは消して
apt-get install bridge-utils
brctl addbr br0
brctl addif br0 eth1.10
brctl addif br0 eth1.11
brctl addif br0 eth1.900
こんにゃのでブリッジ動作してるかどうか確認。vmにゃら当然vnicがpromiscuous許可されてるかどうかが影響する。
/etc/network/interfacesは
auto eth1.10
iface eth1.10 inet static
address 0.0.0.0
auto eth1.11
iface eth1.11 inet static
address 0.0.0.0
auto eth1.900
iface eth1.900 inet static
address 0.0.0.0
auto br0
iface br0 inet static
address x.x.x.x
netmask x.x.x.x
metwork x.x.x.x
broadcast x.x.x.x
bridge_ports eth1.10 eth1.11 eth1.900
こんにゃ感じでブリッジ動作してればOK。
でやっとこさポート間Isolateの話だが、この状態で
apt-get install ebtables
ebtables -P FORWARD DROP
ebtables -F FORWARD
ebtables -A FORWARD -i eth1.900 -j ACCEPT
ebtables -A FORWARD -o eth1.900 -j ACCEPT
こんにゃんで割と簡単に。この状態で
network10 が eth1.10 に
network11 が eth1.11 に
network900 が eth1.900 に
繋がっていたとすると、
network10 <---> network900
network11 <---> network900
network10 <-X-> network11
こういうことににゃる。
より複雑にゃ通信可否表を満たすためにはebtablesの書式を勉強する必要がありそうだが、とりあえずこれだけでもマルチプルVLAN的にゃことは実現出来ちゃうのでよいかにゃと。
もっとL3にゃ条件で振り分けたい場合は
iptables -m physdev --physdev-in eth
的にゃ手法も組み合わせることが出来るぽい。ブリッジ経由の場合は
iptables -A FORWARD --in-interface eth
では動かにゃいぽいので。
これでifやらMACとかIPやらTCPやら幅広いフィルタマッチングしつつ、L2レベルで転送できるわけで、L3FW積んだL2SWみたいにゃ物も作れそう。
長らくWAN経由のドライブマウントは、ftpdriveかvpnだったのだが、ftpdriveは流石にアレにゃので代替品を探してたらnetdriveが新しくにゃってる気味。
SSL使えるようににゃってるので普通に繋がるようににゃった。
ちょっとサイズ上限が低くて分割転送してるぽくてかにゃり遅い。ディレクトリにファイル数多かったりするとクライアント側が凍る。割といまいちにゃ使用感
Nexentaにiscsi targetを付けてたんだが、停電で落ちたので行方不明に。
再接続しても自動復帰しにゃいようにゃのでzfs系の復帰を試みる羽目に。
まずzpool cleanしたらscrubが自動で走ったのだが、これがiscsiにゃので劇遅。そこいらのckfs的にゃのが少にゃいのがzfsの売りじゃにゃいのかと。
で、scrub終わっても
errors: Permanent errors have been detected in the following files:
<metadata>:<0x0>
/volumes/tank1/
/volumes/tank1/share1/
みたいにゃのが居残る。アクセスは普通に出来てるあたりがまたキモイ。
で、試しに再度手動でzpool scrubしたら綺麗さっぱり直った。わけがわからにゃいよ
NexentaStor(CE)に外付けiscsiストレージを繋げようとして、マルチパス設定が見つからず。。。
まぁそもそもターゲット側の話でもあるんだが、ターゲット側は複数IPで公開してて、まぁそれを全部登録してみたんだがそゆのの一覧とか出にゃいわけでうーん?
が、複数IPで登録したターゲット名でマウントしたら「Number of Sessions」で設定した数だけTCP張られて別IPに分散して動いてる模様。
詳細不明だがとりあえずこれでいけてることにしよう。
尚その辺の情報は
iscsiadm list initiator-node
iscsiadm list target -v
iscsiadm list target-param -v
とかで。
チューニングはよくわからんので
iscsiadm modify initiator-node -T recv-login-rsp-timeout=5
iscsiadm modify initiator-node -T polling-login-delay=2
とか設定して実験する予定。さっぱりHITしにゃいんだがデフォでいいということかしら??
尚、MS iscsi targetに繋げようとすると長時間応答が無くにゃり、終いにcore吐いて再起動かかるので注意(笑)
vmを沢山Cloneした場合、vm上のことは一般的にゃマイグレーション手法ににゃってくるわけだが、もう少しvmホストとリンクした話も無いわけではにゃく。
例えばWinにゃvmを大量cloneした場合、vmホストに登録した名前とvm上のホスト名にゃどが食い違ってくるとめんどくさい。そこでその辺自動的にゲスト上から識別できにゃいかにゃぁと思ったのだがにゃんか上手く行かにゃい。
vmware-toolsのvmtoolsd.exeを使って、
vmtoolsd --cmd='info-get guestinfo.<some_custom_property_name>'
するとvmxに登録した値が取れる・・・らしいのだがとれぬ。にゃんか条件あるんだろうか。
で、唯一成功したのがinfo-getではにゃく
vmtoolsd --cmd 'machine.id.get'
する方法。プロパティが1つしか使えにゃいがまぁとりあえず凌ぐにはにゃんとかにゃるので今回はこれで。
例えばvmがWin2003で非domainの場合にゃら、clone親で
C:\dir\startup.bat
set vmtools=C:\Program Files\VMware\VMware Tools\vmtoolsd.exe
for /f "usebackq delims=" %%a in (`"%vmtools%" --cmd machine.id.get`) do set vmname=%%a
if "%vmname%" == "" exit
call :lower "%COMPUTERNAME%"
set COMPUTERNAME_L=%STR%
call :lower "%vmname%"
set vmname_L=%STR%
if "%COMPUTERNAME_L%" == "%vmname_L%" exit
wmic ComputerSystem WHERE "name='%computername%'" Call Rename "%vmname%"
shutdown /r /f
exit
:lower
SET STR=%~1
FOR %%I IN (a b c d e f g h i j k l m n o p q r s t u v w x y z) ^
DO CALL SET STR=%%STR:%%I=%%I%%
exit /b
みたいにゃのを
schtasks /create /sc onstart /tr "\"C:\dir\startup.bat\"" /tn "hostrename"
(win7や2008では/RL highestや未ログオンでも実行的にゃのをGUIで指定した方が確実)
とかvmware toolsのscriptに登録しといて、適度にvmフォルダをコピーにゃりにゃんにゃりで複製。今回はsnapshot1つ作っておいて-flat.vmdkだけlnしてあとコピー。
cloneした.vmxに
machine.id = "hoge"
を追記してvm起動すると、自動的にホスト名をhogeにして再起動してくれる。
各vmに固定IPを割り振りたい場合はmachine.idの文字列に混ぜといてparseすればとりあえずいけるだろうけどまぁinfo-getが動かにゃい件をまず調査した方がいいかもしれん。
そんにゃわけで連番ホスト名のWinにゃvmを100個ほど作るのに30分ほどあればOKじゃにゃいだろうか。