Routage de tout le trafic via VPN sur Ubuntu Linux

13

Après avoir passé maintenant des heures à dépanner, à rechercher des solutions potentielles sur ce site et sur d'autres, et je me résigne à demander conseil à mes parieurs. Je travaille pour acheminer tout le trafic réseau sur une instance d'Ubuntu via un VPN Cisco dans une université. En utilisant le gestionnaire de réseau intégré ou vpnc, je peux établir avec succès une connexion au VPN et acheminer avec succès le trafic vers n'importe quelle adresse IP universitaire via le VPN. Cependant, en dehors de ces plages IP spécifiques, je n'arrive pas à évoquer une route qui mappera avec succès tout le trafic réseau sur le VPN.

Jusqu'à présent, j'ai tenté:

route add -net 0.0.0.0 gw homeportal dev tun0
route add -net 0.0.0.0 tun0
route add -net 0.0.0.0 gw 128.122.252.77 dev tun0
route add -net 0.0.0.0 gw 128.122.252.77 dev eth0
iptables -A AVANT -o tun0 -j ACCEPTER
iptables -A AVANT -i tun0 -j ACCEPTER
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Et beaucoup d'autres choses idiotes, inefficaces, dont je ne me souviens pas assez bien pour les transcrire avec précision.

De plus, j'ai essayé de router des plages d'adresses IP plus petites et des adresses IP spécifiques, chacune en vain. Je ne suis pas vraiment sûr de ce qui ne va pas, car l'étendue des effets que j'ai pu observer sont des échecs de résolution de noms et des échecs d'acheminement du trafic via le VPN. Qu'est-ce que je fais mal ici?

Éditer-

Voici la sortie ip route showaprès avoir démarré la connexion VPN avec VPNC:

par défaut via 192.168.1.254 dev eth0 proto static 
10.0.0.0/8 dev tun0 scope link 
91.230.41.0/24 dev tun0 scope link 
128.122.0.0/16 dev tun0 scope link 
128.122.252.68 via 192.168.1.254 dev eth0 src 192.168.1.32 
128.122.253.46 dev tun0 scope link 
128.122.253.79 dev tun0 scope link 
172.16.0.0/12 dev tun0 scope link 
192.168.0.0/16 dev tun0 scope link 
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.32 metric 1 
193.175.54.0/24 dev tun0 scope link 
193.205.158.0/25 dev tun0 scope link 
193.206.104.0/24 dev tun0 scope link 
195.113.94.0/24 dev tun0 scope link 
203.126.200.0/24 dev tun0 scope link 
203.174.165.128/25 dev tun0 scope link 
212.219.93.0/24 dev tun0 scope link 
216.165.0.0/17 dev tun0 scope link

Plus d'information-

J'ai réussi à acheminer du trafic arbitraire sur ce VPN dans MS Windows via le client Cisco AnyConnect avec la configuration par défaut. Voici à quoi ressemble la table de routage lorsque le client AnyConnect fonctionne (il s'agit d'un ordinateur différent derrière le même routeur au 192.168.1.254).

Table de routage IPv4
================================================== =========================
Itinéraires actifs:
Métrique d'interface de passerelle de masque de réseau de destination réseau
          0.0.0.0 0.0.0.0 192.168.1.254 192.168.1.13 30
         10.0.0.0 255.0.0.0 192.168.128.1 192.168.128.197 2
      91.230.41.0 255.255.255.0 192.168.128.1 192.168.128.197 2
        127.0.0.0 255.0.0.0 En liaison 127.0.0.1 306
        127.0.0.1 255.255.255.255 En liaison 127.0.0.1 306
  127.255.255.255 255.255.255.255 En liaison 127.0.0.1 306
      128.122.0.0 255.255.0.0 192.168.128.1 192.168.128.197 2
   128.122.252.68 255.255.255.255 192.168.1.254 192.168.1.13 31
       172.16.0.0 255.240.0.0 192.168.128.1 192.168.128.197 2
      192.168.0.0 255.255.0.0 192.168.128.1 192.168.128.197 2
      192.168.1.0 255.255.255.0 En liaison 192.168.1.13 286
     192.168.1.13 255.255.255.255 En liaison 192.168.1.13 286
    192.168.1.254 255.255.255.255 En liaison 192.168.1.13 31
    192.168.1.255 255.255.255.255 En liaison 192.168.1.13 286
     192.168.31.0 255.255.255.0 En liaison 192.168.31.1 276
     192.168.31.1 255.255.255.255 En liaison 192.168.31.1 276
   192.168.31.255 255.255.255.255 En liaison 192.168.31.1 276
    192.168.128.0 255.255.255.0 En liaison 192.168.128.197 257
  192.168.128.197 255.255.255.255 En liaison 192.168.128.197 257
  192.168.128.255 255.255.255.255 En liaison 192.168.128.197 257
    192.168.203.0 255.255.255.0 En liaison 192.168.203.1 276
    192.168.203.1 255.255.255.255 En liaison 192.168.203.1 276
  192.168.203.255 255.255.255.255 En liaison 192.168.203.1 276
     193.175.54.0 255.255.255.0 192.168.128.1 192.168.128.197 2
    193.205.158.0 255.255.255.128 192.168.128.1 192.168.128.197 2
    193.206.104.0 255.255.255.0 192.168.128.1 192.168.128.197 2
     195.113.94.0 255.255.255.0 192.168.128.1 192.168.128.197 2
    203.126.200.0 255.255.255.0 192.168.128.1 192.168.128.197 2
  203.174.165.128 255.255.255.128 192.168.128.1 192.168.128.197 2
     212.219.93.0 255.255.255.0 192.168.128.1 192.168.128.197 2
      216.165.0.0 255.255.128.0 192.168.128.1 192.168.128.197 2
        224.0.0.0 240.0.0.0 En liaison 127.0.0.1 306
        224.0.0.0 240.0.0.0 En liaison 192.168.1.13 286
        224.0.0.0 240.0.0.0 En liaison 192.168.203.1 276
        224.0.0.0 240.0.0.0 En liaison 192.168.31.1 276
        224.0.0.0 240.0.0.0 En liaison 192.168.128.197 10000
  255.255.255.255 255.255.255.255 En liaison 127.0.0.1 306
  255.255.255.255 255.255.255.255 En liaison 192.168.1.13 286
  255.255.255.255 255.255.255.255 En liaison 192.168.203.1 276
  255.255.255.255 255.255.255.255 En liaison 192.168.31.1 276
  255.255.255.255 255.255.255.255 En liaison 192.168.128.197 10000
================================================== =========================
deftfyodor
la source
J'imagine qu'il sera clair que le routage réseau est assez nouveau pour moi, donc j'apprécierais un niveau assez élevé de verbosité dans les réponses.
deftfyodor
1
Il serait utile que vous puissiez indiquer si vous utilisez un client (anyconnect?), Et si vous pouvez publier votre table de routage, merci.
MariusMatutiae
Pour ce faire ip route, en passant.
user1686
2
Oui, veuillez ne pas utiliser de commandes de routage obsolètes: utilisez ip route show pour la table de routage. Les commandes obsolètes masquent certaines des complexités qui sont possibles et utiles également avec les VPN, sans parler des VLAN, ...
MariusMatutiae
@grawity, @MariusMatutiae - Bien sûr, j'ai édité la question avec la sortie de la commande. Merci d'avoir mentionné la ip routecommande, je ne l'avais jamais rencontrée auparavant.
deftfyodor

Réponses:

3

Votre réseau local est 192.168.1.0/24, comme indiqué par cette ligne dans votre table de routage:

 192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.32  metric 1

Votre réseau VPN est 10.0.0.0/8, comme indiqué par cette ligne:

 10.0.0.0/8 dev tun0  scope link 

Actuellement, votre routeur par défaut est:

 default via 192.168.1.254 dev eth0  proto static 

ce qui est bien sûr ce que vous ne voulez pas , car il appartient à votre LAN local: ainsi tout votre matériel est acheminé via votre passerelle locale, comme si le VPN n'existait pas.

 You do have however, the all-important statement

 128.122.252.68 via 192.168.1.254 dev eth0  src 192.168.1.32  

qui est la route vers votre fournisseur VPN.

ÉDITER:

Je n'avais pas réalisé que la table de routage est simplement celle qui est obtenue à partir de votre VPN, sans votre intervention. Cela peut indiquer (indirectement) que votre fournisseur de services est disposé à transférer uniquement le trafic explicitement autorisé dans votre table via l'interface tun0, et peut avoir pris des mesures supplémentaires pour bloquer tout autre trafic, auquel cas vos efforts seront vains.

Cependant, en supposant que votre fournisseur est disposé à transférer tout votre trafic, ce que vous devez faire est le suivant.

Tout d'abord, vous devez savoir s'il existe une passerelle prête à accepter votre connexion de l'autre côté, car nous avons besoin de son adresse IP. Je vais vous donner quatre méthodes pour ce faire.

1) Avec le PC connecté au VPN, essayez la commande suivante:

   sudo dhclient -v tun0

Si tout se passe bien, vous devriez voir une réponse contenant cette ligne:

 DHCPOFFER of a.b.c.d from x.y.w.z

xywz est l'adresse IP de la passerelle locale. Vous devrez peut-être éteindre votre VPN après ce test, et peut-être même redémarrer votre PC, car nous aurons tout simplement foiré la table de routage.

2) Alternativement, vous pouvez essayer de naviguer vers l'un des sites autorisés (ceux qui apparaissent dans votre table de routage comme passant par l' interface tun0 ), puis lancer la commande:

  ip neigh show

Vous devriez obtenir une liste des ordinateurs contactés via le protocole ARP, avec l'adresse MAC et IP; vous recevrez probablement zéro ou une réponse. Si vous obtenez une seule réponse, c'est votre routeur.

3) Si vous n'obtenez pas une telle réponse, vous pouvez essayer avec

  sudo nmap -sn 10.0.0.0/8

(qui va être très lent). Votre passerelle sera l' un des ordinateurs répertoriés, probablement celui dont l'adresse se termine par .1 ou .254, le cas échéant.

4) Utilisez la commande tcpdump:

  sudo tcpdump -n -i tun0

et voir les adresses IP crachées par la commande.

Si vous n'obtenez pas non plus de réponse appropriée à ce test, cela signifie que quelqu'un a vraiment serré les vis de son réseau.

Mais soyons optimistes, et supposons que vous ayez maintenant une adresse IP candidate xwyz pour le routeur distant. Vous devrez supprimer la passerelle par défaut, (comme sudo!):

  ip route del default via 192.168.1.254

et ajoutez le nouveau:

  ip route add default via x.w.y.z 

et essayez de naviguer.

Permettez-moi de répéter: étant donné que votre fournisseur n'a autorisé le trafic qu'à quelques adresses IP sélectionnées via son VPN, il est possible qu'il ait pris des mesures supplémentaires (= pare-feu) pour empêcher un utilisateur intelligent de forcer son trafic générique via son VPN. Dans ce cas, vous ne pouvez rien faire. Mais s'il ne l'a pas fait, les étapes ci-dessus devraient vous aider à trouver une solution.

MariusMatutiae
la source
Merci pour la réponse très élaborée, mais en entrant dans la seconde moitié, je ressens un petit hoquet. la sortie des ip addr show dev tun0lectures 10: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1412 qdisc pfifo_fast state UNKNOWN group default qlen 500 link/none inet 192.168.128.193/24 brd 192.168.128.255 scope global tun0 valid_lft forever preferred_lft forever, sans adresse homologue à respecter. De plus, la table de routage que j'ai postée plus tôt n'avait pas du tout été modifiée par moi - elle était entièrement générée par le client vpn.
deftfyodor
@deftfyodor S'il vous plaît voir mon montage.
MariusMatutiae
En utilisant la commande tcpdump, j'ai en effet pu discerner la passerelle et y acheminer le trafic par défaut. Malheureusement, cela ne fonctionne que pour les plages d'adresses IP spécifiquement provisionnées. Je suis certainement enclin à croire qu'il existe des mesures de sécurité supplémentaires en place - mais je n'ai aucun problème à acheminer du trafic arbitraire sur le même VPN dans MS Windows en utilisant le client AnyConnect - donc il doit sûrement y avoir plus à l'histoire.
deftfyodor
@deftfyodor Pouvez-vous vérifier si votre table de routage dans Windos est différente de celle sous Linux?
MariusMatutiae
Il est généralement similaire, bien qu'il existe certains éléments qui diffèrent, en particulier, 0.0.0.0 est configuré pour router via mon routeur réseau en tant que passerelle, en maintenant la passerelle VPN comme interface. J'ai édité la question pour afficher la table de routage Windows.
deftfyodor
3

Toutes vos routecommandes manquent de masques de réseau, elles ne correspondent donc qu'à l' 0.0.0.0adresse spécifique , pas à l'ensemble d'Internet. Remplacez donc 0.0.0.0par 0.0.0.0/0la première commande que vous avez essayée:

ip route add -net 0.0.0.0/0 gw homeportal dev tun0

Il peut y avoir une mise en garde que je ne sais pas si votre client VPN résout par lui-même: le point de terminaison du tunnel doit être exclu du routage via le VPN, il doit être routé via votre eth0interface. Donc, si l'ajout de cette route par défaut rompt votre VPN, ajoutez une route spécifique pour votre point de terminaison VPN:

ip route add <ENDPOINT>/32 dev eth0

Teun Vink
la source
2
Je pense que le second est censé être ip route, non? De plus, même si c'est toujours une bonne idée d'ajouter des masques de réseau, il semble que routesuppose / 0 lors de l'ajout de 0.0.0.0
user1686