Cohabitation client OVPN et serveur web

Tags: #<Tag:0x00007f63fa55b788> #<Tag:0x00007f63fa55b5f8> #<Tag:0x00007f63fa55b2d8> #<Tag:0x00007f63fa55afb8> #<Tag:0x00007f63fa55add8>

Bonjour à tous.

Voilà plusieurs jours que je penche sur le sujet et impossible de trouver la solution.

Je dispose d’un Raspberry Pi qui fait à la fois office de hotspot wifi et de serveur web.
Le serveur web doit être accessible de l’extérieur et en local.

Openvpn est installé sur le raspberry. Il a pour vocation d’anonymiser le trafic des machines connectées en wifi au raspberry à travers wlan0 → tun0.
Dans le but recherché, le fait qu’eth0 soit anonymisé par le vpn ou non n’a pas d’importance.

Lorsque ovpn est lancé.
Les clients machines connectées au raspberry sont bien anonymisée (wlan0 → tun0).
Les clients machines connectées au raspberry arrive bien à se connecter en local au serveur web (ip du raspberry sur wlan0).
Par contre, dès que ovpn est lancé, le serveur web n’est plus joignable de l’extérieur; pas de ping possible non plus.

Mes recherches sur le forum et sur le web se sont révélées infructueuses.
Par avance merci.

Peux-tu donner plus d’informations réseau concernant le montage et le fonctionnement de ton VPN, règles iptables, routes, etc …

Et pourtant, il y a eu une discussion à ce sujet assez récemment.
Routage avancé.

Un grand merci pour votre réactivité déjà

Pour iptables, voilà ce qui est fait au lancement du script:

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Le fichier de config .ovpn est de cette forme:

client
dev tun0
reneg-sec 0
persist-tun
persist-key
ping 5
ping-exit 30
nobind
comp-lzo no
remote-random
remote-cert-tls server
auth-nocache
route-metric 1
cipher AES-256-CBC
auth sha512

Un route donne (où x.x.x.x est la passerelle):

Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
0.0.0.0         10.200.0.37     128.0.0.0       UG    0      0        0 tun0
default         x.x.x.x         0.0.0.0         UG    202    0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     303    0        0 wlan0
10.200.0.1      10.200.0.37     255.255.255.255 UGH   1      0        0 tun0
10.200.0.37     0.0.0.0         255.255.255.255 UH    0      0        0 tun0
92.0.0.0        0.0.0.0         255.0.0.0       U     202    0        0 eth0
128.0.0.0       10.200.0.37     128.0.0.0       UG    0      0        0 tun0
ns3076844.ip-14 x.x.x.x         255.255.255.255 UGH   0      0        0 eth0

Enfin ifconfig donne (où y.y.y.y est l’IP eth0)

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet y.y.y.y  netmask 255.0.0.0  broadcast 92.255.255.255

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0

tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.200.0.38  netmask 255.255.255.255  destination 10.200.0.37

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.1  netmask 255.255.255.0  broadcast 10.0.0.255

Je regarde également ce que PascalHambourg m’a indiqué mais jusque là sans succès.

Est ce que tu a regardé si un port ne se ferme pas avec la commande

netstat -paunt

après je n’y connais pas grand chose

En fait, tout le trafic entrant semble redirigé vers tun0.
Le ping, le ssh, le serveur web par exemple deviennent inaccessible de l’extérieur dès le lancement d’openvpn

Un VPN n’anonymise rien du tout, ce n’est pas sa fonction

Merci pour la précision, je tentais de simplifier pour que l’on comprenne mieux mais ce n’était peut être pas opportun.
En tout cas, ce commentaire ne fais pas avancer le sujet :slight_smile:

ta passerelle devrait etre une adresse interne, vu tes X.X.X.X on peut pas savoir
si c’est une IP publique dans ce cas ce n’est aps bon

Tu pouvais simplement dire que le VPN sert d’accès internet pour les machines en wifi.

@Zargos n’a pas besoin de faire avancer le sujet. J’ai proposé une piste, maintenant la balle est dans ton camp.

Qu’appelles-tu une « adresse interne » ?

Pourquoi ? Et quel rapport entre « publique » et « interne » ?

Mais si, on peut savoir: on voit 92.* plusieurs fois, il s’agit donc d’une adresse IP publique. Par contre le masque 255.0.0.0 associé me semble erroné, le bloc alloué au FAI par le RIPE étant 92.0.0.0 - 92.15.255.255.

une passerelle, c’est une IP par laquelle les machines vont envoyer leur traffic si elles ne savent pas où se trouve un réseau qui ne leur est pas connu (donc, i.e. tous les réseaux en dehors de celui dans lequel elles sont définie).

Une adresse IP interne, c’est une IP du réseau local. Une adresse externe c’est une IP externe au réseau local.

Ton, adresse externe 92… est effectivement avec un mauvais masque comme celà a été dit.

Donc la passerelle d’un réseau local est une machine obligatoirement dans le même réseau.

La machine qui reçoit le VPN renvoie vers le routeur qui lui envoie vers l’extérieur. et ce même routeur lui recoit les requetes externe sur son IP publique et les envoie vers le serveur Web.

Donc:
1- eth0 est donc l’interface publique celle qui est raccordée à internet.
2- wlan0 est donc l’interface interne celle qui est sur ton réseau local.

3- C’est donc wlan0 qui « porte » les passerelles nécessaires à te réseaux locaux (VPN ou autres).
4- c’est eth0 qui reçoit les requêtes externe (d’internet).
5- l’ip de serveur web est en local
6- il y a donc un forward de l’externe vers l’interne, via un nat
7- la passerelle du réseau VPN est l’adresse IP du réseau VPN vers le réseau local (porté par tun0 vers wlan0, à priori)

tun0 a pour destination 10.200.0.37. Qui porte cette IP?
D’où sort le réseau 128.0.0.0 qui n’est porté par aucun réseau?
Ta table de routage a des adresses réseau qui ne sont portés par aucune interface.
8- la passerelle du réseau local est l’adresse IP locale de wlan0
9 dans le routage il y a conflit entre les deux lignes:

Je m’arme de courage avant de répondre à tout ça…

Avant tout, le terme « passerelle » (« gateway ») est jugé trop vague et son usage dans ce contexte est déconseillé. Je ne sais plus quel RFC recommande d’utiliser le terme « routeur » à la place. Je vais donc appliquer cette recommandation.
Ensuite un routeur est une machine, pas une adresse IP. Une machine envoie du trafic à travers un routeur, pas à un routeur. La nuance est importante : l’adresse IP de destination des paquets n’est pas l’adresse du routeur. Techniquement, un routeur n’a même pas besoin d’avoir une adresse IP pour router.
Pour finir, les machines peuvent parfaitement savoir où se trouve le réseau de destination et qu’elles doivent passer par tel routeur pour l’atteindre.
Un routeur sert à joindre d’autres réseaux, c’est tout. Pas besoin de rajouter des hyptohèses.

Bien. Il te reste à définir ce qu’est le réseau local. Je suis sérieux.
Par exemple, est-ce que le segment ethernet qui relie mon routeur d’accès internet à mon modem ADSL (qui est un simple pont, pas un routeur) fait partie du réseau local ?

Ce n’est pas « mon » adresse. Quant à dire si elle est externe, cela va dépendre de ta définition du réseau local.

C’est une évidence. Où veux-tu en venir, quel rapport avec l’adresse IP publique en 92.* ? J’ai l’impression qu’on s’égare.

La formulation de cette phrase est ambiguë. De quelle machine parles-tu et qu’entends-tu par « reçoit le VPN » ? Ce sujet concerne une machine qui est client VPN.
Elle renvoie quoi vers le routeur ? Quel routeur ?
Ce routeur lui renvoie ce qu’elle lui a envoyé vers l’extérieur ? Ça ne veut rien dire !

Cette phrase ne veut rien dire.

Je ne comprends pas cette phrase.

D’où sors-tu cela ? Le serveur web est sur la machine qui a l’adresse IP publique, il n’y a aucun besoin de forward ni de NAT.

Cette phrase ne veut strictement rien dire.

Probablement l’interface tun du serveur openvpn à l’autre bout du VPN. Aucune importance de toute façon, c’est un tunnel routé, on peut mettre ce qu’on veut (voire rien) comme adresse. La seule chose qui compte, ce sont les routes.

D’openvpn. Je te donne un indice :

Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
0.0.0.0         10.200.0.37     128.0.0.0       UG    0      0        0 tun0
128.0.0.0       10.200.0.37     128.0.0.0       UG    0      0        0 tun0
default         x.x.x.x         0.0.0.0         UG    202    0        0 eth0

Si on concatène les deux routes /1, qu’est-ce qu’on obtient ? Et quelle est la différence avec une route 0/0 unique ?

Evidemment puisque par définition cette table de routage contient des destinations extérieures à la machine.

Non, elles n’ont pas le même masque. Et même si elles avaient le même masque, elles n’ont pas la même métrique.

oui il est vrai que tu te comprends bien mais tu as du mal avec les autres. Question d’effort peut etre.