最近业余时间在看SmartOS和FiFo相关的IaaS的东西,就尝试了一把在VirtualBox中安装smartos, 最初只是使用NAT的连接方式, 发现主机无法访问global/local zone. 当然通过NAT的端口转发还是可以访问global zone的,local zone就没有办法直接访问了。 经过一番折腾后终于实现了我的目的, 在global/local zone中可以访问外网(通过NAT的连接), 主机可以访问global/local zone (通过Host-Only的连接), 记录下安装方案以备忘。 在这里就不再废话SmartOS在VirtualBox中的安装了,具体的可以看李宇的blog -> 在VirtualBox中跑SmartOS已经讲的非常到位了, 这里只描述双网卡的配置!
这个Adapter是dhcp enable的,自动分配ip, 192.168.56.1相当于主机的ip, virtual VM 可以通过这个ip来访问主机!
这里我们启用Host-Only方式的虚拟网卡, 注意Promiscuous Mode要选择 Allow All.
这里我们假设你已经在virtual box中把smartos跑起来了. 我应该可以看到e1000g0(NAT的虚拟网卡)已经可用了, 安装smartos的时候使用dhcp的方式,自动分配到了IP。
e1000g0: flags=1004943<UP,BROADCAST,RUNNING,PROMISC,MULTICAST,DHCP,IPv4> mtu 1500 index 2 inet 10.0.2.15 netmask ffffff00 broadcast 10.0.2.255 ether 8:0:27:b0:cd:4c
同时我们还可以通过_dladm show-link_命令看到如下信息,自动创建了一个_vmwarebr_的桥接:
[root@08-00-27-b0-cd-4c /opt]# dladm show-link LINK CLASS MTU STATE BRIDGE OVER e1000g0 phys 1500 up vmwarebr -- vmwarebr0 bridge 1500 up -- e1000g0
这个时候我们会问, Host-Only的虚拟网卡在哪里?
[root@08-00-27-b0-cd-4c /opt]# dladm show-phys -m LINK SLOT ADDRESS INUSE CLIENT e1000g0 primary 8:0:27:b0:cd:4c yes e1000g0 e1000g1 primary 8:0:27:9c:77:4d yes e1000g1
e1000g1 网卡是存在的只是没有启动而已!
启用Host-Only虚拟网卡, 同时对应建立一个worldbr的bridge:
$ ifconfig e1000g1 plumb $ ifconfig e1000g1 dhcp $ dladm create-bridge -l e1000g1 worldbr $ sysinfo -u
看结果:
[root@08-00-27-b0-cd-4c /opt]# dladm show-link LINK CLASS MTU STATE BRIDGE OVER e1000g0 phys 1500 up vmwarebr -- e1000g1 phys 1500 up worldbr -- vmwarebr0 bridge 1500 up -- e1000g0 worldbr0 bridge 1500 up -- e1000g1
修改/usbkey/config增加一个external的vnic给smartos, 清单:
# # This file was auto-generated and must be source-able by bash. # # admin_nic is the nic admin_ip will be connected to for headnode zones. admin_nic=8:0:27:53:61:ae admin_ip=dhcp admin_netmask= admin_network=... admin_gateway=dhcp external_nic=8:0:27:9c:77:4d external0_ip=dhcp external0_gateway=dhcp headnode_default_gateway= dns_resolvers=8.8.8.8,8.8.4.4 dns_domain= ntp_hosts=0.smartos.pool.ntp.org compute_node_ntp_hosts=dhcp
注意,这里external_nic的值是host-only虚拟网卡的mac地址
因为我们要在local zone中访问外网并可以让主机直接访问,所以需要配置2 个vnics, myvm.json清单:
{ "brand": "joyent", "image_uuid": "fdea06b0-3f24-11e2-ac50-0b645575ce9d", "alias": "web01", "hostname": "web01", "max_physical_memory": 1024, "quota": 20, "resolvers": ["114.114.114.114", "8.8.8.8", "8.8.4.4"], "nics": [ { "nic_tag": "admin", "ip": "10.0.2.58", "netmask": "255.255.255.0", "gateway": "10.0.2.2" }, { "nic_tag": "external", "ip": "192.168.56.242", "netmask": "255.255.255.0", "gateway": "192.168.56.1" } ] }
一个使用NAT的网卡,另一个使用Host-Only网卡
由于smartos 的local zone不支持密码登录,我们需要把主机的id_rsa.pub公钥文件放入local zone的authorized_keys文件,
/zones/<LOCAL_ZONE_UUID>/root/root/.ssh/authorized_keys
下面就可以直接在主机登录local zone来测试了:
$ ssh root@192.168.56.242 The authenticity of host '192.168.56.242 (192.168.56.242)' can't be established. RSA key fingerprint is ec:4c:62:85:2d:c9:75:87:0e:c7:a3:a0:05:79:70:cb. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.56.242' (RSA) to the list of known hosts. Last login: Thu Sep 11 12:03:53 2014 from 192.168.56.1 __ . . _| |_ | .-. . . .-. :--. |- |_ _| ;| || |(.-' | | | |__| `--' `-' `;-| `-' ' ' `-' / ; SmartMachine base64 1.8.4 `-' http://wiki.joyent.com/jpc2/SmartMachine+Base [root@web01 ~]#
访问外网:
$ ping -a timtang.me timtang.me (173.255.253.43) is alive
当然你也可以同样的方式来测试global zone, 如果global zone中域名无法解析可以修改/etc/resolv.conf增加,dns服务器地址:
nameserver 114.114.114.114 nameserver 8.8.8.8 nameserver 8.8.4.4