Forum Linux.embarqué OpenWRT -- Tunnel gretap <-> Open vSwitch

Posté par (page perso) . Licence CC by-sa
1
16
oct.
2013

Hello,

Je souhaite établir un tunnel GRE entre un routeur qui embarque OpenWRT (un build maison) et un serveur sous CentOS 6.4 utilisant Open vSwitch (1.9.3).

Côté serveur, j'ai créé le tunnel via les commandes suivantes :

# ovs-vsctl add-br br1
# ovs-vsctl add-port br1 gretap0 -- set interface gretap0 type=gre options:remote_ip=<ip_publique_ou_est_mon_routeur>

J'ai également ajouté un port local appartenant à ce bridge pour lui définir l'adresse IP à utiliser (192.168.10.1) pour ce tunnel. J'ai ouvert dans le pare-feu (géré par iptables) le protocole gre (47 numéraire) venant de l'ip publique de mon routeur.

Sur mon routeur, j'utilise une image maison d'OpenWRT (12.09) intégrant iproute (fournissant la commande ip link) et de ce fait le module ip_gre.

Je défini mon tunnel de la façon suivante :

# ip link add name gretap0 type gretap remote <ip_mon_serveur>
# ip link set gretap0 up
# brctl addbr br-vpn
# ifconfig br-vpn 192.168.10.2 up
# brctl addif br-vpn gretap0

J'ai également ouvert le protocol gre sur la zone wan du routeur.

J'ai lancé tcpdump des deux côtés du tunnel, via la commande suivante :

# tcpdump -ni any proto gre

Lorsque j'essaie de pinger mon routeur depuis le serveur, je reçois bien la requête ARP sur le routeur (visible dans tcpdump) mais je ne vois pas la réponse partir. J'ai alors changé la commande tcpdump sur le routeur, pour m'assurer que la réponse partait via l'interface gretap0 (ou br-vpn) ce qui est le cas. Par contre, je ne vois pas le paquet partir par eth1 (et donc ça n'arrive pas sur mon serveur).

Afin de faire des diagnostics un peu plus poussés, j'ai compilé l'image OpenWRT pour pouvoir l'utiliser dans une machine virtuelle KVM. J'ai donc reproduis mon environnement en virtualisé :
* un hyperviseur sous CentOS 6 qui utilise aussi Open vSwitch :
- adresse IP LAN : 192.168.1.15
- réseau principal pour les machines virtuelles : 192.168.4.0/24 (hyperviseur : 192.168.4.1)—vlan 20
- réseau secondaire pour simuler le lan derrière le routeur : 192.168.5.0/24—vlan 99
* mon routeur dans une machine virtuelle :
- pas d'adresse IP LAN
- adresse IP sur le réseau virtuel : 192.168.4.200 (sur le vlan 20 donc)
- adresse IP sur le réseau virtuel secondaire : 192.168.5.1 (vlan 99)

J'ai donc adapté la création de mes tunnels avec les données suivantes :
- tunnel entre mon hyperviseur (192.168.4.1) et mon routeur virtuel (192.168.4.100)

Ma première bonne surprise était de constater que le résultat était identique… ouf ! Je me suis donc posé la question suivante : est-ce le problème vient de la création d'un tunnel entre open vswitch et une gestion classique du réseau, ou est-ce un problème d'openwrt ? J'ai donc créé une autre machine virtuelle sous CentOS afin de remplacer la partie "openwrt", et là, miracle, tout fonctionne correctement…

Est-ce que quelqu'un a-t-il déjà réussi à utiliser les tunnels GRE sous OpenWRT et aurait une idée concernant mon problème ? Merci d'avance pour vos réponses ! :)

  • # finalement, c'était pas si compliqué...

    Posté par (page perso) . Évalué à 1.

    Hello,

    Je m'auto-réponds dans le cas où quelqu'un souhaiterait faire la même chose un jour…

    Finalement, j'ai compilé Open vSwitch dans l'image de mon routeur. Du coup, je crée un simple tunnel GRE entre deux bridges Open vSwitch et tout fonctionne parfaitement.

Suivre le flux des commentaires

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