VPN et passerelle internet

Bonjour tout le monde,

J’ai un problème et je crois que je n’arriverai pas à m’en sortir sans votre aide.

Je tente de mettre en place un vpn afin d’acceder au net… mais la ou ca se complique c’est au niveau du routage…

Poste 1 >>>>>>

Poste 2 >>>>>> SWITCH >>>> ETH1 < SERVER > ETH0 >>>> LIVEBOX

Poste 3 >>>>>>

Pas de dhcp configurer pour le moment les postes 1 2 et 3 sont en ip fixe de type : 192.168.2.X

ETH1 : 192.168.2.1
ETH0 : 192.168.1.2
Livebox : 192.168.1.1

Je me connect donc à un vpn par l’intermediaire de la livebox via eth0
J’utilise pptp-linux
Je me retrouve donc avec l’interface ppp0 (le vpn) (via la commande pon tunnel0)
le forwarding d’ip fonctionne parfaitement et j’accède à internet par l’intermediaire de eth0 mais pas par le vpn (ppp0)

Je souhaiterai acceder au net via mon vpn (ppp0) depuis tt mes postes… via l’interface eth1

La ou tout ce complique, c’est au niveau du vpn, l’adresse fourni par le vpn n’est pas fixe.

J’ai tenter brctl pour faire un pont entre eth1 et ppp0 malheuruesement ca ne fonctionne pas

J’ai fait plusieurs tentative avec iptables, ip route… mais rien à faire :frowning:

Je me tourne donc vers vous pour me libérer de mes cauchemars :smiley:

Ps1: je suis sous debian lenny (5.02,i386)

Ps2 : si besoin de plus d’information je suis à votre disposition :slightly_smiling: je n’exprime peut être pas bien mon besoin.

Merci d’avance :smt006

Edit quelques infos supplémentaires :

Ma configuration vpn :

pty "pptp vpn.example.fr --nolaunchpppd"
name vpntest
remotename PPTP
require-mppe-128
file /etc/ppp/options.pptp
ipparam example

ifconfig :

ppp0      Link encap:Protocole Point-Ã -Point
          inet adr:93.182.148.14  P-t-P:93.182.148.2  Masque:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1496  Metric:1
          RX packets:150 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:3
          RX bytes:11469 (11.2 KiB)  TX bytes:68 (68.0 B)

Ma configuration eth :

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        broadcast 192.168.1.255
        gateway 192.168.1.1

# The secondary network interface
allow-hotplug eth1
iface eth1 inet static
        address 192.168.2.1
        netmask 255.255.255.0
        broadcast 192.168.2.255

mon iptables qui est presque vide :

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

Le pontage ne fonctionne qu’avec des interfaces de type ethernet ou assimilé (wifi, tunnel TAP…) c’est-à-dire avec une sous-couche MAC, ce qui n’est pas le cas d’une interface PPP. Là il faut faire du routage, et je suppose que ton “serveur” (que j’appellerai désormais “routeur”) est dajà configuré en routeur (net.ipv4.ip_forward=1).

“acceder au net […] via l’interface eth1” n’a pas de sens car eth1 est côté LAN, pas côté internet.

Je vais décrire deux approches différentes selon ce que tu veux.

  1. Tout passe par le VPN même les communications du routeur, excepté avec le serveur de VPN bien sûr sinon ça va moins bien marcher forcément. Si le VPN n’est pas actif, aucune communication avec internet n’est possible hormis avec le serveur VPN.
  • supprimer la passerelle par défaut (gateway) / route par défaut via la livebox.
  • ajouter une route d’hôte vers l’adresse IP du serveur de VPN, par exemple dans le bloc de configuration d’eth0 dans /etc/network/interfaces à la place de l’option gateway :
post-up ip route add <ip_vpn.example.fr> via 192.168.1.1
# ou
post-up route add <ip_vpn.example.fr> gw 192.168.1.1
  • dans le fichier de configuration du VPN, ajouter l’option “defaultroute” afin qu’une route par défaut via ppp. soit créée automatiquement.
  1. Seules les communications des postes du LAN passent par le VPN. On utilise pour cela du routage avancé basé sur l’adresse source.
ip rule add from 192.168.2.0/24 lookup 100
ip route add 192.168.1.0/24 dev eth0 table 100
ip route add 192.168.2.0/24 dev eth1 table 100
ip route add default dev ppp0 table 100
  • La dernière route ne peut être créée que lorsque le VPN est actif. Cela peut être réalisé par un script placé dans /etc/ppp/ip-up.d/ dans lequel la variable $PPP_IFACE contient le nom de l’interface PPP et $PPP_IPPARAM contient la valeur de l’option ipparam du fichier d’options de pppd, ce qui permet de vérifier qu’il s’agit bien du VPN.
  • Pour que cela fonctionne il faut que net.ipv4.conf.ppp0.rp_filter=0 ou net.ipv4.conf.all.rp_filter=0. C’est la valeur par défaut sauf si /etc/sysctl.conf la modifie.

Quelle que soit l’approche retenue, pour que cela fonctionne il faut que tout le nécessaire soit en place du côté du serveur VPN pour router le trafic du VPN vers et depuis internet. Si le serveur VPN n’a pas de route de retour pour 192.168.2.0/24 via le VPN, alors il faut ajouter une règle iptables de masquerading sur ppp0.

En ce qui concerne ta première solution, c’est celle qui me conviendrai le mieux, mais j’ai peur que ca ne fonctionne pas à cause du fait que l’adresse du vpn est dynamique.

Je me connect par l’intermediaire d’un domaine vpn.sample.com (avec un login password) puis on m’attribue une adresse ip (dynamique)

Il va falloir changer la table de routage a chaque reconnexion si j’utilise ta solution.

Peut être que j’interprete mal ce que tu m’as proposé.

Je ne vois pas en quoi le fait que le VPN attribue une adresse variable est un problème. La route additionnelle concerne l’adresse du serveur VPN qui est bien fixe, elle ? Quant à la route par défaut, elle est créée automatiquement par l’option defaultroute de pppd à l’établissement du VPN.

Je comprend mieux :slightly_smiling: Merci, je test ca ce week end et je vous fait un petit retour :wink: