Separater Netzwerkverkehr auf zwei Netzwerkschnittstellen

11

Können Sie Ihr Fachwissen einbringen, um zu verstehen, wie die Trennung des Netzwerkverkehrs auf zwei Netzwerkschnittstellen konfiguriert wird?

Soweit ich weiß, werden statische Routen für Netzwerkverkehr verwendet, der nicht für die Verwendung eines Standard-Gateways ausgelegt ist. Das Standard-Gateway wird für den gesamten Datenverkehr verwendet, der nicht für das lokale Netzwerk bestimmt ist und für den in einer Routing-Tabelle keine bevorzugte Route angegeben wurde.

Das Szenario ist wie folgt.

  • Jeder Computer im Netzwerk verfügt über zwei Netzwerkkarten.
  • Die Produktionsschnittstelle für jede ist eth0(GW = 10.10.10.1).
  • Die Verwaltungsschnittstelle für jede ist eth1(GW = 192.168.100.1).
  • Produktions- und Managementverkehr sollten vollständig getrennt sein.

Ich habe unten gepostet, was ich mit Debian Wheezy versucht habe. Mein Problem ist, dass, obwohl ich Hosts so eingerichtet habe, dass sie auf beiden Schnittstellen kommunizieren, einzelne Hosts den Datenverkehr auf der falschen Schnittstelle zu "hören" scheinen. Beispielsweise:

Host 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)

Von Host 140 aus führe ich diesen Befehl aus : tcpdump -i eth0. In einer separaten Sitzung auf Host 140 führe ich aus 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

Warum sehe ich die obige Ausgabe an eth0? Ich denke, ich sollte nur Verkehr für 10.10.10.140 sehen. Ich sehe das eth1auch wie erwartet:

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

Wenn ich von Host 50 aus pinge (gleiche ifconfigErgebnisse - nur ein anderes letztes Quad), eth0ist es still und ich sehe die ICMP-Echos eth1wie erwartet.

Ich möchte verstehen, wie jede Schnittstelle so konfiguriert wird, dass sie nur den Datenverkehr verarbeitet, für den sie in zwei großen Linux-Varianten verantwortlich ist. Ich glaube, ich bin fast da, aber mir fehlt etwas, das ich einfach nicht zu finden scheine.

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

Ich weiß, dass eine Lösung für Debian sowohl für Wheezy als auch für Jessie gut sein sollte und dass eine Lösung für eine EL für alle EL 6.x-Versionen gleich sein sollte. Ich möchte vermeiden, ein RC-Skript zum Ausführen von Befehlen zu verwenden, und stattdessen die Konfigurationsdateien verwenden.

In Debian sind die relevanten Konfigurationsdateien, die ich kenne ,:

  • /etc/network/interfaces

In EL 6.x sind die relevanten Konfigurationsdateien, die mir bekannt sind:

  • /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

Meine Debian 8 "Jessie" /etc/network/interfacesDatei:

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

Ich denke, netstat -anrkönnte das Problem veranschaulichen:

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
quelle
checkiptabels -L -t nat
PersianGulf

Antworten:

7

Ich würde gerne mehr über dieses Thema erfahren, um die Konfiguration so zu verfeinern, dass sie so gut wie möglich ist, aber hier ist, was ich bisher habe. Auch ohne Aktivierung der ARP-Filterung auf allen Netzwerkschnittstellen ( net.ipv4.conf.all.arp_filter = 0), wie von @spuk erwähnt, scheint der Datenverkehr in dieser Konfiguration vollständig getrennt zu sein.

Die Datei /etc/iproute2/rt_tablesist zumindest in EL 6.x und DEB 7/8 dieselbe. Dies ist die Datei, die eine benannte Routing-Tabelle für statische Routen erstellt.

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

Oben ist die Nummer der genannten statischen Route 1 im Wesentlichen willkürlich; oder jede statische Route erhält eine eigene eindeutige Nummer zwischen 1 und 252.

Die Datei /etc/network/interfacesin DEB 7/8 mindestens:

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

Das Ergebnis von ip route showauf 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

Die EL 6.x- /etc/sysconfig/networkDatei:

NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=10.10.10.1

Oben ist GATEWAY die Standardroute. Wenn BOOTPROTOCOL auf DHCP eingestellt wäre, würde die Standardroute von DHCP übernommen.

DIE EL 6.x- /etc/sysconfig/network-scripts/ifcfg-eth0Datei ohne "HWADDR" und "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

DIE EL 6.x- /etc/sysconfig/network-scripts/ifcfg-eth1Datei ohne "HWADDR" und "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

Die EL 6.x- /etc/sysconfig/network-scripts/route-eth1Datei:

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

Die EL 6.x- /etc/sysconfig/network-scripts/rule-eth1Datei:

from 192.168.100.0/24 lookup mgmt

Das Ergebnis von ip route showauf 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
Christopher
quelle
4

Ich habe Ihren gesamten Beitrag nicht vollständig gelesen (ich kann die Zeit momentan leider nicht wirklich verbringen), aber ich glaube, dass dies mit der Art und Weise zusammenhängt, wie Linux das IP-Host-Modell implementiert :

... Die IPv4-Implementierung unter Linux verwendet standardmäßig das schwache Hostmodell. ...

Von derselben Seite:

... Wenn der IP-Stack mit einem schwachen Hostmodell implementiert ist, akzeptiert er jedes lokal bestimmte Paket, unabhängig von der Netzwerkschnittstelle, auf der das Paket empfangen wurde. ...

Das heißt, unter Linux gehören die IP-Adressen standardmäßig "zum Host" und nicht ausschließlich "zur Schnittstelle". Sie können dieses Verhalten ändern , über die arp_filter, rp_filter, arp_announce, arp_ignoresysctls (bekam von LVS: Das ARP - Problem , gesehen hier ). Siehe auch ip-sysctl.txt .

spuk
quelle
Dieser Artikel hat gut funktioniert für mich: sivel.net/2006/12/linux-multi-homing
Richard Gomes