%20verh%C3%A4lt%20sich%20wie%20Hauptserver-IP.png)
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 restart
erhalte ich eine RTNETLINK answers: File exists
Fehlermeldung, 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 eth0
alles 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 del
ifcfg-eth0
route-eth0
pre-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.255
und 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_dev
eine Zeile mit hinzu GATEWAYDEV="eth0"
.
Was passiert, ist, dass das network-functions
Skript entscheidet, welches Gerät das Standard-Gateway wird. Es untersucht die Route zur Gateway-IP ip get route to GATEWAY
und 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-routes
und hinzufügendefault via 5.x.y.82 dev eth0
Der letzte Ausweg /etc/rc.local
ist 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