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 eth1
auch 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 ifconfig
Ergebnisse - nur ein anderes letztes Quad), eth0
ist es still und ich sehe die ICMP-Echos eth1
wie 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/interfaces
Datei:
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 -anr
kö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
iptabels -L -t nat
Antworten:
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_tables
ist zumindest in EL 6.x und DEB 7/8 dieselbe. Dies ist die Datei, die eine benannte Routing-Tabelle für statische Routen erstellt.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/interfaces
in DEB 7/8 mindestens:Das Ergebnis von
ip route show
auf Debian:Die EL 6.x-
/etc/sysconfig/network
Datei: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-eth0
Datei ohne "HWADDR" und "UUID":DIE EL 6.x-
/etc/sysconfig/network-scripts/ifcfg-eth1
Datei ohne "HWADDR" und "UUID":Die EL 6.x-
/etc/sysconfig/network-scripts/route-eth1
Datei:Die EL 6.x-
/etc/sysconfig/network-scripts/rule-eth1
Datei:Das Ergebnis von
ip route show
auf EL 6.x:quelle
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 :
Von derselben Seite:
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_ignore
sysctls (bekam von LVS: Das ARP - Problem , gesehen hier ). Siehe auch ip-sysctl.txt .quelle