|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
![]() ![]() Inscription : décembre 2006 Messages : 1 568 ![]() |
Bonjour,
voilà j'ai un serveur sous Debian, et j'aimerais pouvoir avoir plusieurs serveurs qui tournent sur un même port TCP (en l'occurence le port 443): - un serveur perso développé en Java, pour une application 'publique' (le client étant une applet). - un serveur SSHD 'privé' pour que je puisse administrer mon serveur. La raison est simple: de nombreuse institutions bloquent tous les ports TCP sortants hormis le HTTP (80) et HTTPS (443). Par contre, une connexion cryptée en SSL vers un serveur sur le port 443 est rarement filtrée, même si ça ne correspond pas réellement à un serveur web HTTPS. Je voudrais que les clients puissent accéder à mon serveur Java 'public' depuis n'importe où, même derrière un tel pare-feu. De même, je voudrais moi-même pouvoir accéder au serveur SSHD depuis n'importe où pour administrer mon serveur. Bien entendu, binder plusieurs applis sur le même port est impossible. J'aurais aimé pouvoir trouver une technique pour contourner ce souci, par exemple au moyen de DNS différents: admettons que l'IP de mon serveur soit 'xxx.yyy.zzz.ttt' - j'ai une première DNS 'servpublic.no-ip.org' qui pointe sur xxx.yyy.zzz.ttt - j'ai une première DNS 'servprive.no-ip.org' qui pointe aussi sur xxx.yyy.zzz.ttt Y aurait-il un moyen qu'en fonction du DNS utilisé pour se connecter à mon port 443, la connexion soit redirigée vers le bon démon ? genre avec deux interfaces réseau 'virtuelles' différentes et un routage en fonction du DNS d'entrée ? L'idée serait d'avoir le même genre de mécanisme que les 'name based virtual hosts' d'Apache. Si c'est possible, pourriez-vous me donner quels logiciels il me faudrait utiliser et quelques pistes (basiques) pour savoir dans quel sens orienter mes recherches ? Si ce n'est pas possible, y aurait-il tout de même un autre moyen pour faire ce que je veux faire ? Merci beaucoup d'avance |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : décembre 2006 Messages : 1 568 ![]() |
personne ?
|
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Développeur Web Inscription : mai 2004 Messages : 183 ![]() |
1 service = 1 port
À ma connaissance il n'est pas possible de mettre plusieurs services à l'écoute sur le même port. |
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : décembre 2006 Messages : 1 568 ![]() |
salut,
merci pour ta réponse. Effectivement, un port pour une interface donnée ne peut être 'bindé' qu'à une seule application, donc à un service. Mais on pourrait tout à fait imaginer: - que le service en question soit tout simplement une sorte de mini routeur interne qui, en fonction de l'adresse vers laquelle le client extérieur voulait se connecter, redirige la connexion vers un service parmi plusieurs écoutant sur un autre port en interne. - que si les mécanismes de routage/firewall interne (genre iproute, netfilter ?) sont capable de récupérer d'une façon ou d'une autre le hostname vers lequel le client voulait se connecter, il modifie le paquet pour le rediriger, par exemple sur une interface (virtuelle) différente. - dernière idée, comme ça: si mon serveur faire tourner une sorte de serveur DNS avec des redirections, genre: - domaine1.nouknouk.com:port => eth-virtuelle-x:port - domaine2.nouknouk.com:port => eth-virtuelle-y:port qu'en penses-tu de chacunes de ces solutions ? Le problème majeur pour moi c'est que je n'ai aucune idée à priori de ce qui serait faisable ou pas, de ce qui serait viable ou pas et en fonction de la 'bonne' solution, où je pourrais trouver de l'info. Si vous avez des idées, je suis bien évidemment preneur |
|
|
00
|
|
|
#5 |
|
Membre chevronné
![]() Inscription : décembre 2006 Messages : 689 ![]() |
Oui, comme tu le dit c'est UN service. Ton appli s'occupe d'écouter sur le port et de rediriger vers d'autres ports interne. Mais je pense que iptables couvre partiellement ce problème.
|
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : décembre 2006 Messages : 1 568 ![]() |
|
|
|
00
|
|
|
#7 |
|
Membre chevronné
![]() Inscription : décembre 2006 Messages : 689 ![]() |
J'entend que iptable fait du port forwarding. Tu recoit un truc sur un port et tu peux le transférer sur un autre. Ensuite comme les règles dépendent des caractéristiques des sources/destinataires, il doit y avoir moyen de spécifier une règle de redirection par destinataire.
|
|
|
00
|
|
|
#8 | |
![]() ![]() Inscription : décembre 2006 Messages : 1 568 ![]() |
Citation:
Exemple concret: mon serveur a une IP xxx.yyy.zzz.ttt - public.no-ip.org pointe sur xxx.yyy.zzz.ttt - prive.no-ip.org pointe sur xxx.yyy.zzz.ttt également Sur mon serveur, je lance deux services: - un SSHD dur le port 22. - un apache HTTPS sur le port 12345. Si le client se connecte sur public.no-ip.org:443 il doit être redirigé vers le port 12345. Si un client se connecte sur prive.no-ip.org:443 il doit etre redirigé vers le port 22. Voilà l'idée. MAIS JUSTEMENT, iptables peut-il me permettre de faire cela ? et si oui, quelqu'un aurait-il quelques pistes ? Merci |
|
|
|
00
|
|
|
#9 |
|
Membre chevronné
![]() Inscription : décembre 2006 Messages : 689 ![]() |
Après réflexion non, car il faudrait faire la translation au niveau du serveur de noms.
Je ne sais pas si une trame tcp/ip contient le nom de l'hôte destinataire ? |
|
|
00
|
|
|
#10 | |
|
Membre expérimenté
![]() Dev ASP.NET/jQuery ; Admin ORACLE Inscription : septembre 2007 Messages : 418 ![]() |
Citation:
Un port = un service. http = port 80 https = 443 etc. Si public.no-ip.org et prive.no-ip.org sont un seul et même serveur, alors le port 443 ne pourra être redirigé que vers un seul autre port. La seule solution que je vois (et la moins casse gueule), c'est d'avoir 2 serveurs : L'un pour le https (avec un port fowarding 443 -> 12345) et l'autre pour le sshd (avec un port fowarding 443 -> 22). |
|
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Inscription : mars 2004 Messages : 1 051 ![]() |
Bonjour,
Non, il n'y a pas le nom de domaine dans les trames TCP. Sinon, il n'y aurait pas de serveurs DNS Les noms de domaines se trouvent que dans la couche 'applicative' (par exemple l'entete host des trames HTTP. Tu ne pourras que faire de la reconnaissance sur les trames en clair. Les connexions HTTPS ou SSH étant cryptées, tu ne pourras pas acceder à ces informations.
__________________
Chaval __________________ "Monsieur le chat voudriez-vous, s'il vous plait, demanda Alice, me dire de quel côté dois-je aller ? Ca dépend de l'endroit où vous voulez vous rendre, répondit le chat" Lewis Carrol |
|
|
00
|
|
|
#12 |
![]() ![]() Inscription : décembre 2006 Messages : 1 568 ![]() |
effectivement, le DNS est utilisé en amont pour récupérer l'IP et ensuite travailler uniquement avec elle.
Une petite idée comme ça: avec une seule DNS (x.no-ip.org), pourrais-je définir des sous-domaines (dom1.x.no-ip.org et dom2.x.no-ip.org), faire que mon serveur soit un serveur DNS pour ces sous-domaines, et ainsi pouvoir discriminer les deux trafics pour les rediriger chacun vers une interface réseau virtuelle ? |
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() Inscription : mars 2004 Messages : 1 051 ![]() |
non, le serveur DNS ne fait qu'associer une adresse IP à un nom de domaine.
Il ne fait pas de routage, il n'intervient pas sur les paquets envoyés/traités Le serveur DNS est intérrogé à l'envoi d'un paquet par le client, afin que le dit paquet puisse etre acheminé au bon serveur
__________________
Chaval __________________ "Monsieur le chat voudriez-vous, s'il vous plait, demanda Alice, me dire de quel côté dois-je aller ? Ca dépend de l'endroit où vous voulez vous rendre, répondit le chat" Lewis Carrol |
|
|
00
|
|
|
#14 | |
![]() ![]() Inscription : décembre 2006 Messages : 1 568 ![]() |
Citation:
Je ne pensais pas à faire discriminer le trafic par le serveur DNS lui-même, mais par une règle dans iptables. Mais tu as raison: n'ayant qu'une seule IP publique, je ne peux de toute façon rien espérer. Merci à tous en tout cas |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com