双网卡安装SmartOS使用VirtualBox

最近业余时间在看SmartOSFiFo相关的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已经讲的非常到位了, 这里只描述双网卡的配置!

配置VirtualBox的NAT, Host-Only网卡


vbox-nat

vb-hostonly-1

vb-hostonly-2

vb-hostonly-3

这个Adapter是dhcp enable的,自动分配ip, 192.168.56.1相当于主机的ip, virtual VM 可以通过这个ip来访问主机!

vb-hostonly-4

这里我们启用Host-Only方式的虚拟网卡, 注意Promiscuous Mode要选择 Allow All.

SmartOS中网络配置


这里我们假设你已经在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地址

创建双网卡的smart machine(local zone)


因为我们要在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

Cherrs!

563 Words 13 September 2014 Suzhou, China