Comment acheminer des adresses spécifiques à travers un tunnel?


14

Il y a certains sites Web / services auxquels je ne peux accéder qu'à partir du sous-réseau sur lequel se trouve mon serveur (pensez au scénario intranet typique). Existe-t-il un moyen d'acheminer de manière transparente le trafic vers ces adresses via un tunnel SSH?

Considérez la configuration suivante:

Mon ordinateur portable est connecté au réseau domestique. Il ne peut pas accéder directement aux services sur ips X et Y. J'ai un tunnel SSH vers un serveur qui se trouve sur un sous-réseau qui peut réellement accéder à ces services.

Puis-je en quelque sorte encapsuler automatiquement tout le trafic vers les sous-réseaux de X et Y pour passer par ce tunnel, sans avoir à exécuter la solution VPN entière qui enverrait tout mon trafic via le serveur? En d'autres termes: tout le trafic qui va vers n'importe quel autre sous-réseau doit toujours passer directement de l'ordinateur portable, sans passer par le serveur (en utilisant le tunnel).

Réponses:


6

Vous pouvez spécifier l'interface par laquelle acheminer le trafic dans la table de routage:

sudo route add <host.com> -interface <ppp0>

Où host.com est le nom d'hôte ou l'adresse IP auquel vous souhaitez accéder via l'interface, et ppp0 est l'identificateur de lien pour votre vpn affiché avec la ifconfigcommande.


2
Remarque: au moins sur ubuntu -interfacen'est pas une option de routesorte que la suggestion ci-dessus donne une erreur d'utilisation. Comment cela se traduira-t-il également par un routage via le tunnel ssh comme le demande l'OP?
arielf

3

Les versions récentes d'OpenSSH prennent en charge les périphériques réseau tun / tap pour une véritable prise en charge VPN. Voir https://help.ubuntu.com/community/SSH_VPN pour une documentation de base (évidemment destinée à Ubuntu, mais le principe de base s'applique ailleurs.)


Notez que cela nécessite des privilèges root sur l'ordinateur portable et l'hôte de la passerelle.
Riccardo Murri

1

Avertissement: je n'ai pas réellement testé ce que je vais décrire, et cela peut être complètement faux, mais votre question est si intrigante que je ne peux pas résister à la tentation de rédiger une réponse. :-) De plus, la configuration ici dépend de certaines iptablesfonctionnalités qui peuvent exister uniquement sous Linux.

En supposant que vous souhaitez vous connecter de votre ordinateur portable à un port spécifique P1 sur le serveur X1, au port P2 sur le serveur X2, etc. - je vais décrire comment acheminer le trafic TCP vers ces paires serveur + port spécifiques via un tunnel SSH. Remarque: les adresses IP X1, X2, etc. sont les adresses IP du serveur vues depuis l'hôte de la passerelle (celle vers laquelle vous vous connectez).

  1. Sélectionnez certains ports locaux inutilisés L1 (par exemple 10000), L2 (par exemple 10001), etc. Les ports L1, L2, ..., doivent être tous distincts et leur nombre doit être égal au nombre de serveurs distincts (Xn, Pn) + paires de ports.

  2. Utilisez iptablespour rediriger les paquets dirigés vers Xn: Pn vers localhost: Ln

    iptables -t nat -A OUTPUT -p tcp -d X1 --dport P1 -j DNAT --to-destination localhost: L1 iptables -t nat -A OUTPUT -p tcp -d X2 --dport P2 -j DNAT - hôte local de destination: L2

  3. Maintenant, SSH vers la passerelle, en utilisant l' -Loption pour tunneler le trafic de l'hôte local: Ln vers (Xn, Pn):

    ssh gateway.server -L localhost: L1: X1: P1 -L localhost: L2: X2: P2 ...

Exemple:

# access webserver.intranet (port 80) through localhost:10080
iptables -t nat -A OUTPUT -p tcp -d webserver.intranet --dport 80 -j DNAT --to-destination localhost:10080
ssh gateway.server -L locahost:10080:webserver.intranet:80

Mises en garde:

  • cela ne fonctionne que pour TCP, si cela fonctionne du tout ...

  • si vous souhaitez accéder à plusieurs serveurs, il est probablement moins fastidieux de configurer un VPN

  • il pourrait encore être plus facile d'utiliser l' -Doption SSH pour simuler un proxy SOCKS et tunneler tout votre trafic à travers cela.


Ça marche vraiment! (Malheureusement, cela ne correspond pas à ma situation spécifique, où je veux acheminer le trafic provenant d'une machine virtuelle, pas de localhost.)
pvgoran

1

des sous-réseaux de X et Y pour passer par ce tunnel, sans avoir à exécuter toute la solution VPN qui enverrait tout mon trafic via le serveur?

Ce que vous voulez, c'est la définition d'un VPN.

Un VPN ne devrait pas

envoyer tout [votre] trafic via le serveur?

Si tel est le cas, il n'est pas configuré correctement.

Il est supposé que toute machine à laquelle vous essayez d'accéder via un tunnel ou un VPN, par définition, n'est pas accessible via Internet. Ainsi, seule l'adresse routable non Internet nécessaire doit être acheminée vers le VPN.

Si vous avez une situation plus compliquée, comme uniquement les machines X et Y et rien d'autre. Votre personnel informatique peut les mettre sur un sous-réseau pour vous. Ensuite, sur votre ordinateur client, acheminez uniquement ce sous-réseau vers le VPN.


0

Puis-je en quelque sorte encapsuler automatiquement tout le trafic vers les sous-réseaux de X et Y pour passer par ce tunnel, sans avoir à exécuter la solution VPN entière qui enverrait tout mon trafic via le serveur?

C'est un peu étrange à première vue, car c'est ce qu'un VPN fera pour vous. SSH a tendance à être une affaire point à point, l'idée étant que vous connectez un port de votre machine locale au port d'une machine distante ailleurs; il n'a vraiment pas été conçu pour le type de trafic que vous envisagez.

En d'autres termes: tout le trafic qui va vers n'importe quel autre sous-réseau doit toujours passer directement de l'ordinateur portable, sans passer par le serveur (en utilisant le tunnel).

Encore une fois, un VPN s'en occuperait.

Si vous êtes préoccupé par une solution "lourde" pour obtenir du trafic VPN sécurisé (c'est-à-dire que vous ne voulez pas faire de singe avec lui parce que ce serait trop compliqué), vous devriez vraiment regarder OpenVPN , qui fera exactement ce que vous décrivez. Non seulement cela encapsulerait tout le trafic, mais cela peut être fait de manière à ce que seul le trafic destiné à ces sous-réseaux fasse le trajet via le canal VPN. Je vous avertirai que vous devrez toujours éditer un fichier texte sur les machines locales et distantes, mais il est assez facile de démarrer.

Pour vos besoins, parce que vous ne voulez pas que la partie au milieu (un serveur) voit votre trafic, vous devez configurer le VPN pour qu'il se connecte directement de votre machine à la machine distante. Tous les paquets routés seraient cryptés avant de quitter votre ordinateur portable, vous auriez donc une couverture de 100% de bout en bout.


0

Comme d'autres l'ont dit, si vous devez "encapsuler tout le trafic vers les sous-réseaux", alors vous voudrez probablement utiliser un VPN.

Cependant, pour accéder à quelques services, vous souhaiterez peut-être utiliser la fonction de redirection de port local de SSH, qui est vraiment simple. Par exemple, si vous saisissez (depuis votre ordinateur portable):

ssh -N -L 3333:localhost:2222 jump_box

puis se connecter à localhost:2222 , sera comme se connecter à localhost:2222de jump_box. Vous pouvez utiliser plusieurs options -L à la fois et vous pouvez vous connecter à des services sur d'autres hôtes si ssd_config on le jump_boxpermet.

Vous pouvez utiliser autosshavec systemdou similaire pour maintenir les tunnels opérationnels.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.