我正在通过在 CentOS 主机内构建小型虚拟网络来学习网络。我需要最高层的一些指导来开始计划:
场景:
CentOS 7 HOST 需要有一个 CentOS 7 GUEST,并且 HOST 和 GUEST 必须各自具有不同的静态公共 IP 地址。据我所知,这是通过在主机上创建一个桥来完成的。
HOST 物理盒通过以太网连接到网关 IP 地址为 的路由器/调制解调器12.34.567.8aa
。有 5 个可用的公共静态 IP 地址,包括12.34.567.111
、12.34.567.222
、12.34.567.333
、12.34.567.444
和12.34.567.555
如何为 HOST、BRIDGE 和 GUEST 定义静态公共 IP 地址? 他们应该拥有三个独立的 IP 地址吗?或者HOST和BRIDGE应该有相同的IP吗?
HOST 上定义的当前 IP 地址如下。 HOST 与路由器/调制解调器的连接为eno1
,BRIDGE 定义为br1
。
[root@remote-host ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether making:this:anonymous brd making:this:anonymous
inet 12.34.567.111/29 brd 12.34.567.8xx scope global eno1
valid_lft forever preferred_lft forever
inet6 making:this:anonymous scope global dynamic
valid_lft 414553sec preferred_lft 414553sec
inet6 making:this:anonymous scope global noprefixroute dynamic
valid_lft 2419198sec preferred_lft 345598sec
inet6 making:this:anonymous scope link
valid_lft forever preferred_lft forever
3: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether making:this:anonymous brd making:this:anonymous
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
link/ether making:this:anonymous brd making:this:anonymous
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
link/ether making:this:anonymous brd making:this:anonymous
50: br1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether making:this:anonymous brd making:this:anonymous
inet 12.34.567.111/29 brd 12.34.567.8xx scope global br1
valid_lft forever preferred_lft forever
inet6 making:this:anonymous scope link
valid_lft forever preferred_lft forever
63: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br1 state UNKNOWN qlen 1000
link/ether making:this:anonymous brd making:this:anonymous
inet6 making:this:anonymous scope link
valid_lft forever preferred_lft forever
[root@remote-host ~]#
答案1
根据libvirt 文档:
桥接到 LAN
这是具有静态有线网络配置的主机上一般访客连接的推荐配置。
提供从虚拟机直接到 LAN 的桥接。这假设主机上有一个桥接设备,该设备具有一个或多个受控的主机物理网卡。来宾 VM 将具有一个使用名称 vnetN 创建的关联 tun 设备,该设备也可以使用该元素覆盖(请参阅覆盖目标元素)。 tun 设备将受制于桥。 IP 范围/网络配置是 LAN 上使用的任何内容。这为来宾虚拟机提供了完整的传入和传出网络访问,就像物理机一样。
使用 virsh 创建网桥
根据RHEL 文档,您可以使用virsh
创建一个桥,例如br0
基于eth0
接口的桥:
# virsh iface-bridge eth0 br0
如果您想要/需要拆除桥,请执行以下操作
# virsh iface-unbridge br0
创建网络启动脚本
如果这不能按您需要的方式工作,请手动创建/编辑初始化脚本/etc/sysconfig/network-scripts/
。 本节直接来自libvirt 文档页面:
在 /etc/sysconfig/network-scripts 目录中需要创建 2 个配置文件。第一个 (ifcfg-eth0) 定义您的物理网络接口,并表示它将成为网桥的一部分:
# cat > ifcfg-eth0 <<EOF
DEVICE=eth0
HWADDR=00:16:76:D6:C9:45
ONBOOT=yes
BRIDGE=br0
NM_CONTROLLED=no
EOF
显然,更改 HWADDR 以匹配您实际的 NIC 地址。您可能还希望在此处使用例如 MTU=9000 配置设备的 MTU。
第二个配置文件 (ifcfg-br0) 定义桥接设备:
# cat > ifcfg-br0 <<EOF
DEVICE=br0
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=yes
DELAY=0
NM_CONTROLLED=no
EOF
警告:行 TYPE=Bridge 区分大小写 - 它必须具有大写“B”和小写“ridge”
更改此后重新启动网络(或简单地重新启动)
# service network restart
最后一步是禁用网桥上的 netfilter:
# cat >> /etc/sysctl.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
EOF
# sysctl -p /etc/sysctl.conf
出于性能和安全原因,建议这样做。请参阅 Fedora 错误 #512206。或者,您可以配置 iptables 以允许所有流量通过网桥转发:
# echo "-I FORWARD -m physdev --physdev-is-bridged -j ACCEPT" > /etc/sysconfig/iptables-forward-bridged
# lokkit --custom-rules=ipv4:filter:/etc/sysconfig/iptables-forward-bridged
# service libvirtd reload
网络管理器和桥接
虽然我不确定这是否仍然正确,但由于正在积极开发,因此NetworkManager
不支持桥接。因此,可能需要禁用它并使用该network
服务:
# chkconfig NetworkManager off
# chkconfig network on
# service NetworkManager stop
# service network start
因此,一旦您创建了“桥接”接口,按照文档中的概述将物理网卡从属到它,然后您需要编辑虚拟来宾的配置以从属它是网卡也连接到主机上的网桥。
...
<devices>
...
<interface type='bridge'>
<source bridge='br0'/>
</interface>
<interface type='bridge'>
<source bridge='br1'/>
<target dev='vnet7'/>
<mac address="00:11:22:33:44:55"/>
</interface>
...
</devices>
完成后,主机物理 NIC 连接的路由器将通过 DHCP 向桥接接口分配地址 - 既适用于主机又/或来宾。
有一个服务器故障问答这可能有助于设置来宾配置。本质上,使用virsh
(假设您正在使用libvirt
),做
virsh net-list
virsh net-edit $NETWORKNAME
查找该dhcp
部分并编辑为类似这样的内容
<dhcp>
<range start='192.168.122.100' end='192.168.122.254'/>
<host mac='52:54:00:6c:3c:01' name='vm1' ip='192.168.122.11'/>
<host mac='52:54:00:6c:3c:02' name='vm2' ip='192.168.122.12'/>
<host mac='52:54:00:6c:3c:03' name='vm3' ip='192.168.122.12'/>
</dhcp>
/var/lib/libvirt/dnsmasq/
注意:现有映射中可能存在一个“hosts”文件。
nl /var/lib/libvirt/dnsmasq/myvirtnet.lan.hostsfile
1 52:54:00:39:ae:1c,192.168.122.242,minirhel.myvirtnet
2 52:54:00:9b:0a:42,192.168.122.133,rhel7.myvirtnet
3 52:54:00:f9:1e:45,192.168.122.134,rhel7.myvirtnet
4 52:54:00:b0:d5:38,192.168.122.205,redqcow.myvirtnet
5 52:54:00:af:c4:9c,192.168.122.206,redqcow.myvirtnet