Auteur Sujet: iproute ipv6: répondre avec la bonne adresse et non default  (Lu 5594 fois)

0 Membres et 1 Invité sur ce sujet

jeremyp3

  • Abonné Orange Fibre
  • *
  • Messages: 717
  • Pau (64)
iproute ipv6: répondre avec la bonne adresse et non default
« Réponse #12 le: 13 décembre 2020 à 02:04:27 »
ça donne ça:
ip route get 2001:41d0:1:xxxx::
2001:41d0:1:xxxx:: from :: via fe80::ce46:d6ff:feb2:c9f1 dev eth0  src 2001:bc8:xxxx:ed00::1  metric 0
    cache

mais ça pour le  coup ça me semble normal parce que je peux contacter cette ip depuis mon ipv6 online.

Jerem

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
iproute ipv6: répondre avec la bonne adresse et non default
« Réponse #13 le: 13 décembre 2020 à 02:29:37 »
et

ip -6 route show table local donne quoi.

ps: j'ai pas fait gaffe mais ton "ip rule" a 4 lignes de meme priorité. ce n'est pas reco du tout.


jeremyp3

  • Abonné Orange Fibre
  • *
  • Messages: 717
  • Pau (64)
iproute ipv6: répondre avec la bonne adresse et non default
« Réponse #14 le: 13 décembre 2020 à 02:35:11 »
ip -6 route show table local
local ::1 dev lo  proto none  metric 0
local 2001:678:984:xxxx::17 dev lo  proto none  metric 0
local 2001:678:984:xxxx::25 dev lo  proto none  metric 0
local 2001:bc8:xxxx:ed00::1 dev lo  proto none  metric 0
local 2a0e:b107:xxxx::1 dev lo  proto none  metric 0
anycast 2a0e:b107:xxxx:1000:: dev lo  proto none  metric 0
local 2a0e:b107:xxxx:1000::1 dev lo  proto none  metric 0
anycast 2a0e:b107:xxxx:1100:: dev lo  proto none  metric 0
local 2a0e:b107:xxxx:1100::1 dev lo  proto none  metric 0
anycast fe80:: dev lo  proto none  metric 0
anycast fe80:: dev lo  proto none  metric 0
anycast fe80:: dev lo  proto none  metric 0
local fe80::200:5efe:a3ac:2904 dev lo  proto none  metric 0
local fe80::200:5efe:a3ac:2904 dev lo  proto none  metric 0
local fe80::207:cbff:fe03:c47e dev lo  proto none  metric 0
ff00::/8 dev eth0  metric 256
ff00::/8 dev tun0  metric 256
ff00::/8 dev tun1  metric 256
ff00::/8 dev client-home  metric 256
ff00::/8 dev vpn-test  metric 256

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
iproute ipv6: répondre avec la bonne adresse et non default
« Réponse #15 le: 13 décembre 2020 à 02:47:49 »
ta regle "from 2a0e:b107:xxxx:1100::/56 lookup 222" qui enclenche la table 222 ne prend pas quand c'est le routeur lui-meme car le 'from' n'est pas matché.

c'est un peu la poule et l'oeuf...

on a:
2001:41d0:1:xxxx::/64 via 2001:678:984:xxx::16 dev tun0  src 2a0e:b107:xxxx::1  metric 1024
->la table 222 met src a 2a0e:b107:xxxx::1 quand on doit joindre "2001:41d0:1:xxxx::/64"

et pour activer cette table il faut:
que "from 2a0e:b107:xxxx:1100::/56 lookup 222" match.

mais le routeur n'utilise jamais 2a0e:b107:xxxx::1 comme adresse source sauf cas explicite (en réponse a un ping direct a cette adresse par exemple).
 
Il te faut donc modifier tes rules et tables en conséquence (en faisant gaffe ;))

jeremyp3

  • Abonné Orange Fibre
  • *
  • Messages: 717
  • Pau (64)
iproute ipv6: répondre avec la bonne adresse et non default
« Réponse #16 le: 13 décembre 2020 à 02:54:01 »
re,

je fais plutôt mes tests sur une ip du range 2a0e:b107:xxxx:1000::/56. est-ce que le problème est le même pour ce cas si ?

parce que j'avoue que là comme ça je vois pas le souci :) peux tu être un peu plus explicite en parlant de 2a0e:b107:xxxx:1000::/56 plutôt ? :)

merci

Jerem

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
iproute ipv6: répondre avec la bonne adresse et non default
« Réponse #17 le: 13 décembre 2020 à 03:07:04 »
qu'importe l'adresse , le serveur ne prend jamais l'adresse que tu as ajouté au loopback de lui-meme donc le 'from' de la regle ne match pas donc la table 222 n'est pas utilisé.


il te faut une regle avec 'to A iif loopback lookup 222' comme match pour corriger le probleme.


              iif NAME
                     select the incoming device to match. If the interface
                     is loopback, the rule only matches packets originating
                     from this host
. This means that you may create separate
                     routing tables for forwarded and local packets and,
                     hence, completely segregate them.


avec A la ou les ranges que donc tu veux voir ton ipv6 particulier lors des traceroute venant de A.


jeremyp3

  • Abonné Orange Fibre
  • *
  • Messages: 717
  • Pau (64)
iproute ipv6: répondre avec la bonne adresse et non default
« Réponse #18 le: 13 décembre 2020 à 04:39:58 »
bonjour,

effectivmeent, en faisant un truc comme ça ça fonctionne:
ip -6 rule add to 2001:41d0:1:xxxx::/64 iif lo table 222

sauf que du coup, 2001:41d0:1:xxxx:: ne peux plus contacter l'ip d'online en direct ...

ce n'est pas possible de faire le contraire ? en gros que si quelqu'un venant de n'importe où contact 2a0e:b107:390:1000::/56 ça soit la gw loopback qui réponde ? j'ai testé quelque trucs, mais je n'y suis pas arrivé :(

idéalement j'aimerai pouvoir utiliser ipv6 d'online pour les machines qui contact l'ipv6 d'online en direct, et la réponse du lloopback quand on contact une de mes ips de mon /56 sans que l'un est d'incidence sur l'autre ...

finalement  j'aurais du faire un lxc  ça aurait été moins compliqué :)

Jerem

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
iproute ipv6: répondre avec la bonne adresse et non default
« Réponse #19 le: 13 décembre 2020 à 21:38:08 »
oui en raffinant. Je regarderai cela demain ca m'intéresse aussi.

Apres dans l'absolu, pour les traceroute c'est a mon avis mieux d'afficher l'ip d'online car cela permet a un tiers de savoir que si y'a un souci de latence ou autre l'AS d'Online est concerné a un moment dans le trajet des paquets.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
iproute ipv6: répondre avec la bonne adresse et non default
« Réponse #20 le: 14 décembre 2020 à 18:45:32 »
En IPv4 on fait traditionnellement cela avec du SNAT qui change l'adresse source en fonction de regles.
En IPv6 la SNAT n'est pas dispo partout et pas forcement recommandé. Il vaut mieux rester sur un "route ... src".

Le plus simple (relativement) serait d'utiliser un marquage avec ip6tables et un "ip rule" avec fwmark (que tu as déja je crois).

Pour limiter les disfonctionnements il ne faut marquer que les paquets icmpv6 du traceroute donc ceux de Type 3 ('time-exceeded'):

en syntax ip6tables:
-p icmpv6 --icmpv6-type time-exceeded

completer la règle ip6tables a construire avec:
- quelle destination ou pas quelle destination (-d ou ! -d) voir quelle interface (-i ...).
- la chaine est OUTPUT (vu que c'est paquets ayant le serveur pour origine).
- la table est "mangle" (pour alterer/marquer des paquets avant le routage)
- la target est MARK (-j MARK)
- la valeur du marquage doit correspondre a la valeur du fwmark qu'on a mis dans l'ip rule. (--set-mark 1)

la base est donc:
ip6tables -t mangle -A OUTPUT -p icmpv6 --icmpv6-type time-exceeded -j MARK --set-mark 1
et rajouter destination

comme cela les traceroutes devrait répondre avec l'ip que tu souhaite (grace au "src" dans la table 222).

en gros que si quelqu'un venant de n'importe où contact 2a0e:b107:390:1000::/56 ça soit la gw loopback qui réponde ?

ca donnerai un truc du genre (pas testé):
ip6tables -t mangle -A OUTPUT -p icmpv6 --icmpv6-type time-exceeded ! -d 2a0e:b107:390:1000::/56 -j MARK --set-mark 1
si pas a destination de 2a0e:b107:390:1000::/56
si icmpv6 de type time-exceeded (ttl a 0)
si OUTPUT (process local au serveur)
alors mettre la marque 1 sur le paquet.

il faut ensuite exploité ce marquage dans le 'ip rule' avec fwmark

Mais attention faut que ta table 222 soit cohérente avec ce que tu veux faire donc avoir le bon 'src' la ou il faut.
Du coup c'est mieux peut-être d'avoir une table a part rien que pour ce marquage vu que 222 sert déja a autre chose.

c'est vite compliqué pour peu de gain quand meme. Du coup autant faire du SNAT IPv6 ou rien :)

edit: typos

et en 2020 faut peut-être faire avec nftables plutot.

jeremyp3

  • Abonné Orange Fibre
  • *
  • Messages: 717
  • Pau (64)
iproute ipv6: répondre avec la bonne adresse et non default
« Réponse #21 le: 14 décembre 2020 à 20:14:02 »
 
Mais attention faut que ta table 222 soit cohérente avec ce que tu veux faire donc avoir le bon 'src' la ou il faut.
peux tu développer cette partie ?

pour les test, j'ai dans ma table 222:
2001:41d0:1:xxxx::/64 via 2001:678:984:xxxx::16 dev tun0  src 2a0e
:b107:xxxx::1  metric 1024

maintenant quand je traceroute depuis 2001:41d0:1:xxxx:: à la place de l'ip online j'ai un "???" donc je suppose que aç fonctionne pas tout à fait :)

ah moins qu'il faut rajouter quelque chose dans la table 222 ou une autre table quelque chose en rapport avec l'interface lo, genre une ip route add default dev lo ?

Jerem

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
iproute ipv6: répondre avec la bonne adresse et non default
« Réponse #22 le: 14 décembre 2020 à 23:22:05 »
tu fais bien un "ip route flush cache" entre chaque test ?

peux tu développer cette partie ?

Juste que la table 222 sert déjà a autre chose du coup je ne suis pas certain qu'il soit bien de l'utiliser aussi pour cela.

le marquage ne sert que pour les paquets icmpv6 time-exceeded quand la destination n'est pas 2a0e:b107:390:1000::/56

Le marquage c'est la partie simple mais ensuite la partie 'route ... src' nettement moins car il faut le faire pour toute les routes ou tu veux que le changement ai lieu. Ca veut dire dupliquer des routes de la table par défaut et les mettre dans la nouvelle table.

Dans ton cas la route par défaut suffirait mais faut la dupliquer donc si elle dynamique c'est moins top:

résumé:
fait le ménage dans tes 'ip rule', une prio différente parr rule.

0: from all lookup local
10: from 2a0e:b107:xxxx:1100::/56 lookup 222
20: from 2a0e:b107:xxxx:1000::/56 iif vpn-test lookup 222
32766:  from all lookup main
32767:  from all lookup default
(si tu fais des 'ip rule add' ca devrait faire automatiquement mettre des nombres qui se suivent, en faisant les "ip rule add" dans le bon ordre)

table 223 (appelée "tracert" c'est plus simple que les nombres)

# creation table 223
echo -e "223\ttracert" >> /etc/iproute2/rt_tables
ip rule add fwmark 0x1 table tracert  # ca doit être après 10 & 20
# dupliquer la gw de la table main en ajoutant src et table
ip -6 route add default via fe80::xxxxxxx  src 2a0e:b107:xxxx::1 dev xxx table tracert

ca 'devrait' marcher... mais que pour les ip joinables par la route par défaut.

je te rejoins que c'est surement bien plus simple avec un container ou un lxd...

ou peut etre en utilisant des labels IPv6 ?

jeremyp3

  • Abonné Orange Fibre
  • *
  • Messages: 717
  • Pau (64)
iproute ipv6: répondre avec la bonne adresse et non default
« Réponse #23 le: 14 décembre 2020 à 23:44:33 »
tu fais bien un "ip route flush cache" entre chaque test ?
non, je touchais juste a ip6tables dans un premier temps

ip -6 route add default via fe80::xxxxxxx  src 2a0e:b107:xxxx::1 dev xxx table tracert
dans cette route là, pourquoi on ne met pas la gw d'online en src, puisqu'on fait appel a fe80 qui est sur eth0 et qui donc correspond à 2001:bc8:xxxx:xxxx::1 ?

dans mon cas, tout est statique.

Merci,

Jerem