2009-09-12 3 views
0

J'essaie de configurer un serveur socket sur une machine ubuntu. J'ai mis en place le même script de serveur sur ma propre machine où cela fonctionne parfaitement. Dans mon routeur j'ai renvoyé le port 10007 à la bonne machine et lier l'ip à mon ip local (192.168 ...: 10007).Problème ip/port du serveur socket

Maintenant, j'ai besoin de le configurer sur un serveur dédié et c'est là que les problèmes commencent. Je ne semble pas avoir d'adresse IP locale sur le serveur, au moins ifconfig ne m'en donnera pas. J'ai essayé de lier à l'adresse IP publique à la place ou à 127.0.0.1 ou 0.0.0.0, cela fonctionne très bien si je telnet de la même machine mais pas d'une autre machine. Quelqu'un sait comment résoudre cela? Ai-je besoin de mettre en place une sorte de redirection de port?

+0

Veuillez clarifier les termes. Que voulez-vous dire par "je ne semble pas avoir une adresse IP locale sur le serveur"? Juste lo interface apparaît dans ifconfig, pas eth0, etc? Par IP publique, vous voulez dire l'adresse IP externe de votre routeur? – Duck

+0

J'ai lo et eth0, mais pas "interne" comme dans 192.168.x.x. eth0 a 79.136.x.x qui est accessible depuis internet via ssh et http par exemple. – Martin

+0

Donc, votre nouveau serveur est à un centre de données ou à la maison accroché directement au modem câble ou autre? Ce n'est pas derrière un périphérique NAT? – Duck

Répondre

2

Ne pas lier à une adresse IP spécifique; utilisez INADDR_ANY (IPv4) ou une adresse zéros.

Ubuntu inclut son propre pare-feu dans le système. Si vous ne pouvez pas vous connecter depuis une autre machine, vérifiez qu'elle est configurée pour bloquer les connexions à votre port.

Ubuntu Firewall documentation
Ubuntu ufw man page

Edit: Il pourrait aussi être un pare-feu entre vous et le serveur qui bloque le port. Vous pourriez vérifier avec votre fournisseur d'hébergement ou votre contrat de service; ils peuvent devoir activer spécifiquement chaque port supplémentaire requis. Certains fournisseurs proposent des packs d'hébergement différents allant d'un pack d'hébergement mutualisé de base uniquement web permettant uniquement le port 80, à un serveur dédié permettant un accès complet à la machine et à tous les ports.

+0

Ok, maintenant j'ai essayé 0.0.0.0, activé le port 10007 avec ufw, vérifié que je n'ai pas de restrictions iptables et essayé de se connecter à partir de différentes machines. Mais cela ne fonctionne toujours pas:/ – Martin

+0

Êtes-vous capable de faire un ping sur la machine du serveur? Êtes-vous connecté avec succès à d'autres ports? Êtes-vous sûr qu'aucun autre pare-feu ne protège le serveur? – mark4o

+0

Oui ping sur le 79.136 .... ip fonctionne très bien et je peux SSH à elle et le serveur web (port 80) fonctionne très bien. Comment puis-je savoir s'il y a un pare-feu bloquant le port? Cela semble être le seul moyen de le faire mais je ne sais pas où chercher, iptables -L ne donne aucune règle. – Martin

1

NAT - Network Address Translation est ce qui permet à plusieurs machines d'avoir des adresses locales derrière un routeur qui présente une adresse publique à Internet. Avec votre ancien serveur vous étiez presque certainement derrière un routeur que NAT, ce qui explique pourquoi vous deviez faire une redirection de port pour atteindre votre serveur.

Si vous n'êtes pas actuellement à l'origine d'un périphérique NAT, c'est la raison pour laquelle vous ne voyez pas les adresses privées dans la plage 192.168.x.x ou 172.16.x.x ou 10.0.x.x. Vous êtes connecté directement à Internet et il n'y a pas de distinction entre les adresses privées et publiques. 79.136.x.x est votre adresse publique et vous n'en avez pas privé. Juste lier à cela et lancez votre serveur.

1

Après avoir exécuté votre programme, le port est-il listé dans netstat (j'utilise netstat -a)? Cela vous dira si le port est ouvert et à l'écoute.

+0

Oui, il est listé avec netstat: tcp 0 0 0.0.0.0:10008 0.0.0.0: * LISTEN 13071/php – Martin

+0

Cela ne s'afficherait-il pas si un pare-feu le bloquait? – Martin

+0

oui, je crois qu'il apparaîtra même si le pare-feu le bloque. Cela montre que votre programme est en train de «faire ce qu'il faut» et d'ouvrir le socket avec succès. Vous pouvez également utiliser lsof pour obtenir cette même information. Si vous ne pouvez toujours pas vous connecter à ce stade, il y a autre chose qui bloque votre socket. – cigarman

Questions connexes