Tráfego de Rede Separado em Duas Interfaces de Rede

9

Eu não sou profissional de R & A, e muito desse domínio da computação me escapa. Você poderia emprestar seu conhecimento para ajudar a entender como proceder? configurando a separação do tráfego de rede em duas interfaces de rede? Eu vi os outros posts, mas ainda estou perplexo.

Pelo que entendi, as rotas estáticas são usadas para tráfego de rede que não foi projetado para usar um gateway padrão. O gateway padrão é usado para todo o tráfego que não é destinado à rede local e para o qual não A rota preferida foi especificada em uma tabela de roteamento.

O cenário é o seguinte.

  • Cada computador na rede tem duas placas de rede.
  • A interface de produção de cada um é eth0 (GW = 10.10.10.1).
  • A interface de gerenciamento de cada um é eth1 (GW = 192.168.100.1).
  • O tráfego de produção e gerenciamento deve ser totalmente separado.

Eu postei, abaixo, o que eu tentei com o Debian Wheezy. E meu problema é que, embora eu tenha hosts configurados de tal forma que eles se comunicam em ambas as interfaces, hosts individuais parecem "ouvir" tráfego na interface errada. Por exemplo:

Anfitrião 140

eth0      Link encap:Ethernet  HWaddr 08:00:27:d1:b6:8f
          inet addr:10.10.10.140  Bcast:10.10.10.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fed1:b68f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1341 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2530 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:641481 (626.4 KiB)  TX bytes:241124 (235.4 KiB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:ad:14:b6
          inet addr:192.168.100.140  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fead:14b6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7220 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5257 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:602485 (588.3 KiB)  TX bytes:1022906 (998.9 KiB)

Do host 140, executo este comando: tcpdump -i eth0 . Em um separado sessão no host 140, executo ping 192.168.100.50 .

19:17:29.301565 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 10, length 64
19:17:30.301561 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 11, length 64
19:17:31.301570 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 12, length 64
19:17:32.301580 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 13, length 64

Por que vejo a saída acima em eth0 ? Eu acho que só deveria ver o tráfego para 10.10.10.140. Eu também vejo isso em eth1 , como esperado:

19:18:47.805408 IP 192.168.100.50 > 192.168.100.140: ICMP echo request, id 1605, seq 247, length 64

Se eu fizer ping do Host 50 (mesmo resultado ifconfig - apenas um último quad diferente), então eth0 é silencioso, e eu vejo os echos ICMP em eth1 , como esperado.

Eu gostaria de entender como configurar cada interface para lidar somente o tráfego pelo qual é responsável em duas grandes variedades de Linux. Acho que estou quase lá, mas sinto falta de algo que simplesmente não consigo encontrar.

  • Debian Wheezy (7.x) ou Debian Jessie (8.x)
  • Enterprise Linux (6.x) (RedHat / CentOS / Scientific / Oracle).

Eu sei que uma solução para o Debian deve ser boa tanto para Wheezy quanto para Jessie, e que uma solução para um EL deve ser a mesma para todas as versões do EL 6.x. Eu gostaria de evitar usar um script RC para executar comandos, optando por para usar os arquivos de configuração.

No Debian, os arquivos de configuração relevantes que eu conheço são:

  • /etc/iproute2/rt_tables
  • /etc/network/interfaces

No EL 6.x, os arquivos de configuração relevantes que eu conheço são:

  • /etc/iproute2/rt_tables
  • /etc/sysconfig/network
  • /etc/sysconfig/network-scripts/ifcfg-eth0
  • /etc/sysconfig/network-scripts/ifcfg-eth1
  • /etc/sysconfig/network-scripts/route-eth0
  • /etc/sysconfig/network-scripts/route-eth1
  • /etc/sysconfig/network-scripts/rule-eth0
  • /etc/sysconfig/network-scripts/rule-eth1

Meu arquivo Debian 8 "Jessie" /etc/iproute2/rt_tables :

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
1       mgmt

Meu arquivo Debian 8 "Jessie" /etc/network/interfaces :

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# Production interface
auto eth0
allow-hotplug eth0
iface eth0 inet static
  address 10.10.10.140
  netmask 255.255.255.0
  gateway 10.10.10.1

# Management interface
auto eth1
allow-hotplug eth1
iface eth1 inet static
  address 192.168.100.140
  netmask 255.255.255.0
  post-up ip route add 192.168.100.0/24 dev eth1 src 192.168.100.140 table mgmt
  post-up ip route add default via 192.168.100.1 dev eth1 table mgmt
  post-up ip rule add from 192.168.100.140/32 table mgmt
  post-up ip rule add to 192.168.100.140/32 table mgmt

Acho que netstat -anr pode ilustrar o problema:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.10.10.1      0.0.0.0         UG        0 0          0 eth0
10.10.10.0      0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.100.0   0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.100.0   0.0.0.0         255.255.255.0   U         0 0          0 eth1
    
por Christopher 04.05.2015 / 01:42

2 respostas

4

Adoraria saber mais sobre esse tópico para refinar a configuração para que ela seja a melhor possível, mas eis o que tenho até agora. Mesmo sem habilitar o filtro ARP em todas as interfaces de rede (net.ipv4.conf.all.arp_filter = 0), o tráfego parece estar completamente separado nesta configuração.

O arquivo /etc/iproute2/rt_tables é o mesmo em EL 6.xe DEB 7/8, pelo menos.

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
200 mgmt

O arquivo, /etc/network/interfaces em DEB 7/8, pelo menos:

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
  iface lo inet loopback

# The production network interface
auto eth0
allow-hotplug eth0
iface eth0 inet static
  address 10.10.10.140
  netmask 255.255.255.0
  gateway 10.10.10.1

# The management network interface
auto eth1
allow-hotplug eth1
iface eth1 inet static
  address 192.168.100.140
  netmask 255.255.255.0
  post-up ip route add 192.168.100.0/24 dev eth1 src 192.168.100.140 table mgmt
  post-up ip route add default via 192.168.100.1 dev eth1 table mgmt
  post-up ip rule add from 192.168.100.140/32 table mgmt
  post-up ip rule add to 192.168.100.140/32 table mgmt

O resultado de ip route show no Debian:

default via 10.10.10.1 dev eth0
10.10.10.0/24 dev eth0  proto kernel  scope link  src 10.10.10.140
192.168.100.0/24 dev eth1  proto kernel  scope link  src 192.168.100.140

O arquivo EL 6.x /etc/sysconfig/network :

NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=10.10.10.1

O arquivo EL 6.x /etc/sysconfig/network-scripts/ifcfg-eth0 , sem "HWADDR" e "UUID":

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTOCOL=none
IPADDR=10.10.10.140
NETMASK=255.255.255.0
NETWORK=10.10.10.0
BROADCAST=10.10.10.255

O arquivo EL 6.x /etc/sysconfig/network-scripts/ifcfg-eth1 , sem "HWADDR" e "UUID":

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTOCOL=none
IPADDR=192.168.100.140
NETMASK=255.255.255.0
NETWORK=192.168.100.0
BROADCAST=192.168.100.255

O arquivo EL 6.x /etc/sysconfig/network-scripts/route-eth1 :

192.168.100.0/24 dev eth1 table mgmt
default via 192.168.100.1 dev eth1 table mgmt

O arquivo EL 6.x /etc/sysconfig/network-scripts/rule-eth1 :

from 192.168.100.0/24 lookup mgmt

O resultado de ip route show no EL 6.x:

192.168.100.0/24 dev eth1  proto kernel  scope link  src 192.168.100.160
10.10.10.0/24 dev eth0  proto kernel  scope link  src 10.10.10.160
169.254.0.0/16 dev eth0  scope link  metric 1002
169.254.0.0/16 dev eth1  scope link  metric 1003
default via 10.10.10.1 dev eth0
    
por 09.05.2015 / 03:29
4

Eu não li toda a sua postagem (desculpe, não posso realmente passar o tempo agora), mas acredito que isso pode estar relacionado à forma como o Linux implementa o modelo de hostIP :

... The IPv4 implementation in Linux defaults to the weak host model. ...

Da mesma página:

... If the IP stack is implemented with a weak host model, it accepts any locally destined packet regardless of the network interface on which the packet was received. ...

Ou seja, no Linux, por padrão, os endereços IP "pertencem ao host", não estritamente "à interface". Você pode alterar esse comportamento usando arp_filter , rp_filter , arp_announce , arp_ignore sysctls (obtido de LVS: o problema ARP , visto aqui ). Além disso, consulte ip-sysctl.txt .

Espero que isso ajude.

    
por 05.05.2015 / 19:12