Tenha um host Ubuntu Server dedicado com uma única interface de rede, mas com dois endereços IP:
root@server:~# cat /etc/netplan/50-cloud-init.yaml
network:
version: 2
ethernets:
eno3:
dhcp4: true
match:
macaddress: 00:00:00:00:00:00
set-name: eno3
addresses: [IP-A/24, IP-B/32]
Quando IP-A
é o endereço IP nativo atribuído ao servidor e IP-B
é um endereço IP adicional que contratei. Ao configurar usando netplan apply
tudo funciona muito bem, o servidor WEB sai pelo endereço IP IP-A
e pelo curl consigo ver como é possível acessar a internet de IP-B
:
wget -qO- http://checkip.dyndns.com/ --bind-address IP-A
... Current IP Address: IP-A
wget -qO- http://checkip.dyndns.com/ --bind-address IP-B
... Current IP Address: IP-B
O problema é que também tenho uma máquina virtual com kvm
( virsh
), como posso fazer a máquina virtual sair para a internet usando IP-B
e não IP-A
como faz por padrão?
Minhas interfaces de rede:
root@yhojann:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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
2: eno3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 11:11:11:11:11:11 brd ff:ff:ff:ff:ff:ff
inet IP-A/24 brd x.x.x.255 scope global dynamic eno3
valid_lft 63801sec preferred_lft 63801sec
inet IP-B/32 scope global eno3
valid_lft forever preferred_lft forever
inet6 ffff::fff:ffff:ffff:ffff/64 scope link
valid_lft forever preferred_lft forever
3: eno4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 22:22:22:22:22:22 brd ff:ff:ff:ff:ff:ff
17: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 33:33:33:33:33:33 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
18: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
link/ether 44:44:44:44:44:44 brd ff:ff:ff:ff:ff:ff
20: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master virbr0 state UNKNOWN group default qlen 1000
link/ether 44:44:44:44:44:44 brd ff:ff:ff:ff:ff:ff
Eu tentei descobrir se é possível configurar a rede kvm usandovirsh net-edit default
mas não encontrei nenhuma referência que permita fazer uso de um endereço ip de saída específico do host principal sem ter que usar uma nova interface virtual e redirecionar pacotes com iptables, pois isso causa uma grande latência na conectividade.
Existe uma maneira mais "nativa" de dizer ao kvm para usar o IP específico?
Os endereços IP e endereços mac mostrados são apenas para referência. Eu utilizo o ufw para gerenciar as conexões.
Para atribuir IP-B à máquina virtual:
Crie uma interface de ponte.
Mova-se
eno3
para a ponte.Observe que isso provavelmente resultará em perda de conectividade de rede, portanto, certifique-se de estar executando essas alterações em algum tipo de conexão fora de banda (como um console serial ou console gráfico).
Exatamente como executar essas etapas de maneira persistente varia de distribuição para distribuição; o que quer que você esteja usando, tenho certeza de que encontrará a documentação apropriada.
Atribua IP-A ao dispositivo de ponte.
Anexe sua máquina virtual à ponte.
Se você estiver criando sua vm usando
virt-install
, isso pode se parecer com:Se você estiver criando o domínio XML manualmente, isso significa uma
<interface>
estrofe como esta:Atribua
eth0
(ou qualquer que seja a interface chamada) dentro da máquina virtual IP-BIsso lhe dá:
Tanto seu host quanto sua máquina virtual estão conectados à mesma rede.