linux vlan routing

6

Eu tenho esta topologia de rede:

network 192.168.100.0/24 vlan 100
network 192.168.200.0/24 vlan 200

um servidor ubuntu (2 vlans em 1 ether) eth0.100 (ip: 192.168.100.10/24) eth0.200 (ip: 192.168.200.20/24 def gw 192.168.200.254)

A situação é a próxima:

  1. eth0.200 está em alta
  2. eth0.100 nos para baixo.
  3. A conexão
  4. da sub-rede 192.168.100.0/24 está ok para 192.168.200.20.

Quando eu faço eth0.100 up:

  • não pode acessar 192.168.200.20 da rede 192.168.100.0/24. (resposta incorreta da interface quando o pacote chega a 192.168.200.20 de 192.168.100.0/24 é respondido de volta por 192.168.100.10)

como consertar isso?

tentou com rp_filter = 0 / rp_filter = 1

#cat /etc/network/interfaces
iface eth0.200 inet static
    address 192.168.200.20
    netmask 255.255.255.0
    vlan-raw-device eth0
    gateway 192.168.200.254
    post-up ip r a 192.168.200.6 via 192.168.200.250 #one ip behind wifi

iface eth0.100 inet static
    address 192.168.100.10
    netmask 255.255.255.0
    vlan-raw-device eth0

Olhando para trabalhar com:

iptables -A PREROUTING -t mangle -i eth0.100 -j MARK --set-mark 100
iptables -A PREROUTING -t mangle -i eth0.200 -j MARK --set-mark 200
making some route tables like t100 and t200
and then ading rule like:
ip rule add from all fwmark 100 table t100
ip rule add from all fwmark 200 table t200

FOI RP_FILTER

net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.eth0/100.rp_filter = 0
net.ipv4.conf.eth0/200.rp_filter = 0
    
por MealstroM 15.03.2012 / 09:20

3 respostas

4

Adicionando meu comentário como resposta para que possa ser marcado.

Problemas como este são causados por net.ipv4.conf.*.rp_filter .

Quando rp_filter está habilitado, o kernel rejeitará o tráfego que chega em uma interface onde o endereço de origem do tráfego corresponde à sub-rede de outra interface nesse servidor.

Muitas vezes, problemas podem surgir se a configuração estiver ativada em net.ipv4.conf.all.rp_filter , mas não nas interfaces específicas, como net.ipv4.conf.eth0.rp_filter .
A configuração padrão para rp_filter é 0 , no entanto, muitas distros substituem essa configuração. Como está sendo definido manualmente pela distribuição na inicialização, configurá-lo em net.ipv4.conf.all.rp_filter não funciona mais, ele deve ser definido na interface específica (como net.ipv4.conf.eth0.rp_filter ).

    
por 15.03.2012 / 22:49
2

Eu acho, que existe um problema com a má segmetação da rede, se você precisar de ip r a 192.168.200.6 via 192.168.200.250 linha na configuração ... Se você declarar, que na eth0.200 é a rede 192.168.200.0/24, por que você quer ir para o PC com o endereço IP 192.168.200.6 através de algum outro PC? Não é muito sistemático.

Todas as redes precisam ser roteadas apenas por um roteador. Se você tiver na rede em algum lugar roteador, que é o tráfego de roteamento entre 192.168.100.0/24 e rede 192.168.200.0/24, você pode ter essa configuração nesta máquina, mas você deve desativar o roteamento neste PC! Seu PC estará em ambas as redes, mas o tráfego virá através do roteador, que é o que o PC na rede espera.

Quando o PC quiser se comunicar com outro, no caso evidente, ele verá no endereço de rede e na máscara de rede qual método será escolhido. Se tiver, por exemplo, o endereço IP 192.168.200.20 e a máscara de rede for 255.255.255.0, é esta situação (ipcalc é usado):

# ipcalc 192.168.200.20/24
Address:   192.168.200.20       11000000.10101000.11001000. 00010100
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.200.0/24     11000000.10101000.11001000. 00000000
HostMin:   192.168.200.1        11000000.10101000.11001000. 00000001
HostMax:   192.168.200.254      11000000.10101000.11001000. 11111110
Broadcast: 192.168.200.255      11000000.10101000.11001000. 11111111
Hosts/Net: 254                   Class C, Private Internet

No caso normal, este computador pode contatar diretamente todos os PCs no intervalo 192.168.200.1-192.168.200.254 - eles enviarão um pedido arp com IP de destino para o endereço de broadcast, o PC de destino responderá e o PC terá um endereço de link (MAC) e endereço IP do PC de destino e pode enviar o pacote diretamente.

Se quiserem entrar em contato com o PC de outra sub-rede, eles calcularão (usando endereço IP e máscara de rede) que não podem contatá-lo diretamente e enviarão pacotes com endereço IP do PC de destino, mas com endereço MAC do gateway gateway). O gateway tem essa rede diretamente conectada, ou enviará pacotes via outro gateway ... E a resposta para o nosso computador sairá do próprio gateway, não de outro computador da rede.

No caso normal, todos os PCs da rede precisam apenas de 3 especificações:

  1. endereço IP
  2. Netmask
  3. Gateway padrão

Exceções a essas regras são gateways (ou roteadores), que conhecem mais de uma rede e possuem gateway padrão também ...

Às vezes, você quer ter um 'PC multihomed', que tem em suas interfaces mais de uma rede, mas deseja desativar o roteamento - eles não tinham roteadores (ou gateways). Se o PC está esperando o pacote do gateway e ele virá de outro PC, ele descartará esse pacote como falso.

Existe uma maneira de dizer ao PC na rede, que os pacotes para o endereço 192.168.100.10 terão que enviar por outro PC, mas é:

  • não sistemático (veja acima)
  • é desconfortável para o administrador, porque cada PC na rede 192.168.200.0/24 deve saber sobre isso e em frente - todos os PCs na rede 192.168.100.0/24 devem entrar em contato com 192.168.200.20 via 192.168.100.10 gateway. Não é uma bagunça?

Então eu posso aconselhá-lo strongmente a não fazê-lo. Mantenha as redes o mais simples possível e você não terá problemas.

    
por 15.03.2012 / 11:37
0

Seu switch deve suportar 802.1q e ter uma configuração correta de vlan. Talvez você defina apenas uma vlan ou a porta esteja no modo de acesso (e deve ser trunk). Verifique seus logs do Linux e do switch: você vê algo?

    
por 15.03.2012 / 09:36