Pourquoi ne puis-je pas accéder à mon instance CouchDB en externe sur le serveur Ubuntu 9.04?

27

Mise à jour: je l'ai fait fonctionner maintenant. La réponse de Jim Zajkowski m'a aidé à détecter que mes appels de redémarrage /etc/init.d/couchdb ne redémarraient pas réellement l'instance. Après avoir tué manuellement les processus CouchDB et démarré une nouvelle instance, il a détecté la modification BindAddress requise.

J'ai installé CouchDB via

aptitude install couchdb

Depuis mon serveur, je peux me connecter via

telnet localhost 5984

et exécutez les commandes RESTful. Lorsque j'essaie d'accéder au serveur à partir d'une autre machine de notre réseau ou d'une machine externe à notre réseau, j'obtiens une erreur La connexion a été réinitialisée . J'ai configuré la redirection de port sur le routeur, et le serveur est par ailleurs accessible via Apache, Tomcat, SSH, etc.

Je suis nouveau sur Linux / Ubuntu, donc je ne savais pas s'il y avait un pare-feu par défaut bloquant la connexion, alors j'ai couru:

iptables -A INPUT -p tcp --dport 5984 -j ACCEPT

mais cela n'a pas aidé.

Voici le vidage de l'exécution d' iptables -L -n -v

Chain INPUT (policy ACCEPT 2121K packets, 1319M bytes)
 pkts bytes target     prot opt in     out     source               destination
   70  3864 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:5984
    9  1647 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8080
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8080

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 1708K packets, 1136M bytes)
 pkts bytes target     prot opt in     out     source               destination

Je suppose que les octets affichés comme transférés pour 5984 sont dus à ma connexion localhost.

Voici le vidage de l'exécution de netstat -an | grep 5984

tcp        0      0 127.0.0.1:5984          0.0.0.0:*               LISTEN

J'ai configuré couch.ini pour avoir "BindAddress = 0.0.0.0" et redémarré, il devrait donc être à l'écoute sur toutes les interfaces. Lorsque j'exécute "sudo /etc/init.d/couchdb stop", puis j'exécute netstat, cependant, je vois toujours l'entrée ci-dessus. Il semble que CouchDB ne s'arrête pas du tout. Cela peut expliquer mon problème, car cela signifie que cela peut signifier que CouchDB n'a jamais réellement redémarré et n'a jamais pris en compte la modification BindAddress.

J'ai tué manuellement le processus CouchDB et l'ai redémarré. Maintenant, netstat montre:

 tcp        0      0 127.0.0.1:5984          0.0.0.0:*               LISTEN
 tcp        0      0 127.0.0.1:5984          127.0.0.1:35366         TIME_WAIT

Je ne parviens toujours pas à me connecter, même à partir d'une autre machine sur le LAN.

rcampbell
la source
Ce problème existe toujours dans Ubuntu 12. Vous pensez que le mainteneur du paquet aurait résolu ce problème maintenant?
Mark E. Haase

Réponses:

33

Que netstat -an | grep 5984dit-on? Dit-il 127.0.0.1:5984ou *:5984? Si c'est le cas 127.0.0.1, alors couchdb doit être configuré pour écouter toutes les interfaces.

Jim Zajkowski
la source
3
"tcp 0 0 127.0.0.1:5984 0.0.0.0:* LISTEN" est le résultat. J'ai configuré couch.ini pour avoir "BindAddress = 0.0.0.0" et redémarré, il devrait donc être à l'écoute sur toutes les interfaces. Voici la partie étrange cependant: quand je lance "sudo /etc/init.d/couchdb stop" puis que je lance netstat, je vois toujours l'entrée ci-dessus. Il semble que CouchDB ne s'arrête pas du tout. Cela peut expliquer mon problème, car cela signifie qu'il n'a probablement jamais redémarré et n'a probablement jamais pris en compte le changement de
BindAddress
3
oui, je courais en arrière-plan. cela a fonctionné pour moi une fois que j'ai tué couchdb en utilisant couchdb -d et que je l'ai redémarré
Kristian
2
Cette réponse m'a aidé! Je voulais partager que l' on peut facilement modifier ce paramètre en utilisant l'interface Web Futon, sans avoir à rechercher et modifier le fichier de configuration réel sur le disque . Accédez simplement à 127.0.0.1:5984/_utils/config.html(ou à l'URL équivalente pour votre configuration) et double-cliquez sur la valeur de l'option, modifiez, puis cliquez sur la coche verte.
Steve Benner
@SteveBenner Malheureusement 127.0.0.1:5984/_utils/config.html n'apporte rien!
Dr.jacky
@rcampbell Où est couch.ini?!
Dr.jacky
15

Vous devez changer l'adresse bind_add dans /etc/couchdb/default.ini. Redémarrez ensuite le service et réessayez.

filtenborg
la source
3
c'est- à-
Tim Rae
7

J'ai remarqué que pour que cela fonctionne, vous devez tuer manuellement le processus erlang en cours d'exécution pour une raison quelconque. ps ax | grep beamdevrait révéler le processus erlang, vous devriez obtenir quelque chose le long des lignes 0:00 /usr/lib/erlang/ertsquelque part dans la sortie. Si vous tuez ce processus, puis exécutez /etc/init.d/couchdb restartle nouveau fichier de configuration sera chargé.

user54291
la source
Même chose pour moi - seulement après avoir tué le processus de faisceau, puis faites le couchdb -d, puis le service stop / start .. le nouveau paramètre a-t-il pris effet.
Bobby
4

Sur PC / Mac personnel, exécutez cette commande:

ssh -L 5984:localhost:5984 YOUR-SERVER-IP-HERE

prochaine ouverture dans votre navigateur localhost: 5984 / _utils ... Cela fonctionne pour moi

Alexander Ovchinnikov
la source
4

Documents de configuration :

bind_address

Si vous le modifiez à partir du panneau de configuration Futon, vous n'avez rien d'autre à faire (redémarrer la base de données, etc.):

entrez la description de l'image ici

Avant de changer l'adresse bind_address par défaut:

peter@earth:~/$ netstat -an | grep 5984
tcp        0      0 127.0.0.1:5984          0.0.0.0:*               LISTEN

Après être passé à 0.0.0.0:

peter@earth:~/$ netstat -an | grep 5984
tcp        0      0 0.0.0.1:5984          0.0.0.0:*               LISTEN

Remarquez les non-gourous: les ordinateurs qui ne peuvent pas accéder au vôtre (normalement, tout ce qui se trouve en dehors de votre réseau local) ne pourront toujours pas accéder à votre ordinateur (CouchDB ou autre).

Pete
la source
Bien que cette réponse soit assez ancienne, elle semble conduire au bon endroit. Futon a été remplacé par Fauxton, mais je pense que les gens auront l'essentiel de changer le bind_address dans la configuration.
Scott Biggs
2

J'ai rencontré cela, et mon problème a fini par être qu'il y avait, apparemment, couchdb déjà installé dans mon installation d'Ubuntu. J'avais édité les fichiers de configuration sous / etc / couchdb, mais celui qui s'exécutait était en fait en train de tirer config de / usr / local / etc / couchdb.

Le conseil était que les configurations dans / etc / couchdb mentionnaient le canapé 0.10, mais je venais d'installer 1.0.1.

Mat
la source
1

iptables -L -n -vvous montrera vos règles de pare-feu actuelles. Voyez s'il y en a un qui supprime ces paquets avant qu'il n'atteigne votre règle.

Bill Weiss
la source
Aucune règle DENY n'est répertoriée dans le tableau. Sinon, il y a trois ACCEPT, un pour 5984 et deux doublons pour 8080. Je ne sais pas pourquoi il y a deux doublons exacts pour 8080, et quand j'essaie de frapper Tomcat (fonctionnant sur 8080) externe à notre réseau, il échoue, même bien que les machines de notre réseau puissent très bien frapper Tomcat.
rcampbell
Vous voulez montrer la sortie? Retirez votre adresse IP si nécessaire.
Bill Weiss
Que diriez-vous d'exécuter lsof -i -n -P | grep LISTENet de publier cela? Vous recherchez le processus CouchDB et ce à quoi il est lié. Si c'est le cas 127.0.0.1:5984, vous devez configurer CouchDB pour écouter les connexions externes. Si c'est le cas *:5984, eh bien, au moins CouchDB est configuré correctement :)
Bill Weiss
Salut Bill, désolé de ne pas avoir répondu plus tôt. J'ai publié le vidage brut que vous avez demandé à la question.
rcampbell
Et cette lsofsortie?
Bill Weiss