como faço para construir uma ponte entre duas máquinas virtuais?

3

Eu usei virt-install para criar dois convidados da máquina virtual do CentOS 7 em um computador host do CentOS 7. Uma máquina virtual é chamada de webvm e hospeda sites da Web em uma rede privada. A outra máquina virtual é chamada datavm e tem o único propósito de ser o servidor de banco de dados virtual para os aplicativos da Web hospedados em webvm . Como posso configurar a rede para que datavm SOMENTE permita conexões de dados de webvm e para que essas conexões de dados ocorram na caixa do servidor físico? Eu quero ter certeza de que as transações do banco de dados entre webvm e datavm não percorrem a rede local.

Observe que a rede em ponte já vincula o sistema operacional host a cada sistema operacional convidado '.

O ip da rede local de webvm é 10.0.0.6 e o ip da rede de datavm é 10.0.0.5 . A string de conexão de um aplicativo da Web típico hospedado em webvm é:

jdbc:mysql://localhost:3306/somedb?autoReconnect=true

Você pode ver que localhost se refere a webvm . Aparentemente, precisamos configurar uma nova rede de segunda ponte com endereços 10.1.1.x, para que a cadeia de conexão se torne jdbc:mysql://10.1.1.1:3306/somedb?autoReconnect=true .

Qualquer código de rede de ponte novo que adicionarmos não deve entrar em conflito com a rede de ponte pré-existente.

Então, como configuro uma conexão de dados exclusiva e um-para-um entre datavm e webvm ?

TRABALHOS ACTUALIZADOS EM PROGRESSO:

@derobert sugeriu os seguintes passos:

1.) Add a second bridge to the host. 
2.) Add a second network interface to webvm, connected to the new host bridge. 
3.) Add a second network interface to datavm, connected to the new host bridge.
4.) Configure the new network interfaces inside each guest.  

Para esse fim, obtive uma linha de base executando o seguinte no HOST :

[root@localhost ~]# nmcli con show
NAME               UUID                                  TYPE            DEVICE 
bridge-slave-eno1  c36fd051-cacc-4e91-944f-a98f4fee26ff  802-3-ethernet  eno1   
bridge-br0         d472bc86-0f75-4dd5-bfee-5b8208b3fed2  bridge          br0    
System eno1        abf4c85b-57cc-4484-4fa9-b4a71689c359  802-3-ethernet  --     
vnet1              ea985e89-94fb-403c-af33-7daefb378ca5  generic         vnet1  
vnet0              06deb20d-b0b7-4233-8abc-cbb285165082  generic         vnet0  
[root@localhost ~]# 

Em seguida, corri o seguinte em webvm :

[root@localhost ~]# nmcli con show
NAME  UUID                                  TYPE            DEVICE 
eth0  71bf7ff1-7574-4364-8c83-5878ed30d028  802-3-ethernet  eth0   
[root@localhost ~]# 

Em seguida, corri o seguinte em datavm :

[root@localhost ~]# nmcli con show
NAME  UUID                                  TYPE            DEVICE 
eth0  d976f7ca-ab7f-4fd0-ab2b-6213815bd1a1  802-3-ethernet  eth0   
[root@localhost ~]# 

Eu então implementei os seguintes comandos no HOST:

[root@localhost ~]# nmcli con add type bridge ifname br1
Connection 'bridge-br1' (8b9fd6d9-bcb4-4e1c-85ab-55905d08667e) successfully added.
[root@localhost ~]# nmcli con show
NAME               UUID                                  TYPE            DEVICE 
bridge-slave-eno1  c36fd051-cacc-4e91-944f-a98f4fee26ff  802-3-ethernet  eno1   
bridge-br0         d472bc86-0f75-4dd5-bfee-5b8208b3fed2  bridge          br0    
System eno1        abf4c85b-57cc-4484-4fa9-b4a71689c359  802-3-ethernet  --     
bridge-br1         8b9fd6d9-bcb4-4e1c-85ab-55905d08667e  bridge          br1    
vnet1              ea985e89-94fb-403c-af33-7daefb378ca5  generic         vnet1  
vnet0              06deb20d-b0b7-4233-8abc-cbb285165082  generic         vnet0  
[root@localhost ~]# virsh
Welcome to virsh, the virtualization interactive terminal.
virsh # list
 Id    Name                           State
----------------------------------------------------
 2     public4-centos7                running
 4     data-centos7                   running

virsh # attach-interface data-centos7 bridge br1
Interface attached successfully

virsh # attach-interface public4-centos7 bridge br1
Interface attached successfully

virsh # 

Em seguida, efetuei login em cada uma das máquinas virtuais separadamente e as novas conexões com a rede de ponte foram mostradas com o nome Wired connection 1 , da seguinte forma:

Na web vm:

[root@localhost ~]# nmcli con show
NAME                UUID                                  TYPE            DEVICE 
Wired connection 1  44f1f791-0d86-4587-8a2d-48dfa217ee99  802-3-ethernet  ens7   
eth0                71bf7ff1-7574-4364-8c83-5878ed30d028  802-3-ethernet  eth0   
[root@localhost ~]# nmcli con modify 'Wired connection 1' ipv4.addresses "10.1.1.2"

E nos dados vm:

[root@localhost ~]# nmcli con show
NAME                UUID                                  TYPE            DEVICE 
Wired connection 1  448101d7-1f8f-4b78-ad90-7efd5be23b08  802-3-ethernet  ens7   
eth0                d976f7ca-ab7f-4fd0-ab2b-6213815bd1a1  802-3-ethernet  eth0   
[root@localhost ~]# nmcli con modify 'Wired connection 1' ipv4.addresses "10.1.1.1"  

Mas, em seguida, ping 10.1.1.1 do web vm falhou (Destination Host Unreachable) e ping 10.1.1.2 do data vm também falharam (Destination Host Unreachable).

Em web vm , o conteúdo de vi /etc/sysconfig/network-scripts/ifcfg-Wired_connection_1 é:

HWADDR=52:54:00:8F:3B:14
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME="Wired connection 1"
UUID=44f1f791-0d86-4587-8a2d-48dfa217ee99
ONBOOT=yes
IPADDR=10.1.1.2
PREFIX=16
PEERDNS=yes
PEERROUTES=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes

Em data_vm , o conteúdo de vi /etc/sysconfig/network-scripts/ifcfg-Wired_connection_1 é:

HWADDR=52:54:00:1F:FE:27
TYPE=Ethernet
BOOTPROTO=dhcp
IPADDR=10.1.1.1
PREFIX=32
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME="Wired connection 1"
UUID=448101d7-1f8f-4b78-ad90-7efd5be23b08
ONBOOT=yes

O que mais eu digito para concluir o que o @derobert sugeriu? Lembre-se de que todo o tráfego de dados precisa ficar INTERNO DA CAIXA FÍSICA, para que a nova ponte tenha que incluir novos endereços IP para datavm e webvm para usar SOMENTE na nova ponte.

Conforme os comentários do @ garethTheRed, digitei ip route no web vm e obtive o seguinte:

[root@localhost network-scripts]# ip route
default via 10.0.0.1 dev eth0  proto static  metric 100 
10.0.0.0/24 dev eth0  proto kernel  scope link  src 10.0.0.6  metric 100 
10.1.1.0/30 dev ens7  proto kernel  scope link  src 10.1.1.2 
10.1.1.2/31 dev ens7  proto kernel  scope link  src 10.1.1.2  metric 100 
169.254.0.0/16 dev ens7  scope link  metric 1003 
[root@localhost network-scripts]# 

Em seguida, digitei ip route em data vm e obtive o seguinte:

[root@localhost network-scripts]# ip route
default via 10.0.0.1 dev eth0  proto static  metric 100 
10.0.0.0/24 dev eth0  proto kernel  scope link  src 10.0.0.5  metric 100 
10.1.1.0/31 dev ens7  proto kernel  scope link  src 10.1.1.1  metric 100 
10.1.1.0/30 dev ens7  proto kernel  scope link  src 10.1.1.1 
169.254.0.0/16 dev ens7  scope link  metric 1003 
[root@localhost network-scripts]# 

Remover o arquivo ifcfg-* das 6 linhas da resposta causou uma falha quando tentei systemctl restart network . Eu acho que pode ser devido aos argumentos hardware ou uuid , mas isso é apenas um palpite. Quando eu restaurei os arquivos ifcfg-* para incluir as edições @ garethTheRed além dos argumentos extras mostrados acima, systemctl restart network foi executado sem erro, mas os pings falharam.

    
por CodeMed 14.10.2015 / 02:28

3 respostas

1

Duas coisas podem ser a causa disso:

Uma causa possível é a maneira como você construiu a rede privada (usando a ponte no host). Seria muito mais seguro e fácil configurar isso usando virt-manager . Se o seu host for apenas CLI, instale-o em um desktop / laptop remoto e conecte-se por meio do SSH ao host.

Uma vez instalado, conecte-se ao hipervisor, clique com o botão direito do mouse no nome da lista e escolha 'Detalhes'. Na aba 'Virtual Networks' você pode adicionar uma nova rede clicando no botão '+' (inferior, esquerda). O assistente o guiará pelo processo, mas desmarque as opções de endereços IPv4 e IPv6 (você não precisa deles, pois é um link ponto-a-ponto) e escolha o botão de opção "Rede privada". . Continue com o assistente e saia.

Se você é uma pessoa de linha de comando obstinada, então o que foi mencionado acima pode ser executado usando a interface de linha de comando virsh net-define . Crie um arquivo XML como o exemplo abaixo ( virbr2 é um nome de ponte não utilizado - use brctl show para listar o seu):

<network>
    <name>private</name>
    <bridge name="virbr2" />
</network>

Em seguida, importe-o com:

# virsh net-define <XML filename>

Uma vez que o acima é feito, você pode editar cada VM para usar esta nova rede privada (você terá que reiniciar as VMs para que isso tenha efeito). Depois de editar a configuração da VM, você estará pronto para efetuar login em cada um deles e configurar o sistema operacional com os detalhes relevantes do IP (do seu OP). Mas, leia primeiro ...

Em segundo lugar, você não tem rotas entre as duas VMs que apontam para as novas interfaces. Outro Isso ocorre porque você configurou o endereço IP com um prefixo /32 .

Ao editar a conexão, use o formato a.b.c.d/p para definir o prefixo; caso contrário, sem um prefixo, o padrão será /32 :

# nmcli con edit "Wired connection 1"
nmcli> set ipv4.addresses 10.1.1.1/30
nmcli> save
nmcli> quit
# systemctl restart network

Configurar a rede manualmente também funciona:

NM_CONTROLLED=no
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
IPADDR=10.1.1.1
PREFIX=30

Execute um procedimento semelhante na outra VM ( 10.1.1.2/30 ) e isso deve funcionar.

Observação: você pode usar /31 , mas somente se tiver alterado os endereços IP para 10.1.1.0 e 10.1.1.1 . Isso pode causar problemas, pois o primeiro endereço no intervalo é geralmente reservado para o endereço de rede e o último para a transmissão. Como você só tem dois endereços com /31 , você não tem mais nenhum para os hosts. Melhor ficar com /30 , o que lhe dá 4 endereços - dois reservados e dois para seus anfitriões.

    
por 15.10.2015 / 12:44
0

Você sabe que, se você conectá-los a outra ponte, terá que fornecer a eles outro endereço IP em uma sub-rede diferente, certo? Provavelmente seria melhor configurar apenas uma regra de firewall para aceitar apenas o tráfego da única máquina e manter a ponte padrão.

Caso contrário, você deseja usar virt-manager para definir as configurações de rede vm e configurá-lo para usar uma interface especificada em vez da ponte gerenciada automática padrão e editar manualmente / etc / network / interfaces para criar uma interface de ponte dedicada para este propósito.

Aqui está minha ponte configurada manualmente para o Xen:

auto xenbr0
iface xenbr0 inet static
        bridge_ports em2
        address 10.1.1.8
        netmask 255.255.255.0
        network 10.1.1.0
        broadcast 10.1.1.255
        gateway 10.1.1.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 8.8.8.8
    
por 14.10.2015 / 20:34
-2

Você pode fazer isso de várias maneiras, mas parece que você deseja uma segunda interface de ponte com uma segunda rede apenas para o fluxo de dados entre servidores.

Pense nisso como se cada servidor tivesse duas placas de rede, uma para acesso geral e outra para apenas entre elas. Use um intervalo de endereços IP diferente para essa rede e eles devem poder falar uns com os outros sem que nada saia da caixa.

Se você não conseguir configurar uma nova ponte e quiser algo mais simples, tente adicionar apenas uma subinterface às NICs existentes que usam um intervalo de endereços IP diferente. Se fosse apenas o tráfego da LAN, é o que eu faria.

Boa sorte!

    
por 14.10.2015 / 07:13