J'ai un serveur de développement, qui n'est accessible qu'à partir de 127.0.0.1:8000, pas 192.168.1.x: 8000. En guise de solution rapide, existe-t-il un moyen de configurer quelque chose à écouter sur un autre port (par exemple 8001) de sorte que je puisse me connecter au réseau local 192.168.1.x: 8001 et qu'il achemine le trafic entre le client et 127.0 .0,1: 8000?
networking
tcp
tunneling
port-forwarding
attendre pour l'entraînement
la source
la source
Réponses:
Utiliser ssh est la solution la plus simple.
Cela transmet le port local 8001 de votre poste de travail à l'adresse localhost du port 8000 de remote-server.com. Cela
-g
signifie que les autres clients de mon réseau peuvent se connecter au port 8001 de mon poste de travail. Sinon, seuls les clients locaux de votre poste de travail peuvent se connecter au port transféré.-N
signifie que tout ce que je fais est de transférer des ports, ne lancez pas de shell.-f
signifie passer en arrière-plan après une connexion et une connexion SSH réussies.Le port 8001 restera ouvert pour de nombreuses connexions, jusqu'à ce que ssh décède ou soit tué. Si vous êtes sur Windows, l'excellent client SSH, PuTTY, peut également le faire. Utilisez 8001 comme port local et localhost: 8000 et la destination et ajoutez un transfert de port local dans les paramètres. Vous pouvez l'ajouter après une connexion réussie avec PuTTY.
la source
[email protected]
fait? C'est absolument inutile pour la redirection de port, bien que ssh demande à avoir cet argument, en plus, il essaie de s'y connecter. Et lors de la configuration de cette option fastidieuse à hostname, il affiche…port 22: Connection refused
(non, je n'ai pas utilisé le port 22) . À moins que quelque chose me manque, la commande ne fonctionne manifestement pas.[email protected]
est juste un exemple et vous ne devriez pas le prendre à la lettre. Vous devez remplacer ceci par un nom d'ordinateur auquel vous souhaitez vous connecter et votre nom d'utilisateur sur cet ordinateur. Ces informations sont nécessaires pour établir une connexion SSH. Une fois que la connexion ssh est établie, les ports peuvent être transférés via cette connexion.-N
ne signifie pas qu'il n'y a pas de connexion SSH. Cela signifie simplementdo not execute a remote command
(voir la page de manuel ). L'<user>@<host>
argument est nécessaire, parce que cela fait ouvrir une connexion SSH<host>
(qui , pour le cas de OP seraitlocalhost
), et transmet le port souhaité à travers ce tunnel SSH. C'est une solution au problème de l'OP, mais pas la plus simple. Pour transmettre à localhost sans utiliser ssh, vous pouvez utilisersocat
ounetcat
comme StephaneChazelas et les réponses de non-utilisateur.Avec
socat
sur le serveur:Par défaut,
socat
écoute sur le port TCP 8001 de n’importe quelle adresse IPv4 ou IPv6 (si prise en charge) sur la machine. Vous pouvez le limiter à IPv4 / 6 en remplaçanttcp-listen
partcp4-listen
outcp6-listen
, ou à une adresse locale spécifique en ajoutant un,bind=that-address
.Pareil pour le socket de connexion auquel vous utilisez le proxy, vous pouvez utiliser n'importe quelle adresse à la place de
localhost
, et remplacertcp
partcp4
outcp6
si vous souhaitez limiter la résolution d'adresse aux adresses IPv4 ou IPv6.Notez que pour le serveur qui écoute sur le port 8000, la connexion apparaîtra comme provenant du proxy (dans le cas de
localhost
, ce seralocalhost
), pas du client d'origine. Vous devez utiliser des approches DNAT (mais nécessitant des privilèges de superutilisateur) pour que le serveur puisse déterminer le client.la source
range
ettcpwrap
dans lasocat
page de manuel).Utiliser le traditionnel
nc
est la solution la plus simple:Cette version de
nc
est dans lenetcat-traditional
paquet sur Ubuntu. (Vous devezupdate-alternatives
ou appelez-lenc.traditional
.)Notez que contrairement à ssh, ce n’est pas chiffré. Gardez cela à l'esprit si vous l'utilisez en dehors d'un hôte.
la source
netcat-openbsd
?netcat
version qui est inclus dansbusybox
:nc -v -lk -p 8001 -e /usr/bin/nc 127.0.0.1 8000
. ( Description des paramètres )nc
commande se termine après la première connexion à distance. Ajoutez-k
si vous avez besoin de le garder en marche.nc: cannot use -p and -l
sur CentOS 6.4. Y at-il un travail autour?OpenBSD netcat est disponible par défaut sous Linux et également sous OS X.
OSX:
Linux:
Une alternative qui fonctionne sur OS X bash consiste à utiliser un canal bidirectionnel . Cela peut fonctionner sur d'autres Unix:
la source
ss -tan
ounetstat -tan
.Citant un David Spillett de » réponse sur ServerFault
C’est un simple binaire qui prend un fichier de configuration au format
bindaddress bindport connectaddress connectport
Par exemple:
192.168.1.1 8001 127.0.0.1 8000
ou
0.0.0.0 8001 127.0.0.1 8000
si vous souhaitez lier le port entrant à toutes les interfaces.
la source
la source
dport
, comme dansnc -v localhost 2345
, je reçoisConnection refused
. Je ne suis pas très bon en iptables, mais je suppose que le rapport doit avoir une application d'écoute.Sur la base de la réponse de Mark A. , je devais faire un petit ajustement pour que cela fonctionne sur mon Mac (du moins sur macOS Mojave Version 10.14.4).
Cette déclaration de printf semble être cruciale. Sinon, la commande netcat pour se connecter au port 8000 ne tentera jamais réellement de se connecter, et la commande netcat pour écouter sur le port 8001 ne l'écoutera jamais sur le port 8001. Sans printf, j'essaierais chaque fois de me connecter au port 8001 Connexion rejetée.
Mon hypothèse est que netcat doit d’une manière ou d’une autre bloquer sur stdin (peut-être essaie-t-il de le lire pour une raison quelconque) avant d’effectuer réellement une opération de Socket. En tant que tel, sans l'instruction printf écrite dans fifo a, la commande netcat ne commencera jamais à écouter sur le port 8001.
Note: J'aurais laissé une réponse sur le post de Mark, mais je n'ai pas encore de réputation.
la source
C'est une nouvelle façon de tunnelliser deux ports udp sur le serveur: https://github.com/9crk/udpeer
udpeer 8001 8002
Tester:
la source