IPv6: UFW blockt pings

  • Hey,


    also ich hab mich mal dran gesetzt mein IPv6 einzurichten und auch auf UFW umzustellen. Leider ist nun mein Server nicht mehr pingbar, wenn UFW aktiv ist.


    Muss ich ICMP Pakete explizit erlauben? Warum klappt der Ping vom server auf google.com nicht bei aktiver Firewall?





    Danke!

  • Ich weiß, UFW liefert da ja auch paar Regeln mit in der /etc/ufw/before6.rules


    Code
    # ok icmp codes
    -A ufw6-before-input -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT
    -A ufw6-before-input -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
    -A ufw6-before-input -p icmpv6 --icmpv6-type time-exceeded -j ACCEPT
    -A ufw6-before-input -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT
    -A ufw6-before-input -p icmpv6 --icmpv6-type echo-request -j ACCEPT


    ip neigh zeigt:


    Code
    fe80::1 dev eth0 lladdr 00:00:5e:00:02:02 router STALE
    2a03:4000:6:b000::1 dev eth0 lladdr 00:00:5e:00:02:02 router STALE
    fe80::f21c:2d00:757d:40c0 dev eth0 lladdr f0:1c:2d:7d:40:c0 router STALE
    2a03:4000:6:b000::3 dev eth0 lladdr f0:1c:2d:7d:40:c0 router STALE
    37.120.191.245 dev eth0 lladdr 4a:80:a4:3a:05:1f STALE
    37.120.188.2 dev eth0 lladdr f0:1c:2d:7d:60:c0 STALE
    37.120.188.1 dev eth0 lladdr 00:00:5e:00:01:0a REACHABLE
    37.120.188.3 dev eth0 lladdr f0:1c:2d:7d:40:c0 STALE
  • Ich weiß, UFW liefert da ja auch paar Regeln mit in der /etc/ufw/before6.rules


    Code
    # ok icmp codes
    -A ufw6-before-input -p icmpv6 --icmpv6-type echo-request -j ACCEPT


    Ich kenne zwar UFW nur insoweit, dass ich mich wegen zu geringer Flexibilität gegen dessen Einsatz entschied. Aber das sieht doch sehr nach ping aus.


    Bist Du sicher, dass überhaupt noch IPv6-Pakete raus gehen?

  • Code
    # z.B. IPv6 bei irgendwas erzwingen:
    wget -O /dev/null -6 https://fnx.li/


    Das Ziel sollte natürlich IPv6 unterstützen, sonst wird das logischerweise nichts! :D


    Ich kann mir aber nicht vorstellen, dass das klappt. ICMPv6 ist für jegliche IP-Kommunikation erforderlich, es wird ja kaum nur am Ping scheitern.



    MfG Christian

  • Lustigerweise klappt das jetzt. Ping auf die Adresse klappt auch. Weird stuff - habe nichts geändert an der Konfiguration.


    Vielleicht kann mir noch wer mit dem weiteren Problemchen helfen: ich habe meinem OpenVPN mein /64 IPv6 Netz zugewiesen und der Teilt auch brav meinen Clients jetzt ne IP mit. Leider komme ich mit der IPv6 allerdings noch nicht ins Internet. Bei IPv4 habe ich ja in der Datei /etc/ufw/before.rules ganz oben folgendes eingefügt:

    Code
    *nat
    :POSTROUTING ACCEPT [0:0]
    #Allow traffic from openvpn to eth0
    -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
    COMMIT


    Und in der /etc/sysctl.conf folgendes gemacht:

    Code
    net.ipv4.ip_forward=1
    net.ipv6.conf.all.forwarding=1


    Mein Server hat die IPv6 XXXX:XXXX::1/64, der Client XXXX:XXXX::1002/64. Was muss ich jetzt machen, damit der Client ins Netz kommt? Unter IPv6 gibts ja eigentlich kein Nat (SNAT?) und somit müsste ich auch nen network interface für die ::1002 anlegen oder wie?
    Hat wer eine Idee? ?(


    Danke!

  • Ich vermute einmal, dass Du ndp_proxy oder ndppd einrichten musst. Das standardmäßig enthaltene Subnetz ist nicht geroutet, Dein Server muss also auf die Suchanfragen vom Router reagieren.


    Verifizieren kannst Du meine Vermutung mit nachfolgendem Befehl:

    Code
    tcpdump -n -l -i eth0 -v icmp6


    Dann ruf am Client mit der IPv6-Adresse einmal ping6 o.ä. auf. Sollten nur lauter Neighbor Solicitations für die Client-IP auftauchen, aber keine Neighbor Advertisements, liege ich richtig.



    MfG Christian

  • Hast recht.

    Code
    22:56:53.075109 IP6 (flowlabel 0x3e0d4, hlim 63, next-header ICMPv6 (58) payload length: 64) XXXX:4000:6:b026::1002 > 2a00:1450:4001:812::200e: [icmp6 sum ok] ICMP6, echo request, seq 9
    22:56:53.257317 IP6 (class 0xc0, hlim 255, next-header ICMPv6 (58) payload length: 32) fe80::1 > ff02::1:ff00:1002: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has XXXX:4000:6:b026::1002
    	  source link-address option (1), length 8 (1): <MAC>
    22:56:53.257472 IP6 (class 0xc0, hlim 255, next-header ICMPv6 (58) payload length: 32) fe80::1 > ff02::1:ff00:0: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has XXXX:4000:6:b123::
    	  source link-address option (1), length 8 (1): <MAC>
    22:56:54.075351 IP6 (flowlabel 0x3e0d4, hlim 63, next-header ICMPv6 (58) payload length: 64) XXXX:4000:6:b026::1002 > 2a00:1450:4001:812::200e: [icmp6 sum ok] ICMP6, echo request, seq 10
    22:56:54.257003 IP6 (class 0xc0, hlim 255, next-header ICMPv6 (58) payload length: 32) fe80::1 > ff02::1:ff00:0: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has XXXX:4000:6:b123::
    	  source link-address option (1), length 8 (1): <MAC>


    Reicht es bei ndppd ein einfaches: git pull -> make -> make install? Oder muss ich da noch was confen?


    Edith: hab auch folgenden Artikel auf SO gefunden: Routing public ipv6 traffic through openvpn tunnel - Unix & Linux Stack Exchange
    Fehlt eigentlich nur die Route? Die kann ich ja pushen lassen. Bzw. mache ich das ja bereits - liegt da der Fehler?. Abschnitt aus der openvpn server.conf:

    Code
    #IPv6
    server-ipv6 XXXX:4000:6:b026::/64
    tun-ipv6
    push tun-ipv6
    push "route-ipv6 XXXX:4000:6:b027::/64"
  • Nein, weil Du das dem netcup Router beibringen müsstest. Und der wird nicht auf Dich hören, solange Du keine NDP-Antworten zurückschickst! :) Bei zusätzlich gebuchten /64-Subnetzen besteht dieses Problem übrigens nicht, die sind nämlich geroutet und landen sowieso immer in Deiner VM.


    ndppd habe ich kürzlich für Debian 8 kompiliert, das gibt es sonst nämlich erst ab Debian 9 in den Repos. Bei Interesse bitte PN, dann schicke ich eine ausführlichere Anleitung zum Einbinden.


    Bei OpenVPN könntest Du alternativ auch ein Script nutzen, das entsprechende ndp_proxy-Regeln erstellt. In Deinem Link findest Du mehr Informationen: Routing public ipv6 traffic through openvpn tunnel - Unix & Linux Stack Exchange (Short answer ODER Dynamic NDP proxy with OpenVPN hooks)



    MfG Christian

  • Hey,


    also ich hab die short & dynamic Dinger ausprobiert, plus dann noch ndppd mit folgender Conf aufgesetzt:


    Code
    route-ttl 30000
    proxy eth0 {
       router yes
       timeout 500
       ttl 30000
       rule 2a03:4000:6:b026::/64 {
          auto
       }
    }


    Hat leider alles nicht gefruchtet. Habe auch npd6 ausprobiert. Nope. Weder Ping, noch erkennt wieistmeineip.de die IPv6 Adresse. Irgendwo hängt es da noch, muss ich irgendwas an der Firewall freigeben? Ich bin echt irgendwie nen DAU - zumindest komme ich mir so vor bei IPv6

  • Probier mal static statt auto. Wenn das auch nicht klappt, bin ich überfragt. Dann könntest Du es zum Test noch manuell je IP mit dem "ip neigh" Befehl versuchen, wie im vorherigen Link erklärt.


    IP-Forwarding hast Du für IPv6 ja schon aktiviert, oder?

    Code
    sysctl sys.net.ipv6.conf.all.forwarding=1


    Eventuell möchtest Du die (IPv6) Firewall zum Test einmal deaktivieren?



    MfG Christian

  • Das ist jetzt echt peinlich, aber ich hab endlich rausgefunden was falsch war:

    • Ich hatte lokal einen zweiten router mit eigenem DHCP gehabt, welcher allerdings kein IPv6 gesprochen hat. Zum testen mal rausgenommen
    • Ich hatte zuerst das gesamte ipv6/64 Netz als server-ip und route genommen, das klappt allerdings nicht, weil man dann ja auch als route die server-ip schickt. Also aufteilen auf zwei /65 Netze
    • Leider klappte es dann immer noch nicht, allerdings nach anwerfen des ndppd daemons, klappte auch die IPv6 Verbindung in die Welt


    Vielen Dank für die Hilfe! :thumbup: