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).
la source
-interface
n'est pas une option deroute
sorte 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?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.)
la source
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
iptables
fonctionnalité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).
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.
Utilisez
iptables
pour rediriger les paquets dirigés vers Xn: Pn vers localhost: Lniptables -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
Maintenant, SSH vers la passerelle, en utilisant l'
-L
option 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:
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'
-D
option SSH pour simuler un proxy SOCKS et tunneler tout votre trafic à travers cela.la source
Ce que vous voulez, c'est la définition d'un VPN.
Un VPN ne devrait pas
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.
la source
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.
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.
la source
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):
puis se connecter à
localhost:2222
, sera comme se connecter àlocalhost:2222
dejump_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 lejump_box
permet.Vous pouvez utiliser
autossh
avecsystemd
ou similaire pour maintenir les tunnels opérationnels.la source