IP Priorisieren mit Failover

  • Hi


    Ich habe eine IPv4 und eine IPv6 FailoverIP. Konfiguriert sind diese in der interfaces.


    Hier die gekürzte Version

    Wenn die Failover IPs auf den Server geroutet sind kann ich ping4 und ping6 versenden und entsprechend auch Updates fahren. Wenn ich nun aber die FailoverIP gerade nicht auf diesem Server habe und Updates machen möchte, funktionierten diese zwar auf IPv4 (und somit ping4), versuche ich aber ein Update bei denen IPv6 Server vorhanden sind oder mache ich ein ping6 geht dies nicht.


    Dies liegt an der Failover IPv6, da wenn ich diese auskommentiere geht es wieder. Diese soll aber natürlich nicht auskommentiert sein :D


    Kann ich die "original IP" irgendwie schlau Priorisieren, oder wie macht ihr das mit der Konfiguration?


    Gruss und Danke


    Oliver

  • Hi,


    das hat mit der IPv6 Source Address Selection zu tun. Die letzte hinzugefügte IP wird ausgehend verwendet.


    Setze im Zweifelsfall die zusätzlichen IPs per Script auf:


    ip -6 addr add 2001:db8::42/64 dev ens3 preferred_lft 0


    Die Parameter nach ens3 teilen dem Betriebssystem mit, dass die IPs nicht für ausgehenden Traffic verwendet werden sollen.

  • voja: Vielen Dank für deine Antwort.


    das hat mit der IPv6 Source Address Selection zu tun. Die letzte hinzugefügte IP wird ausgehend verwendet.

    Das wusste ich nicht ;) gilt dies bei IPv4 auch?


    Setze im Zweifelsfall die zusätzlichen IPs per Script auf:


    ip -6 addr add 2001:db8::42/64 dev ens3 preferred_lft 0

    Ich nehme an das selbe kann ich mit der FailoverIPv4 machen. Was verstehst du unter per Script? Ich hätte dies nun in die Interfaces gelegt. Ich habe bei der IPv6 einfach meine FailoverIPv6 eingefügt, der Ping geht jedoch trotz neustart nach wie vor nicht. Sorry falls ich da was Missverstanden habe.


    Was ich mir noch nicht ganz sicher sind. Ich habe nun einmal gefunden mal soll den Befehl direkt in der Console einmalig ausführen, und in der interfaces diesen Block dann trotzdem lassen

    Code
    iface ens3 inet6 static
    address 2a03:4000:XX:XX::2
    netmask 64

    Wäre dies der richtige weg? Irgendwie ist so einfach die Failover dann auch nicht mehr von aussen erreichbar. Ggf habe ich es aber auch Missverstanden.


    Ich habe dies nun einmal für die IPv6 "ip -6 addr..." und einmal für die IPv4 (ip addr...) eingefügt.

  • Nein, für IPv4 gilt das nicht. Hier gilt die erste Adresse.


    Du kannst auch IPv4 Adresse. per ip Kommando hinzufügen:


    ip addr add 192.168.0.1/24 dev ens3


    Mit Script meine ich post-up in der /etc/network/interfaces zu verwenden. Ich schreibe dann immer die ganzen Befehle in ein kleines Bash Script.


    In /etc/network/interfaces direkt führst Du nur die primäre IPv4 und IPv6 auf, die Failover und Zusatz IPs würde ich per post-up Script einbinden.

  • Vielen Dank. Das funktioniert super.


    KB19 Hast du das mit der Failover eigentlich mal versucht?

    Code
    up ip route change default via 172.31.1.1 src 172.16.1.1
    down ip route change default via 172.31.1.1

    Ich habe mal testweise versucht die FailoverIPv4 als Ausgehender Traffic zu verwenden einfach damit ich die Befehle besser verstehe. Aber dann hab ich gar kein Zugriff mehr nach extern auch wenn die IP geroutet ist :D

  • Die Failover IP wird von Netcup auf die primäre IP von Deinem Server gerouted. Ich denke also nicht dass es vom Routing her funktionieren kann die als ausgehendes Default Gateway zu verwenden.

  • Die Failover IP wird von Netcup auf die primäre IP von Deinem Server gerouted. Ich denke also nicht dass es vom Routing her funktionieren kann die als ausgehendes Default Gateway zu verwenden.

    Ah ok. Dann erklärt es mir. Aber ich dachte es müsste gehen da die IPv6 ausgehend ja zum Standard geht und ich diese "deaktivieren" kann wie oben besprochen.

    Ich habe nun die IPv6 angepasst das diese nicht als Ausgehend verwendet wird. So geht das alles.

    Wie gesagt war zu Übungszwecken

  • @OliverN Du hast Glück, mein Server mit der Failover-IP wartet gerade auf die Konfiguration nach der Neuinstallation… 8o

    Funktioniert somit einwandfrei für IPv4, wenn man den richtigen Gateway angibt. :)

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • KB19 Also muss das Gateway im Netz der Failover IP sein?

    Nein! Siehe vorherige Ausgabe…

    • IPv4 Adresse: ***.***.56.191/22
    • IPv4 Gateway somit: ***.***.56.1
    • IPv4 Failover: ***.***.230.137/32

    Das sind völlig unterschiedliche Subnetze. Nochmals zusammengefasst:

    Bash
    # Failover-Adresse hinzufügen
    ip -4 addr add <FAILOVER>/32 dev ens3
    
    # Gateway ermitteln
    ip -4 route
    
    # Default Route ändern
    ip -4 route change default via <GATEWAY> src <FAILOVER>

    Tipp: Die ip Kommandos unterstützen das Argument -o (-oneline), was besonders für Scripte extrem nützlich ist.

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Danke. Dies habe ich sogar so gemacht.


    Sobald ich aber den Befehl

    Code
    ip route change default via ***.***.56.1 src ***.***.230.137

    verwende, bekomme ich keine ausgabe mehr bei wget.


    Bei ip -4 route zeigt er die Failover jedoch an

    Code
    ip -4 route
    default via ***.***.184.1 dev ens3 src ***.***.43.12 (Dies ist meine Failover)
    ***.***.184.0/22 dev ens3 proto kernel scope link src ***.***.184.231

    Das ganze ohne Failover:

    Code
    ip -4 route
    default via ***.***.184.1 dev ens3 onlink
    ***.***.184.0/22 dev ens3 proto kernel scope link src ***.***.184.231

    Ein ping auf meine Failover IPv4 von einem anderen Server funktioneirt jedoch und läuft nicht ins leere. Der Server ist also erreichbar. Nur gibt es keine ausgabe mehr bei

    Code
    wget -q -O - https://ip4.anysrc.net/banner
    wget -q -O - https://ip6.anysrc.net/banner
    ping4 google.de
    ping: google.de: Temporärer Fehler bei der Namensauflösungcat /et    
    ping6 google.de
    ping: google.de: Temporärer Fehler bei der Namensauflösung

    Meine Nameserver sind die von Netcup

    Code
    $ cat /etc/resolv.conf
    nameserver 46.38.225.230
    nameserver 46.38.252.230
  • Ein ping auf meine Failover IPv4 von einem anderen Server funktioneirt jedoch und läuft nicht ins leere.

    Scheitert es nachher nur an der Namensauflösung? Funktioniert ein ausgehender Ping auf eine IP-Adresse? (Laut Deiner Beschreibung sollte das der Fall sein.)

    Code
    ping -c 10 -n 8.8.8.8

    Wirf mal tcpdump an und schau, was an Paketen rein bzw. raus geht.

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Ich denke das es nur die Namensauflösung ist.

    Auch ein apt-get install schlägt so natürlich fehl.


    Ein Ping auf verschiedene IPs funktioniert ohne Probleme.

    Code
    ping -c 10 -n 8.8.8.8
    PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
    64 bytes from 8.8.8.8: icmp_seq=1 ttl=123 time=3.66 ms
    64 bytes from 8.8.8.8: icmp_seq=2 ttl=123 time=3.71 ms
    64 bytes from 8.8.8.8: icmp_seq=3 ttl=123 time=3.70 ms
    64 bytes from 8.8.8.8: icmp_seq=4 ttl=123 time=3.72 ms

    tcpdump.

    Vor der Upstellung erhalte ich sehr viele von diesen Einträgen:

    Code
    07:15:46.751956 IP <mein.rdns.tld>.ssh > <meine.isp.kennung>.50816: Flags [P.], seq 892388:892432, ack 2625, win 315, length 44
    07:15:46.752107 IP <meine.isp.kennung>.50816 > <mein.rdns.tld>.ssh: Flags [.], ack 873008, win 256, length 0

    Nach der Umstellung nur noch so:

    Code
    07:18:49.585165 IP <meine isp IP>.50816 > <mein.rdns.tld>.ssh: Flags [.], ack 3027000, win 260, options [nop,nop,sack 1 {3026388:3026520}], length 0
    07:18:49.585233 IP <mein.rdns.tld>.ssh > <meine isp IP>.50816: Flags [P.], seq 3032176:3032220, ack 2377, win 315, length 44

    Ein ping auf einen anderen Server von mir verläuft ohne Probleme. Ein ping auf den Nameserver von Netcup geht dann nicht mehr

    Code
    ping 46.38.225.230
    PING 46.38.225.230 (46.38.225.230) 56(84) bytes of data.
    ^C
    --- 46.38.225.230 ping statistics ---
    9 packets transmitted, 0 received, 100% packet loss, time 8197ms/et    

    Ich denke hier liegt dann auch das Problem. Wenn ich meine Nameserver anpasse auf google Plublic DNS (8.8.8.8) funktioniert es. Dann komme ich auch mit der FailoverIP raus.


    Nun ist natürlich die Frage ob dies einfach ein "Problem" bei netcup ist, oder ob es ggf nicht Empohlen ist die Nameserver von netcup zu verwenden. Die von google und Co sollte man ja auch nicht verwenden vorallem wenn ein Mailserver installiert ist mit postscreen

  • Leider kann ich gerade nicht mehr bearbeiten.

    Da ich eh drei eigene Nameserver mit PowerDNS betreiben möchte, müsste ich ggf nochmals überlegen auf die drei gleich noch einen DNS Resolver zu installieren anstelle ubound auf jedem Mailserver.

  • Vorsicht: Die netcup DNS-Server antworten meines Wissens nach nicht auf Ping-Anfragen! ;)


    Trotzdem seltsam, bei meinen Tests habe ich nämlich ausschließlich die netcup DNS-Server verwendet. Einen lokaler Resolver oder Cache nutze ich auf diesem (frischen) System nicht.


    Was gibt denn ein ip route get 46.38.225.230 aus? Eventuell einmal ip route flush cache nachschieben? Interessant wäre auch noch das:

    Bash
    for ip in 46.38.225.230 46.38.252.230 2a03:4000:0:1::e1e6 2a03:4000:8000::fce6; do dig +time=5 +tries=1 A netcup.de "@$ip"; done

    (Fragt alle netcup Nameserver nacheinander ab.)


    Außerdem: Ist eine Firewall aktiv? (iptables -n -v --list && ip6tables -n -v --list)

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Code
    ip route get 46.38.225.230
    46.38.225.230 via ***.***.184.1 dev ens3 src ***.***.184.231
        cache

    Nach dem Cache leeren wird das selbe ausgegeben.

    Es ist ein Frisch installiertes Debian von der Netinst. CD


    Die IPv4 ist wie folgt Configuriert

    Code
    iface ens3 inet static
    address ***.***.184.231
    nameserver 46.38.225.230
    nameserver 46.38.252.230
    netmask 22
    broadcast ***.***.187.255
    gateway ***.***.184.1