Sekundäre IP (eth0:0) verhält sich wie Hauptserver-IP

Sekundäre IP (eth0:0) verhält sich wie Hauptserver-IP

Ich habe einen CentOS-Server, der mit 4 aufeinanderfolgenden IPs konfiguriert ist:
eth0 5.xx251
eth0:0 5.xx252
eth0:1 5.xx253
eth0:2 5.xx254

Das Problem besteht darin, dass der gesamte Datenverkehr mit eth0:0 (5.xx252) als Quell-IP ins Internet geht, statt mit eth0.
# curl ifconfig.me
5.x.x.252

Wie kann ich das beheben, sodass der gesamte Datenverkehr über eth0, also meine Haupt-IP, läuft?

PS: Mein Server ist ein VPS, der auf einem Xen Dom0 läuft, wobei letzterer im gerouteten Netzwerkmodus konfiguriert ist.

Dank im Voraus!

Serverkonfiguration

# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:x:x:x:x:AE  
          inet addr:5.x.x.251  Bcast:5.x.x.255  Mask:255.255.255.255
          inet6 addr: fe80::x:x:x:x/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14675569 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9463227 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4122016502 (3.8 GiB)  TX bytes:25959110751 (24.1 GiB)
          Interrupt:23 

eth0:0    Link encap:Ethernet  HWaddr 00:x:x:x:x:AE   
          inet addr:5.x.x.252  Bcast:5.x.x.255  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:23 

eth0:1    Link encap:Ethernet  HWaddr 00:x:x:x:x:AE  
          inet addr:5.x.x.253  Bcast:5.x.x.255  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:23 

eth0:2    Link encap:Ethernet  HWaddr 00:x:x:x:x:AE  
          inet addr:5.x.x.254  Bcast:5.x.x.255  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:23  

# cat /etc/hosts
127.0.0.1       localhost.localdomain localhost
5.x.x.251       [fqdn] [hostname]

# cat ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=5.x.x.251
NETMASK=255.255.255.224
SCOPE="peer 5.x.y.82"

# cat ifcfg-eth0:0
DEVICE=eth0:0
BOOTPROTO=static
ONBOOT=yes
IPADDR=5.x.x.252
NETMASK=255.255.255.224

# cat route-eth0 
ADDRESS0=0.0.0.0
NETMASK0=0.0.0.0
GATEWAY0=5.x.y.82

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
5.x.y.82        0.0.0.0         255.255.255.255 UH        0 0          0 eth0
5.x.x.224       0.0.0.0         255.255.255.224 U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         5.x.y.82        0.0.0.0         UG        0 0          0 eth0

Update 29. August 2012
Wenn ich es ausführe, /etc/init.d/network restarterhalte ich eine RTNETLINK answers: File existsFehlermeldung, die mich glauben lässt, dass es eine andere Route zu einem anderen Netzwerk gibt, die das Standard-Gateway verwendet, wie zu sehenHier.

# /etc/init.d/network restart
Shutting down interface eth0:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:  RTNETLINK answers: File exists
                                                           [  OK  ]

Sicher ist, dass ip route del default via 5.x.y.82 dev eth0alles wie erwartet funktioniert, wenn ich es zuerst lösche und dann mit der IP-Adresse .251 wieder hinzufüge. Gibt es eine Möglichkeit , entweder den oder den Dateien
einen Befehl hinzuzufügen ? Ich sehe, dass dies unter Debian mit ( möglich ist .route delifcfg-eth0route-eth0pre-up ip addr del ...Mehr Info), aber was ist mit CentOS?

Antwort1

Ausdieses Dokumentes scheint, dass Sie zumindest unter CentOS 5 und, wie ich vermute, auch darüber Ihre Routen angeben können, indem Sie einfach die richtigen iproute2-Befehlsargumente angeben. (siehe den Abschnitt dazu IP Command Arguments Format)

Anstatt also etwas wie Folgendes zu schreiben:

# route-eth0 
ADDRESS0=0.0.0.0
NETMASK0=0.0.0.0
GATEWAY0=5.x.y.82

Sie könnten einfach eine Datei wie diese haben:

default via 5.x.y.82 dev eth0  src 5.x.x.251

Ich habe allerdings keine von Redhat/Redhat abgeleitete Box zum Testen zur Hand.

Antwort2

Wenn die Alias-IP-Adressen nicht als Quelladressen für nicht lokale Ziele verwendet werden sollen, sollten sie sich nicht im selben Subnetz wie das Ziel Ihrer Standardroute befinden. Ändern Sie daher ihre Netzmasken 255.255.255.255und entfernen Sie ihre Broadcast-Adressen.

Antwort3

Löschen Sie zuerst Ihr 0.0.0.0 Standard-Gateway

route del -net default

Dann deklarieren Sie default eth0 als Standard-Gateway-Gerät

route add -net default gw 5.x.y.82 dev eth0

Es sollte funktionieren. Überprüfen Sie mit

ip ro li

Um dies als Regel zu speichern, versuchen Sie dieses chaotische Ding:

Öffnen Sie /etc/sysconfig/network-scripts/network-functions, suchen Sie die Funktion add_default_route ()und fügen Sie in dieser Funktion nach dem Aufruf find_gateway_deveine Zeile mit hinzu GATEWAYDEV="eth0".

Was passiert, ist, dass das network-functionsSkript entscheidet, welches Gerät das Standard-Gateway wird. Es untersucht die Route zur Gateway-IP ip get route to GATEWAYund findet mithilfe von sed ein Gerät. Es scheint, dass jedes Mal eth0:0 das Gerät wird. Durch die Festcodierung GATEWAYDEV="eth0"stellen Sie also sicher, dass eth0 immer als Gateway-Gerät ausgewählt wird.

In älteren Versionen von RH konnten Sie einfach bearbeiten /etc/sysconfig/static-routesund hinzufügendefault via 5.x.y.82 dev eth0

Der letzte Ausweg /etc/rc.localist immer dein Freund!

Antwort4

Da sie sich alle im selben Subnetz befinden, wählt der Kernel eins aus. Sie können dies überprüfen, indem Sie Folgendes ausführen:

 ip addr list dev eth0

Damit es richtig funktioniert, müssen Sie ein wenig iptables-Magie anwenden. Siehe das Folgende

Wie bestimmt das Betriebssystem beim IP-Aliasing, welche IP-Adresse als Quelle für ausgehende TCP/IP-Verbindungen verwendet wird?

verwandte Informationen