Почему я не могу получить доступ к своему экземпляру CouchDB извне на сервере Ubuntu 9.04?


27

Обновление: у меня это работает сейчас. Ответ Джима Зайковски помог мне обнаружить, что мои вызовы перезагрузки /etc/init.d/couchdb фактически не перезагружали экземпляр. После того, как я вручную убил процессы CouchDB и запустил новый экземпляр, он выбрал необходимое изменение BindAddress.

Я установил CouchDB через

aptitude установить couchdb

С моего сервера я могу подключиться через

telnet localhost 5984

и выполнить команды RESTful. Когда я пытаюсь получить доступ к серверу с другого компьютера в нашей сети или с компьютера, находящегося за пределами нашей сети, я получаю сообщение об ошибке сброса соединения . Я настроил переадресацию портов на маршрутизаторе, и в противном случае сервер доступен через Apache, Tomcat, SSH и т. Д.

Я новичок в Linux / Ubuntu, поэтому я не был уверен, был ли брандмауэр по умолчанию, блокирующий соединение, поэтому я запустил:

iptables -A INPUT -p tcp --dport 5984 -j ПРИНЯТЬ

но это не помогло

Вот дамп от запуска 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

Я предполагаю, что байты, показанные как переданные для 5984, происходят из-за моего локального соединения.

Вот дамп из запущенного netstat -an | grep 5984

tcp        0      0 127.0.0.1:5984          0.0.0.0:*               LISTEN

Я настроил файл couch.ini на «BindAddress = 0.0.0.0» и перезагрузил его, поэтому должен прослушивать все интерфейсы. Когда я запускаю «sudo /etc/init.d/couchdb stop», а затем запускаю netstat, я все равно вижу приведенную выше запись. Похоже, что CouchDB на самом деле не останавливается вообще. Это может объяснить мою проблему, потому что это может означать, что CouchDB фактически никогда не перезагружался и никогда не получал изменение BindAddress.

Я вручную убил процесс CouchDB и снова запустил его. Теперь netstat показывает:

 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

Я все еще не могу подключиться, даже с другой машины в локальной сети.


Эта проблема все еще существует в Ubuntu 12. Вы думаете, что сопровождающий пакета уже исправил бы это?
Марк Э. Хаас

Ответы:


33

Что netstat -an | grep 5984говорит? Это говорит 127.0.0.1:5984или *:5984? Если это так 127.0.0.1, то couchdb должен быть настроен на прослушивание всех интерфейсов.


3
"tcp 0 0 127.0.0.1:5984 0.0.0.0:* LISTEN" является результатом. Я настроил файл couch.ini на «BindAddress = 0.0.0.0» и перезагрузил его, поэтому он должен прослушивать все интерфейсы. Но вот странная часть: когда я запускаю «sudo /etc/init.d/couchdb stop», а затем запускаю netstat, я все еще вижу приведенную выше запись. Похоже, что CouchDB на самом деле не останавливается вообще. Это может объяснить мою проблему, потому что это означает, что она, вероятно, никогда не перезагружалась и, вероятно, никогда не воспринимала изменение
BindAddress

3
да, я работал в качестве фонового процесса. это сработало для меня, как только я убил couchdb с помощью couchdb -d и перезапустил его
Кристиан

2
Этот ответ помог мне! Я хотел поделиться, что можно легко изменить эту настройку, используя веб-интерфейс Futon, без необходимости находить и редактировать фактический файл конфигурации на диске . Просто перейдите к 127.0.0.1:5984/_utils/config.html(или эквивалентному URL-адресу для вашей настройки) и дважды щелкните значение параметра, измените его и нажмите зеленую галочку.
Стив Беннер

@SteveBenner К сожалению 127.0.0.1:5984/_utils/config.html ничего не приносит!
Dr.jacky

@rcampbell Где находится couch.ini ?!
Dr.jacky


7

Я заметил, что для того, чтобы это работало, нужно по какой-то причине вручную убить запущенный процесс erlang ps ax | grep beamДолжен показать процесс erlang, вы должны получить что-то вроде чего- 0:00 /usr/lib/erlang/ertsто на выходе. Если вы убьете этот процесс, а затем запустите /etc/init.d/couchdb restartновый файл конфигурации будет загружен.


То же самое для меня - только после завершения процесса луча, затем выполните couchdb -d, а затем остановите / запустите службу ... вступили ли в силу новые настройки.
Бобби

4

На домашнем ПК / Mac запустите эту команду:

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

следующий откройте в вашем браузере localhost: 5984 / _utils ... у меня работает


4

Документация по конфигурации :

bind_address

Если вы измените его с панели конфигурации Futon, вам больше ничего не нужно делать (перезагрузка БД и т. Д.):

введите описание изображения здесь

Перед изменением bind_address по умолчанию:

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

После изменения на 0.0.0.0:

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

Обратите внимание, что не гуру: компьютеры, которые не могут получить доступ к вашему (обычно к чему-либо за пределами вашей локальной сети), все равно не смогут получить доступ к вашему компьютеру (CouchDB или что-либо еще).


Хотя этот ответ довольно старый, похоже, он ведет в нужное место. Futon был заменен на Fauxton, но я думаю, что люди получат суть изменения bind_address в конфигурации.
Скотт Биггс

2

Я столкнулся с этим, и моя проблема закончилась тем, что, по-видимому, в моей установке Ubuntu уже был установлен couchdb. Я редактировал файлы конфигурации в / etc / couchdb, но тот, который был запущен, фактически вытягивал конфигурацию из / usr / local / etc / couchdb.

Подсказка заключалась в том, что в конфигах в / etc / couchdb упоминается couch 0.10, но я только что установил 1.0.1.


1

iptables -L -n -vпокажет вам ваши текущие правила брандмауэра. Посмотрите, есть ли один, который отбрасывает эти пакеты, прежде чем он доберется до вашего правила.


В таблице нет правил DENY. Иначе, есть три ПРИНЯТЬ, один для 5984 и два дубликата для 8080. Я не уверен, почему есть два точных дубликата для 8080, и когда я пытаюсь поразить Tomcat (работает на 8080) вне нашей сети, это терпит неудачу, даже хотя машины в нашей сети могут ударить Tomcat нормально.
rcampbell

Ум, показывающий вывод? Выньте свой IP при необходимости.
Билл Вайс

Как насчет запуска lsof -i -n -P | grep LISTENи публикации этого? Вы ищете процесс CouchDB и с чем он связан. Если это так 127.0.0.1:5984, вам нужно настроить CouchDB для прослушивания внешних подключений. Если это *:5984, ну, по крайней мере, CouchDB настроен правильно :)
Билл Вайс

Привет, Билл, извини, что не ответил раньше. Я отправил сырой дамп, который вы запросили на вопрос.
rcampbell

Как насчет этого lsofвывода?
Билл Вайс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.