Osamu Sayama's Weblog

月曜日 1 19, 2009

crossbow

crossbow が b105 に入ったので使ってみました。とりあえず仮想 nic を一つ作るにはこんな感じ。

# dladm create-vnic -l eri0 vnic0
# dladm show-link
LINK        CLASS    MTU    STATE    OVER
eri0        phys     1500   up       --
vnic0       vnic     1500   up       eri0

でこの仮想 nic を何に使うと便利かというと、Exclusive IP の non-global zone では今まで物理 nic しか使えなかったのですが、crossbow が入って仮想 nic を使えるようになったことだと思います(Xen や VirtualBox からだとすでに内部インターフェースで使っていますが、public interface になったということでしょうか)。以下のような zonecfg ファイルに set ip-type=exclusive, set physical=vnic0 を指定することで Exclusive IP な zone を仮想 nic で構築できます。仮想 nic なので通常の nic 同様に snoop とったり DHCP clieint と構成したりでき、Exclusive IP の non-global zone をたくさん作成することが可能になりました。

# cat zonecfg/jura-z1
create -b
set zonepath=/export/jura-z1
set autoboot=true
set ip-type=exclusive
:
add net
set physical=vnic0
end

また、仮想スイッチを作ってそこにプライベートネットワークを構築したりもできます。とりあえず、etherstub0 という名の仮想スイッチとそこに vnic100, vnic101 という仮想 nic を作成したのが以下。

# dladm create-etherstub etherstub0
# dladm create-vnic -l etherstub0 vnic100
# dladm create-vnic -l etherstub0 vnic101
# dladm show-link                        
LINK        CLASS    MTU    STATE    OVER
eri0        phys     1500   up       --
vnic0       vnic     1500   up       eri0
etherstub0  etherstub 9000  unknown  --
vnic100     vnic     9000   up       etherstub0
vnic101     vnic     9000   up       etherstub0

さらに以下のような構成で etherstub0 仮想スイッチのプライベートネットワーク上に Exclusive IP の non-global-zone を作ってここから外部ネットワークに接続できるような NAT を構成するには以下のようにします。

外部ネットワーク <--- Host1 ---> etherstub0 仮想スイッチ <--- Host2 (jura-z2)
                 eri0                 vnic100 (192.168.1.1)                vnic101 (192.168.1.2)

まず、global zone Host1 に vnic100 を構成する。

# ifconfig vnic100 plumb up
# ifconfig vnic100 192.168.1.1 netmask 255.255.255.0 up
# echo 192.168.1.1 > /etc/hostname.vnic100

それで Exclusive IP の non-global-zone Host2 (jura-z2) を vnic102 で構成する。

# cat zonecfg/jura-z2
create -b
set zonepath=/export/jura-z2
set autoboot=true
set ip-type=exclusive
add inherit-pkg-dir
set dir=/lib
end
add inherit-pkg-dir
set dir=/platform
end
add inherit-pkg-dir
set dir=/sbin
end
add inherit-pkg-dir
set dir=/usr
end
add inherit-pkg-dir
set dir=/opt
end
add net
set physical=vnic101
end
# zonecfg -z jura-z2 -f jura-z2
# zoneadm -z jura-z2 install
# zoneadm -z jura-z2 boot
# zlogin -C jura-z2
最後に NAT を構成する。
# routeadm -u -e ipv4-forwarding
# cd /etc/ipf
# vi ipnat.conf
map eri0 192.168.1.0/24 -> 0/32 portmap tcp/udp auto
map eri0 192.168.1.0/24 -> 0/32
# svcadm enable network/ipfilter
# zoneadm -z jura-z2 boot

これで jura-z2 の non-global zone から外部ネットワークにアクセスできるようになります。

また、もう1つ crossbow の重要な新機能でフロー制御があります。たとえば、先ほどの構成の vnic100 に 192.168.1.2 行きのパケットのフローを jura-z2 として作成するには以下のようになります。

# flowadm add-flow -l vnic100 -a remote_ip=192.168.1.2 jura-z2
で sftp で実際に 100Mbyte のファイルを転送してみると、
sftp> get dummy_100m.img
/home/sayama/dummy_100m.img を dummy_100m.img で取得しています
/home/sayama/dummy_100m.img                   100%  100MB   5.6MB/s   00:18   
5.6MB/s = 44.8Mbps ぐらいでした。ここで、この帯域を 10Mbps ぐらいに絞ってみます。
# flowadm set-flowprop -p maxbw=10m jura-z2
計測してい見ると
sftp> get dummy_100m.img
/home/sayama/dummy_100m.img を dummy_100m.img で取得しています
/home/sayama/dummy_100m.img                   100%  100MB   1.2MB/s   01:26    

1.2MB/s = 9.6Mbps になり帯域制御がきいているのが実感できます。このへんの Administration Guides に詳しく書いてますので興味のあるかたは試してみてください。

投稿されたコメント:

コメント
  • HTML文法 不許可

Calendar

Feeds

Search

Links

Navigation

Referrers