理解 virbr0 - 天天5分钟玩转 OpenStack(11)


virbr0 是 KVM 默认建立的一个 Bridge,其做用是为链接其上的虚机网卡提供 NAT 访问外网的功能。 linux

virbr0 默认分配了一个IP 192.168.122.1,并为链接其上的其余虚拟网卡提供 DHCP 服务。 web

下面咱们演示如何使用 virbr0。 ubuntu

在 virt-manager 打开 VM1 的配置界面,网卡 Source device 选择 “default”,将 VM1 的网卡挂在 virbr0 上。
网络

启动 VM1,brctl show 能够查看到 vnet0 已经挂在了 virbr0 上。dom

# brctl show bridge name     bridge id               STP enabled     interfaces br0             8000.000c298decbe       no                    eth0 virbr0          8000.fe540075dd1a       yes                   vnet0ssh

用 virsh 命令确认 vnet 就是 VM1 的虚拟网卡。 spa

# virsh domiflist VM1 Interface  Type       Source     Model       MAC ------------------------------------------------------- vnet0      network    default    rtl8139     52:54:00:75:dd:1aorm

virbr0 使用 dnsmasq 提供 DHCP 服务,能够在宿主机中查看该进程信息 blog

# ps -elf|grep dnsmasqdns

5 S libvirt+  2422     1  0  80   0 -  7054 poll_s 11:26 ?        00:00:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf

在 /var/lib/libvirt/dnsmasq/ 目录下有一个 default.leases 文件,当 VM1 成功得到 DHCP 的 IP 后,能够在该文件中查看到相应的信息

# cat /var/lib/libvirt/dnsmasq/default.leases 1441525677 52:54:00:75:dd:1a 192.168.122.6 ubuntu *

上面显示 192.168.122.6 已经分配给 MAC 地址为 52:54:00:75:dd:1a 的网卡,这正是 vnet0 的 MAC。以后就可使用该 IP 访问 VM1 了。

# ssh 192.168.122.6 root@192.168.122.6's password: Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.16.0-30-generic x86_64) Last login: Sun Sep  6 01:30:23 2015 root@VM1:~# ifconfig eth0      Link encap:Ethernet  HWaddr 52:54:00:75:dd:1a          inet addr:192.168.122.6  Bcast:192.168.122.255  Mask:255.255.255.0          inet6 addr: fe80::5054:ff:fe75:dd1a/64 Scope:Link          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:61 errors:0 dropped:0 overruns:0 frame:0          TX packets:66 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000          RX bytes:7453 (7.4 KB)  TX bytes:8649 (8.6 KB)

Ping一下外网。

root@VM1:~# ping www.baidu.com PING www.a.shifen.com (180.97.33.107) 56(84) bytes of data. 64 bytes from 180.97.33.107: icmp_seq=1 ttl=52 time=36.9 ms 64 bytes from 180.97.33.107: icmp_seq=2 ttl=52 time=119 ms 64 bytes from 180.97.33.107: icmp_seq=3 ttl=52 time=88.5 ms 64 bytes from 180.97.33.107: icmp_seq=4 ttl=52 time=38.0 ms 64 bytes from 180.97.33.107: icmp_seq=5 ttl=52 time=122 ms

没有问题,能够访问外网,说明 NAT 起做用了。

须要说明的是,使用 NAT 的虚机 VM1 能够访问外网,但外网没法直接访问 VM1。 由于 VM1 发出的网络包源地址并非 192.168.122.6,而是被 NAT 替换为宿主机的 IP 地址了。

这个与使用 br0 不同,在 br0 的状况下,VM1 经过本身的 IP 直接与外网通讯,不会通过 NAT 地址转换。

下节咱们讨论 vlan 在 linux bridge 中的实现

相关文章
相关标签/搜索