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.