Ponte KVM sobre ligação com múltiplas sub-redes

Ponte KVM sobre ligação com múltiplas sub-redes

Posso acessar o host via 213.xxx.xxx.1atribuído, br0:1mas a VM com 213.xxx.xxx.2(interface de ponte ativada br0:1) não funciona.

Tenho que criar outra interface bridge para a segunda sub-rede, mas já bond0está conectada br0?!

Basicamente, como posso usar a segunda sub-rede para VMs neste cenário?

Sub-redes:

213.xxx.xxx.176/28
213.xxx.xxx.0/27 routed via 213.xxx.xx.180

Configurar:

em[1-2]

# cat /etc/sysconfig/network-scripts/ifcfg-em[1-2]
DEVICE="em[1-2]"
NAME="bond0-slave[1-2]"
BOOTPROTO="none"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
USERCTL=no
IPV6INIT=no
PEERDNS=no
MASTER=bond0
SLAVE=yes

vínculo0

# cat /etc/sysconfig/network-scripts/ifcfg-bond0 
DEVICE="bond0"
NAME="bond0"
BOOTPROTO="none"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Bond"
USERCTL="no"
IPV6INIT="no"
PEERDNS="no"
BONDING_OPTS="mode=active-backup miimon=100"
BRIDGE=br0

br0

# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
NAME="br0"
BOOTPROTO="none"
IPADDR="213.xxx.xxx.180"
GATEWAY="213.xxx.xxx.177"
NETMASK="255.255.255.240"
BROADCAST="213.xxx.xxx.191"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Bridge"
USERCTL="no"
IPV6INIT="no"
PEERDNS="no"

irmão0:1

# cat /etc/sysconfig/network-scripts/ifcfg-br0:1 
DEVICE="br0:1"
NAME="br0:1"
BOOTPROTO="none"
IPADDR="213.xxx.xxx.1"
NETMASK="255.255.255.224"
BROADCAST="213.xxx.xxx.31"
NM_CONTROLLED="yes"
#ONBOOT="yes"
TYPE="Bridge"
USERCTL="no"
IPV6INIT="no"
PEERDNS="no"
ONPARENT="yes"

Atualização quarta-feira, 18 de janeiro, 16:25:17 GMT 2017:

<interface type='bridge'>
      <mac address='52:54:00:4c:4f:27'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

Atualização terça-feira, 24 de janeiro, 11:44:21 GMT de 2017:

Configuração de rede VM:

# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="213.xxx.xxx.2"
PREFIX="27"
GATEWAY="213.xxx.xxx.177" <-- not sure if this should be 213.xxx.xxx.180 instead?!

IPTables no host:

# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:68

# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
RETURN     all  --  192.168.122.0/24     224.0.0.0/24        
RETURN     all  --  192.168.122.0/24     255.255.255.255     
MASQUERADE  tcp  --  192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
MASQUERADE  udp  --  192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
MASQUERADE  all  --  192.168.122.0/24    !192.168.122.0/24

Funciona quando eu defino um gateway padrão para 213.xxx.xxx.1 na VM (IP de br0:1 no host) - não sei por que não posso simplesmente usar o mesmo gateway padrão como host (213.xxx.xxx .177).

Eu também tive que liberar o IPTables, então preciso descobrir quais regras são necessárias.

Também estou recebendo redirecionamento ao executar ping da VM, então não tenho certeza se esta configuração é ideal:

# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 213.xxx.xxx.1: icmp_seq=1 Redirect Host(New nexthop: 213.xxx.xxx.177)
From 213.xxx.xxx.1 icmp_seq=1 Redirect Host(New nexthop: 213.xxx.xxx.177)
64 bytes from 8.8.8.8: icmp_seq=1 ttl=47 time=7.26 ms
...

Atualização terça-feira, 24 de janeiro, 14:49:43 GMT de 2017:

Não sei por que o IPTables realmente filtra os pacotes que atravessam a ponte, mesmo que br_netfiltero módulo não esteja carregado

# lsmod | grep "br_netfilter"; echo $?
1
# test -d /proc/sys/net/bridge; echo $?
1

Esta regra também não ajudou:

# iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT

Responder1

Solução que "responde à pergunta":

  1. Certifique-se de que o encaminhamento de IP esteja habilitado no host, caso cat /proc/sys/net/ipv4/ip_forward não seja 1, veja neste site como alterá-lo
  2. Altere o gateway da VM para o IP dos hosts na sub-rede da VM: 213.xxx.xxx.1
  3. Corrija sua configuração iptable quebrada. iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPTParece bem. Eventualmente mude para algo link iptables -I FORWARD -s 213.xxx.xxx.0/27 -j ACCEPT(isto significa: aceitar todo o tráfego da rede vms para outra rede)

A ideia desta solução é usar seu host como gateway para a rede VM. Obviamente se você já possui outro gateway na rede 213.xx0 ( 213.xxx.xx.180 ) você pode utilizá-lo diretamente da sua vms.

A configuração sugerida do iptables permitirá o tráfego das VMs para o exterior. Se você quiser permitir conexões externas às VMs, você deve colocar uma regra parecida comiptables -I FORWARD -d 213.xxx.xxx.0/27 -j ACCEPT

Solução recomendada: Tenha em mente que tudo isso provavelmente é apenas uma bagunça devido à forma como a pergunta é feita. No mundo real, se você tiver um roteador/firewall que gerencia suas duas sub-redes, você deve seguir o caminho mais fácil: - o roteador/firewall terá um endereço IP em cada sub-rede. Será gateway para todos os hosts nas sub-redes - atribua uma vlan para cada sub-rede - no seu host, você terá 2 interfaces e para pontes - suas vms serão interligadas na "sub-rede vms" e usarão o firewall como gateway

Dessa forma, você não terá configurações malucas de iptables/alias/forwarding. Você terá alguns hosts em uma sub-rede, e outros na outra sub-rede, e o roteamento/acls/nats configurado em seu firewall. Você não deve nem atribuir um endereço IP na "rede VM" ao seu host.

A fusão de duas redes no mesmo domínio de transmissão é uma fonte de problemas, e a configuração de vários endereços IP em um host deve ser evitada se você não tiver muita autoconfiança na configuração da rede.

Responder2

Da Wikipédia:

Um gateway padrão em redes de computadores é o nó que supostamente sabe como encaminhar pacotes para outras redes.

Isso significa que o nó do gateway deve ser um nó na rede ou sub-rede. Você usa duas sub-redes em uma interface br0 213.xxx.xxx.0/27e 213.xxx.xxx.176/28.

Há host de gateway 213.xxx.xxx.177na rede 213.xxx.xxx.176/28. E o seu servidor host obtém acesso à Internet através deste gateway. Acho que o host do gateway 213.xxx.xxx.177é um roteador e este roteador não é membro (nó) de subnet 213.xxx.xxx.0/27. Mas sabe que a sub-rede 213.xxx.xxx.0/27é acessível via nó 213.xxx.xxx.180(seu servidor host).

Sua VM possui endereço de gateway errado. Se a VM tiver endereço IP 213.xxx.xxx.2/27, a VM deverá ter endereço de gateway da mesma sub-rede 213.xxx.xxx.0/27. É por isso que a VM deve ter endereço de gateway 213.xxx.xxx.1, que seu servidor host tem como endereço IP secundário na br0interface.

Se você criar uma VM na sub-rede, 213.xxx.xxx.176/28deverá atribuir 213.xxx.xxx.177a ela o mesmo IP do gateway que no seu servidor host. Certifique-se de que este IP não seja usado em algum lugar.

Além disso:

Limpe todas as regras do iptables conforme descrito emaqui

Antes de fazer isso, o serviço iptables deve ser iniciado. Reinicie o serviço iptables após limpar para armazenar as regras limpas no disco.

informação relacionada