Posso acessar o host por meio 213.xxx.xxx.1
de 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 aí bond0
já está conectada com 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
bond0
# 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"
0: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 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 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 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, portanto, 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 2017:
Não sei por que o IPTables realmente filtra os pacotes que atravessam a ponte, mesmo que o br_netfilter
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
Da Wikipédia:
Isso significa que o nó de gateway deve ser um nó na rede ou sub-rede. Você usa duas sub-redes em uma interface
br0
213.xxx.xxx.0/27
e213.xxx.xxx.176/28
.Há um host de gateway
213.xxx.xxx.177
na rede213.xxx.xxx.176/28
. E seu servidor host obtém acesso à Internet por meio desse gateway. Acho que o host do gateway213.xxx.xxx.177
é um roteador e esse roteador não é membro (nó) da sub-rede213.xxx.xxx.0/27
. Mas sabe que a sub -rede213.xxx.xxx.0/27
é acessível via nó213.xxx.xxx.180
(seu servidor host).Sua VM tem endereço de gateway errado. Se a VM tiver um endereço IP , a
213.xxx.xxx.2/27
VM deve ter um endereço de gateway da mesma sub-rede213.xxx.xxx.0/27
. É por isso que a VM deve ter um endereço213.xxx.xxx.1
de gateway, que seu servidor host tenha como endereço IP secundário nabr0
interface.Se você criar uma VM na sub
213.xxx.xxx.176/28
-rede, deverá atribuir o mesmo ip de gateway213.xxx.xxx.177
a ela como em 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 aqui
Antes de fazer isso, o serviço iptables deve ser iniciado. Reinicie o serviço iptables após a limpeza para armazenar as regras limpas no disco.
Solução que "responde à pergunta":
cat /proc/sys/net/ipv4/ip_forward
não for 1, veja neste site como alterá-loiptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
Parece bem. Eventualmente, altere-o para algo linkiptables -I FORWARD -s 213.xxx.xxx.0/27 -j ACCEPT
(isso significa: aceite todo o tráfego da rede vms para outra rede)A ideia dessa solução é usar seu host como gateway para a rede vm. Obviamente, se você já tiver outro gateway na rede 213.xx0 ( 213.xxx.xx.180 ), poderá usá-lo diretamente do seu vms.
A configuração sugerida do iptables permitirá o tráfego das VMs para o exterior. Se você deseja permitir conexões de fora para as VMs, deve colocar uma regra parecida com
iptables -I FORWARD -d 213.xxx.xxx.0/27 -j ACCEPT
Solução recomendada: lembre-se de que tudo isso provavelmente é apenas uma bagunça por causa da maneira como a pergunta é feita. No mundo real, se você tiver um roteador/firewall que gerencie 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á o gateway para todos os hosts nas sub-redes - atribua uma vlan a cada sub-rede - em seu host, você terá 2 interfaces e para pontes - sua vms será conectada na "sub-rede vms" e usará o firewall como gateway
Dessa forma, você não terá configurações malucas de iptables / alias / encaminhamento. Você terá alguns hosts em uma sub-rede, e outros na outra sub-rede, e o roteamento/acls/nats configurado em seu firewall. Você nem deve atribuir um endereço IP na "rede vm" ao seu host.
A fusão de duas redes no mesmo domínio de broadcast é uma fonte de problemas, e a configuração de vários endereços IP em um host deve ser evitada se você não for muito autoconfiante na configuração da rede.