Vous utilisez un navigateur obsolète. Il se peut qu'il n'affiche pas correctement ce site ou d'autres. Vous devez le mettre à niveau ou utiliser un navigateur alternatif.
Secure tunnels to localhost : ”I want to expose a local server behind a NAT or firewall to the internet.”
Build webhook integrations with ease
Building webhook integrations can be a pain: it requires a public address and a lot of set up to trigger hooks. Save yourself time and frustration with ngrok. Inspect the HTTP traffic flowing over your tunnel. Then, replay webhook requests with one click to iterate quickly while staying in context.
Run personal cloud services from your own private network
Own your data. Host personal cloud services on your own private network. Run webmail, file syncing, and more securely on your hardware with full end-to-end encryption.
Pour info: Stéphane a préparé une web interface accessible à la porte suivante: 27308
Pour utiliser NGrok il faut aller sur cette page (https://dashboard.ngrok.com) et créer un compte utilisateur.
Une fois crée on aura accès à une page de contrôle interne et on pourra visualiser son propre Tunnel Authtoken qui doit être la première fois installé sur le NAS en SSH avec le commande suivant:
Code:
[~] # cd /opt/NGrok
[/opt/NGrok] # ./ngrok authtoken [Tunnel Authtoken]
Authtoken saved to configuration file: /share/homes/admin/.ngrok2/ngrok.yml
Une fois cela fait, on a deux options:
1. passer les commandes directement sur le terminal (SSH or Telnet) avec les commande décrites ci dessous (en tenant compte qu'il faut toujours lancer ces commandes dans le folder /opt/NGrok/ en utilisant ./ngrock):
Code:
usage:
ngrok --help
NAME:
ngrok - tunnel local ports to public URLs and inspect traffic
DESCRIPTION:
ngrok exposes local networked services behinds NATs and firewalls to the
public internet over a secure tunnel. Share local websites, build/test
webhook consumers and self-host personal services.
Detailed help for each command is available with 'ngrok help <command>'.
Open http://localhost:4040 for ngrok's web interface to inspect traffic.
EXAMPLES:
ngrok http 80 # secure public URL for port 80 web server
ngrok http -subdomain=baz 8080 # port 8080 available at baz.ngrok.io
ngrok http foo.dev:80 # tunnel to host:port instead of localhost
ngrok tcp 22 # tunnel arbitrary TCP traffic to port 22
ngrok tls -hostname=foo.com 443 # TLS traffic for foo.com to port 443
ngrok start foo bar baz # start tunnels from the configuration file
VERSION:
2.0.19
AUTHOR:
inconshreveable - <alan@ngrok.com>
COMMANDS:
authtoken save authtoken to configuration file
credits prints author and licensing information
http start an HTTP tunnel
start start tunnels by name from the configuration file
tcp start a TCP tunnel
test test ngrok service end-to-end
tls start a TLS tunnel
update update to the latest version
version print the version string
help Shows a list of commands or help for one command
Par exemple, si on veut créer un tunnel pour un service qui marche sur la porte 58000 il suffit de lancer sur SSH:
Code:
[/opt/NGrok] # ./ngrok http 58000
2. aller sur http://[NAS]:27308 et insérer les commandes qui seront lancés au démarrage.
À savoir que NGrok offre différents services, le plus basique est gratuit, mais les autres (bcp plus intéressants, comme le sub-domain reservation, https, etc.) sont payants.
Une option assez important, mas pas décrite dans la décrite dans le bloc avant est la possibilité de créer un accès avec authentication:
By default, ngrok tunnels do not require any username or password to access them. This means anyone who knows or guesses the URL or your tunnel can make requests to it. You can secure your tunnels with a username and password by specifying the -httpauth option when creating your tunnel. This will force HTTP basic authentication on all incoming requests to your tunnels and require that the credentials match those you specify on the command line.
Example: Add a username and password to your tunnel
merci! Par contre je ne suis pas 100% d'avoir compris comment tlstun marcherait, car je vois une partie serveur et une partie client.. Mais on en parlera encore.
petite question: est-ce que c'est normale que dans ta Web Interface je lis "Open http://localhost:4040 for ngrok's web interface to inspect traffic." mais si j'essaye de me connecter à cet adresse/porte il n'y a rien (càd que la page ne se charge même pas)? Est-ce que c'est juste un erreur dans le descriptif ou je devrais vraiment trouver quelque chose à cet adresse/porte?
En plus, ainsi comme écrit ici, je n'ai pas compris comment voir le subdomain utilisé si j'envoie ngrok en background. Quelques idées? EDIT: apparemment [1] il est possible avec le webservice sur la porte 4040, mais justement je n'arrive pas a y accéder.
EDIT: ça serait sympa si on pouvait voir directement dans l'interface 27308 que tu as fait, Stéphane, la liste des adresses créés en créant un petit cadre où les sousdomains sont listés en tournant ce script de stackoverflow:
Code:
import json
import os
os.system("curl http://localhost:4040/api/tunnels > tunnels.json")
with open('tunnels.json') as data_file:
datajson = json.load(data_file)
msg = "ngrok URL's: \n'
for i in datajson['tunnels']:
msg = msg + i['public_url'] +'\n'
print (msg)
Pas de soucis pour cela. Mon problème est juste sur le localhost:4040, mais je vais essayer de nouveau dans les prochains jours.
PS: est-ce qu'il ne serait mieux de créer un lien symbolique au moment de l'installation pour ngrok, ainsi qu'on ne doit pas nécessariement aller dans /etc/NGrok?
Pas de soucis pour cela. Mon problème est juste sur le localhost:4040, mais je vais essayer de nouveau dans les prochains jours.
PS: est-ce qu'il ne serait mieux de créer un lien symbolique au moment de l'installation pour ngrok, ainsi qu'on ne doit pas nécessariement aller dans /etc/NGrok?
Voilà, j'ai compris: le webserver sur la porte 4040 n'est pas accessible que si un tunnel est ouvert.
Pour accèder à KeyBox depuis ngrok j'ai configuré le suivant script sur le webserver de start/stop créé par Stépane (porte 27308):
Code:
#!/bin/sh
## /opt/NGrok/ngrok (type your command below for automatic exec when NAS/QPKG Start)
/opt/NGrok/ngrok http -bind-tls=false -inspect=false 58000
Le seul problème est que, à moins d'utiliser un reverse proxy vers http://127.0.0.1:4040 (ou peut être en utilisant le script python linké avant, mais que je n'ai pas testé), à ma connaissance ce n'est pas possible (avec un account gratuit) de savoir quel sousdomain a été affecté au tunnel créé.
Pour info, voici le reverse proxy que j'ai ajouté à /etc/config/apache/extra/httpd-vhosts-user.conf:
Code:
<VirtualHost *:80>
ServerName xxx.mydomain.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
Order allow,deny
Allow from all
</Location>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:4040/
ProxyPassReverse / http://127.0.0.1:4040/
ProxyStatus On
</VirtualHost>
De cette manière une fois que le tunnel est actif, il est possible de lire et connaître le sous-domaine. Je devrais juste rajouter à ce vhost une authentication afinnde ne pas dévoiler sur le net que j'ai un service ouvert à un certain sous-domaine de ngrok.io
j'ai presque finalisé quelque ligne à mettre dans le start.sh script dans /opt/NGrok/ (ou à copier coller dans l'interface de Stéphane à la porte 27308) pour recevoir une notification sur QTS avec l'adresse du tunnel créé:
Code:
#!/bin/sh
## /opt/NGrok/ngrok (type your command below for automatic exec when NAS/QPKG Start)
nohup /opt/NGrok/ngrok http -bind-tls=false -inspect=false 58000 &
# after tunnel creation sleep for 10 seconds to ensure the tunnel is created
sleep 10
# take timestamp for notification
TIMESTAMP=$(date +"%Y-%m-%d %H:%M")
# create temp files and assign variables
CURL_NGROK="/share/Public/curl-ngrok.txt"
TR_NGROK="/share/Public/tr-ngrok.txt"
SERVER="/share/Public/server-ngrok.txt"
PUBLIC_URL="/share/Public/tunnel-ngrok.txt"
# take raw information
curl http://127.0.0.1:4040/api/tunnels > $CURL_NGROK
# put raw information in column (by ")
tr '"' '\n' < $CURL_NGROK > $TR_NGROK
# take 24th line (information on tunneled server)
sed '24q;d' $TR_NGROK > $SERVER
# take 14th line (information on tunneled url)
sed '14q;d' $TR_NGROK > $PUBLIC_URL
# send output to QTS
/sbin/log_tool -a "$TIMESTAMP - Ngrok http tunnel created for `head -n 1 $SERVER` to `head -n 1 $PUBLIC_URL`." -t 1 >&2
Dans le script /opt/NGrok/stop.sh (ou dans la section stop de l'interface 27308) on pourrait donc rajouter:
Je dois encore tester ce code, mais il devrait marcher. EDIT: le code marche bien mnt!
ps: noter que j'utilise ici nohup pour envoyer proprement la commande en background. Nohup peut être installé avec Entware-ng avec un simple:
Code:
[~] # opkg install coreutils-nohup
EDIT: version finale ici: http://www.forum-nas.fr/viewtopic.php?f=21&t=3382&p=21656#p21656
à noter que en effet nohup va créer un problème au démarrage et pour ce fait il a été supprimé dans la dernière version du script.