Forum Linux.général Free, IPv6, brouting et ip6tables

Posté par .
Tags :
1
1
nov.
2010
Bonsoir à tous,

En ce lundi férié je me suis dit pourquoi ne pas enfin utiliser IPv6 comme le permet Free. J'utilise un routeur sous TomatoUSB derrière ma Freebox.
Quelques recherches plus tard je me tourne vers la solution donné ici : http://vibe.ipv6.free.fr/ . Juste une petite adaptation à faire :
brctl addif br0 vlan2
ebtables -t broute -A BROUTING -i vlan2 -p ! 0x86DD -j DROP


Jusque là pas de problème, mes ordis reçoivent une adresse IPv6. C'est après que ca se gatte. Je décide de configurer ip6tables sur mon routeur, mais iptables n'est pas mon ami. Je commence avec un
ip6tables -F
ip6tables -P INPUT DROP
ip6tables -P OUTPUT DROP
ip6tables -P FORWARD DROP

Du coup je ne devrais plus pouvoir accéder à quoique ce soit en IPv6. Sauf que ca ne marche pas.
Clairement j'ai dois louper quelque chose évident mais je ne sais pas quoi. Si vous pouviez m'éclairer.

Par avance merci.
  • # Autres tables ?

    Posté par . Évalué à 5.

    Ton -F efface la table "classique" mais pas la table de mangling (et je pense pas qu'il y ait de table de NAT ; je peux pas vérifier, là). Bon, c'est une hypothèse assez peu probable, mais c'est le premier truc auquel j'ai pensé.

    Après, il nous faudrait plus d'infos : les adresses des bécanes, des réseaux, etc, au moins.
    • [^] # Re: Autres tables ?

      Posté par . Évalué à 1.

      Merci de ta réponse.
      Il s'agit d'une install de TomatoUSB pratiquement par défaut. Les ordis ont une IPv4 fixe dans la plage 192.168.0.0/24.
      # ifconfig
      br0 Link encap:Ethernet HWaddr 00:26:F2:CD:C1:72
      inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:6038068 errors:0 dropped:0 overruns:0 frame:0
      TX packets:6821991 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:2664192486 (2.4 GiB) TX bytes:4104045756 (3.8 GiB)

      eth0 Link encap:Ethernet HWaddr 00:26:F2:CD:C1:72
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:13530191 errors:2 dropped:0 overruns:0 frame:1
      TX packets:12640579 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:3980967023 (3.7 GiB) TX bytes:1943372004 (1.8 GiB)
      Interrupt:4 Base address:0x2000

      eth1 Link encap:Ethernet HWaddr 00:26:F2:CD:C1:74
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:682668 errors:0 dropped:0 overruns:0 frame:393642
      TX packets:1529195 errors:125 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:84492991 (80.5 MiB) TX bytes:2060749170 (1.9 GiB)
      Interrupt:3 Base address:0x1000

      lo Link encap:Local Loopback
      inet addr:127.0.0.1 Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING MULTICAST MTU:16436 Metric:1
      RX packets:210 errors:0 dropped:0 overruns:0 frame:0
      TX packets:210 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:33444 (32.6 KiB) TX bytes:33444 (32.6 KiB)

      vlan1 Link encap:Ethernet HWaddr 00:26:F2:CD:C1:72
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:6552981 errors:0 dropped:0 overruns:0 frame:0
      TX packets:6469886 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:3963420224 (3.6 GiB) TX bytes:3365438567 (3.1 GiB)

      vlan2 Link encap:Ethernet HWaddr 00:26:F2:CD:C1:73
      inet addr:78.240.XXX.XXX Bcast:78.240.XXX.XXX Mask:255.255.255.0
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:6977210 errors:0 dropped:0 overruns:0 frame:0
      TX packets:6170693 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:4068970657 (3.7 GiB) TX bytes:2872900733 (2.6 GiB)


      Pour ce qui est de ip6tables :
      # ip6tables -L
      Chain INPUT (policy DROP)
      target prot opt source destination

      Chain FORWARD (policy DROP)
      target prot opt source destination

      Chain OUTPUT (policy DROP)
      target prot opt source destination
      • [^] # Re: Autres tables ?

        Posté par . Évalué à 1.

        Pendant que j'y suis :
        # ip6tables -t mangle -L
        Chain PREROUTING (policy ACCEPT)
        target prot opt source destination

        Chain INPUT (policy ACCEPT)
        target prot opt source destination

        Chain FORWARD (policy ACCEPT)
        target prot opt source destination

        Chain OUTPUT (policy ACCEPT)
        target prot opt source destination

        Chain POSTROUTING (policy ACCEPT)
        target prot opt source destination
      • [^] # Re: Autres tables ?

        Posté par . Évalué à 4.

        Bon, ton ifconfig n'indique aucune adresse IPv6 (sauf lo, mais bon), donc je me dis que tu n'as vraiment pas _du tout_ configuré l'IPv6, c'est ça ?

        Et puis après j'ai réfléchi à ta manip : tu ajoutes vlan2 (qui doit être l'interface côté freebox je suppose, mais on manque d'infos, là) au bridge qui, je suppose encore, doit déjà contenir ton réseau local ? Et bien c'est normal que ça marche alors ! (je suis allé étudier tes liens, mais je ne connaissais pas la manip ; vu que ce n'est pas "standard" ça aurait été pas mal de la rappeler ...) Tout se passe au niveau 2 au niveau de ton routeur (qui n'est alors en réalité qu'un switch/bridge pour l'IPv6) et tu ne peux rien controller avec ip6tables, qui manipule les paquets au niveau 3. Ou alors utiliser un truc comme eb6tables, si ça existe. Enfin bon, quel bordel...

        Enfin, si ce que tu veux faire c'est vraiment du routage, il faut faire des sous-réseaux, mais vu que Free ne t'en offre qu'un, t'es baisé pour faire ça proprement. Vive les déploiements pourris d'IPv6 !
        • [^] # Re: Autres tables ?

          Posté par . Évalué à 3.

          non tu peux faire un "sous réseau".
          Le problème de la freebox, de mémoire, c'est juste qu'elle redirige les paquets ipv6 que si elle a vu une demande sur son sous réseau.

          Pour que ca fonctionne donc avec un routeur/firewall au milieu, il faut donc "proxyfier" ces demandes :
          si j'en crois ce lien
          http://www.ipsidixit.net/2010/03/24/239/
          ou encore
          http://linux-attitude.fr/post/proxy-ndp-ipv6
          Par contre ca semble demander de faire une règle par client, et donc c'est mort pour les adresses ipv6 temporaires...
          • [^] # Re: Autres tables ?

            Posté par . Évalué à 2.

            Le problème de la freebox, de mémoire, c'est juste qu'elle redirige les paquets ipv6 que si elle a vu une demande sur son sous réseau.

            Au début j'ai pas compris cette phrase. En lisant le deuxième lien, je crois avoir compris : la freebox ne route aucun sous-réseau, ils sont directs indiqués comme accessibles depuis son interface "locale". Donc elle fait tout de suite des requêtes de neighbour discovery dessus, et donc il faut proxyfier ces requêtes vers le sous réseau en question pour que ça marche.

            Par contre ca semble demander de faire une règle par client, et donc c'est mort pour les adresses ipv6 temporaires...

            Oui enfin t'es gentil, moi je dirais que ça limite beaucoup les choses en général. Encore une fois, je confirme, Free propose une routage complètement pourri pour l'IPv6. C'est pas comme ça en forçant les gens à bidouiller à mort qu'on développera ce protocole.
            • [^] # Re: Autres tables ?

              Posté par . Évalué à 2.

              routage qui marche 365 jour par an, lui :) (private joke)
          • [^] # Re: Autres tables ?

            Posté par . Évalué à 2.

            Navré de ma réponse tardive.
            En effet, pour faire les choses proprement c'est mort. Pour le coup du proxy NDP l'idée est bonne mais ca m'oblige à rajouter à la main chaque nouvelle machine et je suis un peu fainéant sur les bords. Si l'un de vous voie une solution je suis preneur.

            Pour ceux que ca intéresse deux exemples appliqués à des cas similaires au mien : [http://en.gentoo-wiki.com/wiki/IPV6_And_Freebox], plus récent et plus "propre" mais indispo en ce moment (encore dans le cache de Google) : http://cv.arpalert.org/page.sh?freeipv6
          • [^] # Re: Autres tables ?

            Posté par . Évalué à 2.

            Bon en continuant mes recherches je me suis demandé si on ne pouvait pas monter directement le tunnel 6rd à la place de la Freebox. Visiblement, c'est possible une personne y est arrivée sur HFR : http://forum.hardware.fr/hfr/reseauxpersosoho/Reseaux/routeu(...)
            J'ai donc tenté la même chose sur mon routeur tournant toujours sous TomatoUSB en m'inspirant à la fois fortement de ca et du wiki de DDWRT [http://www.dd-wrt.com/wiki/index.php/IPv6#6rd]. Ca marche à moitié dirons nous.
            Voici ce que j'ai fait :
            Je rappelle que vlan2 est mon interface WAN et br0 mon interface LAN.

            Première chose chargement du module sit et activation de l'IPv6 depuis la partie init de la catégorie scripts de l'administration :
            modprobe sit
            echo 0 > /proc/sys/net/ipv6/conf/default/disable_ipv6
            echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

            Ensuite connexion SSH au routeur pour commencer les choses sérieuses :
            ip tunnel add tun6rd mode sit ttl 255 remote any local 78.240.XXX.XXX
            ip link set tun6rd up
            ip addr add 2a01:e3X:XXXX:XXX0::1/128 dev tun6rd
            ip addr add 2a01:e3X:XXXX:XXX0::1/64 dev br0
            ip -6 route add default via ::192.88.99.102 dev tun6rd
            echo "interface br0 {IgnoreIfMissing off;AdvSendAdvert on;UnicastOnly off;AdvManagedFlag off;AdvOtherConfigFlag off;AdvLinkMTU 1480;prefix 2a01:e3X:XXXX:XXX0::/64 {AdvOnLink on;AdvAutonomous on;AdvValidLifetime 86400;AdvPreferredLifetime 86400;};RDNSS 2a01:e00::2 {};};" > /tmp/etc/radvd.conf
            radvd -C /tmp/etc/radvd.conf

            Note : 78.240.XXX.XXX est mon l'IP reçu sur l'interface WAN, 2a01:e3X:XXXX:XXX0:: est mon préfixe IPv6. Quant à 192.88.99.102 c'est l'IP de l'une des passerelles 6rd de Free (voir le post sur HFR), 2a01:e00::2 est l'un des DNS IPv6 de Free.

            Là je regarde sur l'un de mes ordis, j'ai bien reçu une IPv6. Moment de joie éphémère. Je lance un ping vers ipv6.google.com, les paquets partent bien mais aucune réponse :
            $ ping6 ipv6.google.com
            PING ipv6.google.com(2a00:1450:8007::63) 56 data bytes
            ^C
            --- ipv6.google.com ping statistics ---
            3 packets transmitted, 0 received, 100% packet loss, time 2007ms


            Au même moment j'ai lancé tcpdump sur l'interface tun6rd sur le routeur :
            # ./tcpdump -ni tun6rd
            tcpdump: WARNING: can't create rx ring on packet socket 3: 99-Protocol not available
            tcpdump: WARNING: tun6rd: no IPv4 address assigned
            tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
            listening on tun6rd, link-type RAW (Raw IP), capture size 96 bytes
            21:51:29.603860 IP6 2a01:e3X:XXXX:XXX0:2XX:XXX:fef0:XXXX > 2a00:1450:8007::63: ICMP6, echo request, seq 1, length 64
            21:51:30.611578 IP6 2a01:e3X:XXXX:XXX0:2XX:XXX:fef0:XXXX > 2a00:1450:8007::63: ICMP6, echo request, seq 2, length 64
            21:51:31.611998 IP6 2a01:e3X:XXXX:XXX0:2XX:XXX:fef0:XXXX > 2a00:1450:8007::63: ICMP6, echo request, seq 3, length 64

            3 packets captured
            3 packets received by filter
            0 packets dropped by kernel


            J'avouerais que du coup je suis un peu à court d'idée. Si vous voyez quelque chose je suis preneur.
            • [^] # Re: Autres tables ?

              Posté par . Évalué à 3.

              Bon en continuant mes recherches je me suis demandé si on ne pouvait pas monter directement le tunnel 6rd à la place de la Freebox.

              Ah, plutôt pas mal comme idée, je ne savais pas que c'était faisable.

              2a01:e00::2 est l'un des DNS IPv6 de Free

              Note : tu n'es pas obligé d'utiliser les DNS en v6 pour avoir de l'IPv6 ; c'est un plus, mais j'essaierais d'abord de voir si l'IPv6 marche tout court avant de tester les DNS en v6.

              Là je regarde sur l'un de mes ordis, j'ai bien reçu une IPv6. Moment de joie éphémère.

              Oui, éphémère : ça veut juste dire que radvd fonctionne, que tu as bien reçu un RA de ton routeur, mais ça ne dit absolument rien sur le bon fonctionnement du routage derrière. C'est un peu comme quand t'as réussi à avoir une réponse d'un DHCP en v4 : c'est un début, mais tu n'es peut-être pas encore du tout relié à quoi que ce soit derrière…

              Au même moment j'ai lancé tcpdump sur l'interface tun6rd sur le routeur :
              […]
              listening on tun6rd, link-type RAW (Raw IP), capture size 96 bytes
              21:51:29.603860 IP6 2a01:e3X:XXXX:XXX0:2XX:XXX:fef0:XXXX > 2a00:1450:8007::63: ICMP6, echo request, seq 1, length 64
              21:51:30.611578 IP6 2a01:e3X:XXXX:XXX0:2XX:XXX:fef0:XXXX > 2a00:1450:8007::63: ICMP6, echo request, seq 2, length 64
              21:51:31.611998 IP6 2a01:e3X:XXXX:XXX0:2XX:XXX:fef0:XXXX > 2a00:1450:8007::63: ICMP6, echo request, seq 3, length 64


              Bon, donc tes paquets partent bien vers le tunnel, c'est un bon début.

              Bon, revoyons la source de ton script, je suppose http://forum.hardware.fr/hfr/OSAlternatifs/reseaux-securite/(...)

              D'abord, il précise le préfixe utilisé pour ce 6rd, alors que tu ne le fais pas :
              ip tunnel 6rd dev ${SITIF} 6rd-prefix ${RDPFIX}

              Je pense que c'est peut-être la source de tes problèmes. Pour mieux le diagnostiquer, tu pourrais sniffer ce qu'il se passe sur l'interface réelle ? (en v4 donc, mais tcpdump explicitera peut-être le v6 encapsulé dedans…)

              Par contre, il y à un truc louche dans son script : il met la même IP sur l'interface sit et l'interface locale… Pas bon du tout ! Je ne connais pas bien 6rd, mais je suppose que l'adresse link-locale déjà attribuée pour le tunnel suffit à communiquer la passerelle v6. Donc enlève ton :
              ip addr add 2a01:e3X:XXXX:XXX0::1/128 dev tun6rd
              et ça devrait marcher quand même.
              • [^] # Re: Autres tables ?

                Posté par . Évalué à 1.

                Oui le moment de joie était bien éphémère, j'ai tout de même eu la joie de voir qu'une partie de la config fonctionnait.

                C'est normal que ca ne fonctionne pas. C'est d'ailleurs la première chose que j'aurais du vérifier. Avec Tomato je n'ai pas le support de 6rd, voici ce que je me renvoie ip tunnel help
                Usage: ip tunnel { add | change | del | show } [ NAME ]
                [ mode { ipip | gre | sit } ] [ remote ADDR ] [ local ADDR ]
                [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]
                [ ttl TTL ] [ tos TOS ] [ [no]pmtudisc ] [ dev PHYS_DEV ]


                Visiblement OpenWRT le supporte dans Backfire mais mon routeur n'est pas encore complètement supporté.
                A tout hasard je vais faire une request, Comcast l'utilisant aussi ca peut intéresser du monde.
                • [^] # Re: Autres tables ?

                  Posté par . Évalué à 2.

                  Avec Tomato je n'ai pas le support de 6rd

                  Ah, dommage.

                  Visiblement OpenWRT le supporte dans Backfire mais mon routeur n'est pas encore complètement supporté.

                  Ah bah là faut blâmer les gros cons de chez DD-wrt avec leurs bouts de proprio et leur non contribution upstream à openwrt. C'est vrai que c'est très con que ton routeur marche avec un dérivé proprio mais pas l'original libre…
                  • [^] # Re: Autres tables ?

                    Posté par . Évalué à 1.

                    Ouaip.
                    Bon malgré tout j'ai jeté un coup d’œil sur leur tracker et la mailing list, visiblement ca aurait avancé. Je vais me faire une petite compil et essayer ça le week end prochain si j'ai le temps.
                    Ma request sur le forum de TomatoUSB n'a pas particulièrement déclenché les foules : [http://tomatousb.org/forum/t-284303/add-6rd-support]. Bon faut dire que le projet Tomato est un peu forké de partout, c'est compliqué de voir qui fait quoi.
                    Je tient au courant via ce sujet ou par un journal si ca j'arrive à quelque chose. Ca peut probablement intéresser d'autres personnes.
                    • [^] # Re: Autres tables ?

                      Posté par . Évalué à 2.

                      Je vais me faire une petite compil et essayer ça le week end prochain si j'ai le temps.

                      Prévois un peu de temps pour la compil, la première fois, quand il faut compiler la toolchain et tout le reste ça prend un peu de temps (plus les téléchargements). Genre quelques heures.

                      Bon faut dire que le projet Tomato est un peu forké de partout, c'est compliqué de voir qui fait quoi.

                      C'est pour ça que j'aime bien OpenWRT : c'est l'original et là où sont les développeurs « importants ».

                      Je tient au courant via ce sujet ou par un journal si ca j'arrive à quelque chose. Ca peut probablement intéresser d'autres personnes.

                      Si ça marche je pense que ça peut intéresser du monde, donc un journal effectivement c'est une bonne idée.

                      Au fait, c'est quoi ton routeur ?
                      • [^] # Re: Autres tables ?

                        Posté par . Évalué à 1.

                        Ouaip. C'est pas un problème. Je suis pas spécialement pressé.


                        Pour mon routeur c'est un Netgear WNR3500L. J'en suis plutôt satisfait.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.