Tráfego de rede separado em duas interfaces de rede

11

Você poderia emprestar sua experiência para entender como configurar a separação do tráfego de rede em duas interfaces de rede?

Pelo que entendi até agora, as rotas estáticas são usadas para o 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 não destinado à rede local e para o qual nenhuma rota preferencial foi especificada em uma tabela de roteamento.

O cenário é o seguinte.

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

Postei, abaixo, o que tentei com o Debian Wheezy. E, meu problema é que, embora eu tenha hosts configurados de tal maneira que eles se comuniquem nas duas interfaces, os hosts individuais parecem "ouvir" o 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)

A partir do host 140, eu executar o comando: tcpdump -i eth0. Em uma sessão separada no host 140, eu 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 ativada eth0? Acho que só devo ver o tráfego para 10.10.10.140. Também vejo isso eth1como 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 executar ping no host 50 (mesmos ifconfigresultados - apenas um último quadrilátero diferente), eth0ficaremos em silêncio e vejo o eco do ICMP ativado eth1, conforme o esperado.

Gostaria de entender como configurar cada interface para lidar apenas com o tráfego pelo qual é responsável nas duas principais variedades do Linux. Acho que estou quase lá, mas estou perdendo 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. Gostaria de evitar o uso de um script RC para executar comandos, optando por usar os arquivos de configuração.

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

  • /etc/network/interfaces

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

  • /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 /etc/network/interfacesarquivo "Jessie" do Debian 8 :

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

Eu acho que netstat -anrpode 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
Christopher
fonte
checkiptabels -L -t nat
PersianGulf

Respostas:

7

Gostaria de saber mais sobre este tópico para refinar a configuração para ser a melhor possível, mas aqui está o que tenho até agora. Mesmo sem ativar a filtragem ARP em todas as interfaces de rede ( net.ipv4.conf.all.arp_filter = 0), como mencionado pelo @spuk, o tráfego parece estar completamente separado nessa configuração.

O arquivo /etc/iproute2/rt_tables,, é o mesmo no EL 6.xe DEB 7/8, pelo menos. Este é o arquivo que cria uma tabela de roteamento nomeada para rotas estáticas.

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

Acima, o número da rota estática nomeada, 1, é essencialmente arbitrário; ou, cada rota estática recebe seu próprio número exclusivo entre 1 e 252.

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

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
  iface lo inet loopback

# The production network interface
# The 'gateway' directive is the default route.
# Were eth0 configured via DHCP, the default route would also be here.
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
# The 'gateway' directive cannot be used again because there can be
# one, and only one, default route. Instead, the 'post-up' directives
# use the `mgmt` static route.
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 do ip route showDebian:

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 /etc/sysconfig/networkarquivo EL 6.x :

NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=10.10.10.1

Acima, GATEWAY é a rota padrão. Abaixo, se o BOOTPROTOCOL estivesse definido como DHCP, a rota padrão seria adquirida do DHCP.

O /etc/sysconfig/network-scripts/ifcfg-eth0arquivo EL 6.x , 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 /etc/sysconfig/network-scripts/ifcfg-eth1arquivo EL 6.x , 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 /etc/sysconfig/network-scripts/route-eth1arquivo EL 6.x :

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

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

from 192.168.100.0/24 lookup mgmt

O resultado do ip route showEL 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
Christopher
fonte
4

Não li completamente toda a sua postagem (desculpe, não posso gastar muito tempo no momento), mas acredito que possa estar relacionada à maneira como o Linux implementa o modelo de host IP :

... A implementação do IPv4 no Linux assume como padrão o modelo de host fraco. ...

Nessa mesma página:

... Se a pilha IP for implementada com um modelo de host fraco, ela aceitará qualquer pacote destinado localmente, independentemente da interface de rede na qual o pacote foi recebido. ...

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

spuk
fonte
Este artigo funcionou bem para mim: sivel.net/2006/12/linux-multi-homing
Richard Gomes