Posso acessar o host via 213.xxx.xxx.1
atribuído, br0:1
mas 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á bond0
está 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_netfilter
o 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":
- 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 - Altere o gateway da VM para o IP dos hosts na sub-rede da VM: 213.xxx.xxx.1
- Corrija sua configuração iptable quebrada.
iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
Parece bem. Eventualmente mude para algo linkiptables -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/27
e 213.xxx.xxx.176/28
.
Há host de gateway 213.xxx.xxx.177
na 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 br0
interface.
Se você criar uma VM na sub-rede, 213.xxx.xxx.176/28
deverá atribuir 213.xxx.xxx.177
a 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.