Acesso à VM Guest via IP público adicional

2

Eu tenho um servidor dedicado do CentOS (Hetzner):
IP: aa.bb.cc. 16
Gateway: aa.bb.cc.1
Máscara de rede: 255.255.255.255

e IP adicional (convidado VM (libvirt) com o Debian instalado):
IP: aa.bb.cc. 61
Gateway: aa.bb.cc.1
Máscara de rede: 255.255.255.192

Eu configurei uma configuração roteada com a documentação do Hetzner ( link ).

Configuração do host:
cat /etc/sysctl.conf

net.ipv4.conf.all.rp_filter=1  
net.ipv4.icmp_echo_ignore_broadcasts=1  
net.ipv4.ip_forward=1  
net.ipv6.conf.all.forwarding=1  
net.ipv4.conf.default.proxy_arp=1  
net.ipv4.conf.all.send_redirects=0  
net.ipv4.conf.eth0.send_redirects=0  
net.ipv4.conf.br0.send_redirects=0  
net.ipv4.conf.default.send_redirects=0  
net.bridge.bridge-nf-call-ip6tables = 0  
net.bridge.bridge-nf-call-iptables = 0  
net.bridge.bridge-nf-call-arptables = 0  

cat / etc / sysconfig / scripts de rede / ifcfg-eth0

DEVICE=eth0
ONBOOT=yes
HWADDR=XX:XX:XX:XX:XX:XX
BOOTPROTO=none
IPADDR=aa.bb.cc.16
NETMASK=255.255.255.255
SCOPE="peer aa.bb.cc.1"
IPV6INIT=yes
IPV6ADDR=2a01:4f8:yyy:yyyy::2/128
IPV6_DEFAULTGW=fe80::1
IPV6_DEFAULTDEV=eth0

cat / etc / sysconfig / scripts de rede / ifcfg-br0

DEVICE=br0
ONBOOT=yes
TYPE="Bridge"
BOOTPROTO=static
IPADDR=aa.bb.cc.16
NETMASK=255.255.255.255
IPV6INIT=yes
IPV6ADDR=2a01:4f8:yyy:yyyy::2/64
STP=off
DELAY=0

cat / etc / sysconfig / scripts de rede / route-br0

ADDRESS0=aa.bb.cc.61
NETMASK0=255.255.255.255

Configuração do convidado:
cat / etc / network / interfaces

auto lo
iface lo inet loopback

auto eth0
    iface eth0 inet static
    address aa.bb.cc.61
    netmask 255.255.255.255
    pointopoint aa.bb.cc.16
    gateway aa.bb.cc.16
    dns-nameservers 212.133.98.98 212.133.99.99 212.133.100.100

iface eth0 inet6 static
    address 2a01:4f8:yyy:yyyy::4
    netmask 64
    address 2a01:4f8:yyy:yyyy::2

Para acesso à Internet da VM convidada à Internet, adicionei uma regra:

iptables -t nat -A POSTROUTING -o eth0 -s aa.bb.cc.61 -j SNAT --to-source aa.bb.cc.16

Pergunta: É possível acessar da Internet para a VM guest via IP guest aa.bb.cc. 61 no modo roteado? Quando eu ping de fora (internet) para aa.bb.cc 61 eu recebo 'Solicitação expirada'. Mas aa.bb.cc.16 (host) pingando ok. Que regra devo adicionar?

Obrigado.

    
por Alexander Dyuzhev 08.10.2016 / 15:22

2 respostas

0

Aqui está a solução de trabalho:

cat / etc / sysconfig / scripts de rede / ifcfg-eth0

DEVICE=eth0
ONBOOT=yes
HWADDR=XX:XX:XX:XX:XX:XX
BOOTPROTO=none
IPADDR=aa.bb.cc.16
NETMASK=255.255.255.255
SCOPE="peer aa.bb.cc.1"
BRIDGE=br0

cat / etc / sysconfig / scripts de rede / ifcfg-br0

DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=aa.bb.cc.16
NETMASK=255.255.255.255
SCOPE="peer  aa.bb.cc.1"
ONBOOT=yes
DELAY=0

mv / etc / sysconfig / scripts de rede / route-eth0 / etc / sysconfig / scripts de rede / route-br0 cat cat / etc / sysconfig / scripts de rede / route-br0

### Hetzner Online GmbH - installimage
# routing for eth0
ADDRESS0=0.0.0.0
NETMASK0=0.0.0.0
GATEWAY0=aa.bb.cc.1

Configuração do convidado:
cat / etc / network / interfaces

auto lo
iface lo inet loopback

auto eth0
    iface eth0 inet static
    address aa.bb.cc.61
    netmask 255.255.255.255
    pointopoint aa.bb.cc.16
    gateway aa.bb.cc.16
    dns-nameservers 212.133.98.98 212.133.99.99 212.133.100.100
    hwaddress ether 00:01:02:ab:cd:de # MAC Address for additional IP
    
por 12.10.2016 / 18:50
0

Primeiro, algumas coisas precisam ficar claras.

O guia que você está usando refere-se a um "modo de roteador" e "modo de ponte".

O modo de roteador descrito é quase totalmente inútil. Isso envolve a criação de uma ponte "somente host" vazia, conectando sua VM a isso e, em seguida, roteando o tráfego de nível IP dessa ponte para sua interface de saída. Isso ignora o fato de que o libvirt pode criar sua própria interface virtual NAT (com roteamento opcional, DHCP e DNS) e conectar as interfaces de VM a isso. Na verdade, libvirt tem essa rede criada e ativada por padrão. É referido como a rede "padrão".

No seu caso, você tem duas sub-redes (que estou assumindo que estão em domínios separados da camada 2 - como seria o caso em quase todas as situações). Um endereço será usado para acessar seu hipervisor "aa.bb.cc.16 / 32" (Esta é uma sub-rede inválida - mais sobre isso depois) Este endereço pode ser colocado diretamente em uma interface.

E então você tem um segundo IP em outra sub-rede (aa.bb.cc.61 / 26). Esse endereço precisa ir na interface da VM no convidado. Isso pode ser feito diretamente com uma ponte e, embora o guia que você postou originalmente ofereça soluções ruins para o "modo roteado", uma configuração proposta para uma ponte diretamente usada é, na verdade, a maneira correta de fazer as coisas. No entanto, também oferece uma configuração totalmente incorreta.

A configuração de rede a seguir funcionará para a dita ponte, desde que você atualize os valores para refletir seu cenário:

# /etc/sysconfig/network-scripts/ifcfg-eth0
# device: eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
BRIDGE=br0

# /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE="Bridge"
BOOTPROTO=static
ONBOOT=yes

Depois disso, use essa ponte como um dispositivo para conectar sua NIC de VM a. Se necessário, você pode colocar um endereço IP na própria ponte, permitindo a comunicação entre o host e o convidado. No entanto, isso seria na sua sub-rede que você está processando para acesso público. Se você precisar hospedar a comunicação de convidado, eu recomendaria um domínio privado de camada 2 por meio da interface NAT "padrão" ou por meio de uma ponte vazia com um espaço IP privado no host e no convidado (o que criaria duas NICs totais a VM).

Como uma nota secundária, a máscara de rede que você publicou para o seu hypervisor IP (255.255.255.255) é de 32 bits. Isso não permitirá um único endereço em sua rede, e estou assumindo que é apenas um erro de digitação. Se não for um erro de digitação, você precisará usar um espaço de endereço que realmente permita um host, mesmo que seja apenas uma máscara de rede de 31 bits.

Isso abrange as coisas em um sentido geral. Espero que isso seja informação suficiente para você tomar uma decisão e configurar as coisas apropriadamente.

    
por 08.10.2016 / 18:26