Como atribuo IPs estáticos para HOST, BRIDGE e GUEST?

3

Estou aprendendo networking criando uma pequena rede virtual em um host CentOS. Preciso de orientação ao mais alto nível para começar a planejar:

O cenário:

Um HOST do CentOS 7 precisa ter um GUIA do CentOS 7, e tanto o HOST quanto o CONVIDADO devem ter endereços IP públicos estáticos diferentes. Eu entendo que isso é feito criando uma ponte no HOST.

A caixa física HOST é conectada via Ethernet a um roteador / modem que tenha um endereço IP GATEWAY de 12.34.567.8aa . Há cinco endereços IP estáticos públicos disponíveis, incluindo 12.34.567.111 , 12.34.567.222 , 12.34.567.333 , 12.34.567.444 e 12.34.567.555

Como os endereços IP públicos estáticos devem ser definidos para o HOST, o BRIDGE e o CONVIDADO? Eles devem ter três endereços IP separados? Ou o HOST e o BRIDGE devem ter o mesmo IP?

Os endereços IP atuais, conforme definidos no HOST, são os seguintes. A conexão do HOST com o roteador / modem é eno1 e a BRIDGE é definida como 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 ~]#
    
por CodeMed 24.03.2017 / 23:04

1 resposta

0

De acordo com documentação do libvirt :

Bridge to LAN

This is the recommended config for general guest connectivity on hosts with static wired networking configs.

Provides a bridge from the VM directly to the LAN. This assumes there is a bridge device on the host which has one or more of the hosts physical NICs enslaved. The guest VM will have an associated tun device created with a name of vnetN, which can also be overridden with the element (see overriding the target element). The tun device will be enslaved to the bridge. The IP range / network configuration is whatever is used on the LAN. This provides the guest VM full incoming & outgoing net access just like a physical machine.

Usando o virsh para criar ponte

De acordo com a Documentação do RHEL , você pode usar virsh para criar uma ponte, por exemplo br0 bridge com base na interface eth0 :

# virsh iface-bridge eth0 br0

Se você quiser / precisar remover a ponte, faça

# virsh iface-unbridge br0

Criando initscripts de rede

Se isso não funcionar da maneira que você precisa, crie / edite os scripts init em /etc/sysconfig/network-scripts/ manualmente. Esta seção é diretamente da página de documentação do libvirt :

No diretório / etc / sysconfig / network-scripts, é necessário criar 2 arquivos de configuração. O primeiro (ifcfg-eth0) define sua interface de rede física e diz que fará parte de uma ponte:

# cat > ifcfg-eth0 <<EOF
DEVICE=eth0
HWADDR=00:16:76:D6:C9:45
ONBOOT=yes
BRIDGE=br0
NM_CONTROLLED=no
EOF

Obviamente, altere o HWADDR para corresponder ao endereço da sua NIC real. Você também pode configurar a MTU do dispositivo usando, por exemplo, MTU = 9000.

O segundo arquivo de configuração (ifcfg-br0) define o dispositivo de ponte:

# cat > ifcfg-br0 <<EOF
DEVICE=br0
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=yes
DELAY=0
NM_CONTROLLED=no
EOF

AVISO: a linha TYPE = Bridge é sensível a maiúsculas e minúsculas - deve ter maiúsculas 'B' e minúsculas 'cume'

Após alterar esta rede de reinicialização (ou simplesmente reinicializar)

 # service network restart

O passo final é desabilitar o netfilter na bridge:

 # 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

Recomenda-se fazer isso por motivos de desempenho e segurança. Veja o bug do Fedora # 512206. Alternativamente, você pode configurar o iptables para permitir que todo o tráfego seja encaminhado pela ponte:

# 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

NetworManager e Bridging

Embora não tenha certeza se isso ainda é verdade, como há desenvolvimento ativo, NetworkManager não oferece suporte a ponte. Portanto, pode ser necessário desativá-lo e usar o network service:

# chkconfig NetworkManager off
# chkconfig network on
# service NetworkManager stop
# service network start

Assim, uma vez que você criar a interface "bridge", escravize a NIC física conforme descrito na documentação, então você precisa editar a configuração do Virtual Guest para escravizar sua NIC à bridge em o host também.

...
<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>

Uma vez feito isso, o roteador, ao qual a NIC física do seu host está conectada, atribuirá endereços via DHCP às interfaces em ponte - para o host e / ou para o convidado.

Perguntas e respostas ; A no Serverfault que pode ser útil para configurar a configuração de convidado. Essencialmente, usando virsh (assumindo que você está trabalhando com libvirt ), faça

virsh net-list
virsh net-edit $NETWORKNAME

Procure a seção dhcp e edite algo assim

<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>

Observação: pode haver um arquivo "hosts" em /var/lib/libvirt/dnsmasq/ com os mapeamentos existentes.

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

    
por 25.03.2017 / 03:19