Я пытаюсь настроить экземпляр CouchDB 2.0 на моем сервере CentOS 7. У меня он установлен и запущен как служба systemd, и он отвечает своим дружелюбным приветственным сообщением, когда я получаю к нему доступ с сервера, используя 127.0.0.1 или 0.0.0.0
$ curl 127.0.0.1:5984
{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache
Software Foundation"}}
$ curl 0.0.0.0:5984
{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache
Software Foundation"}}
в моем файле local.ini я настроил bind_address на 0.0.0.0
[httpd]
bind_address = 0.0.0.0
Я понял, что если бы у меня был этот адрес привязки, я мог бы подключиться к порту 5984 с любого IP-адреса, открытого в моем брандмауэре.
Я использую firewalld для своего брандмауэра, и я настроил его на открытие порта 5984. Эта конфигурация подтверждается перечислением конфигурации публичной зоны:
$ sudo firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: couchdb2 dhcpv6-client http https ssh
ports: 443/tcp 5984/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
Я также создал службу под названием couchdb2 в /etc/firewalld/services/couchdb2.xml с XML:
<service>
<short>couchdb2</short>
<description>CouchDB 2.0 Instance</description>
<port protocol="tcp" port="5984"/>
</service>
Из того, что я знаю о firewalld, теперь я могу получить соединение на 5984
но когда я скручиваюсь с ноутбука, мое соединение отклоняется:
$ curl my-server:5984 --verbose
* Rebuilt URL to: my-server:5984/
* Trying <my-ip>...
* connect to <my-ip> port 5984 failed: Connection refused
* Failed to connect to my-server port 5984: Connection refused
* Closing connection 0
Когда я подключаюсь к экземпляру couchdb локально через 127.0.0.1 или 0.0.0.0, я вижу ответ 200 в моем журнале couchdb:
$ sudo journalctl -u couchdb2
...
[notice] 2017-06-06T00:35:01.159244Z couchdb@localhost <0.3328.0>
222d655c69 0.0.0.0:5984 127.0.0.1 undefined GET / 200 ok 28
[notice] 2017-06-06T00:37:21.819298Z couchdb@localhost <0.5598.0>
2f8986d14b 127.0.0.1:5984 127.0.0.1 undefined GET / 200 ok 1
Но когда я свернулся со своего ноутбука, в журнале couchdb ничего не обнаружилось для ошибки отказа в подключении. Это наводит на мысль, что проблема может быть в брандмауэре, а не в CouchDB, но я не уверен в этом. Всегда ли в соединении отказывается брандмауэр? Могу ли я получить другую ошибку, если здесь возникнет проблема с экземпляром CouchDB?
Я сам попытался ответить на этот вопрос, посмотрев журналы firewalld. Я включил ведение журнала, отредактировав FIREWALLD_ARGS в / etc / sysconfig / firewalld
FIREWALLD_ARGS=--debug=10
Я перезапускаю firewalld и подтверждаю его работу на уровне отладки 10:
$ sudo systemctl status firewalld
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled;
vendor preset: enabled)
Active: active (running) since Tue 2017-06-13 16:41:26 EDT; 28min ago
Docs: man:firewalld(1)
Main PID: 25209 (firewalld)
CGroup: /system.slice/firewalld.service
└─25209 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid --debug=10
Затем я снова скручиваюсь с ноутбука, получаю сообщение об отказе в соединении и смотрю журналы:
$ tail -n 64 /var/log/firewalld
2017-06-13 16:41:26 DEBUG1: config.ZoneAdded('trusted')
2017-06-13 16:41:26 DEBUG1:
config.zone.8.GetAll('org.fedoraproject.FirewallD1.config.zone')
2017-06-13 16:41:26 DEBUG1: config.ZoneAdded('work')
2017-06-13 16:41:26
DEBUG1:config.GetAll('org.fedoraproject.FirewallD1.config')
Это конфигурационные сообщения после перезапуска firewalld. Об отказе в соединении ничего не регистрируется. Я не уверен, будет ли firewalld регистрировать соединение, которое прошло через CouchDB на 5984, или нет. Может быть, он попал в CouchDB, и это проблема CouchDB?
Насколько мне известно, и CouchDB, и firewalld настроены правильно, но не работают так, как я ожидал. Любая помощь будет принята с благодарностью, независимо от того, знаете ли вы о проблеме или можете ли вы просто помочь мне определить, связана ли проблема с CouchDB или firewalld.
Оказалось, что это проблема CouchDB 2.0. Проблема была действительно в документации: http://docs.couchdb.org/en/2.0.0/config/http.html описывает, как открыть CouchDB для всех хостов. Вы настраиваете:
[httpd]
bind_address = 0.0.0.0
Проблема в том, что документы не обновлялись с CouchDB 1.6.1, и они не ошибаются. Соответствующая конфигурация теперь:
[chttpd]
bind_address = 0.0.0.0
(Это должно лучше подходить как комментарий, но мне все еще не разрешено комментировать)
Я никогда не использовал файлы в /etc/firewalld/services/
как вы это делаете, но я считаю, что вам нужно сделать firewalld
core, чтобы их действительно использовать.
На основе этот сценарий установкиэти команды firewalld должны постоянно включать порты. Вы можете попробовать это?
# get a list of active zones.. you might have more.
firewall-cmd --get-active-zones
# firewalld command to allow this port open to dmz
firewall-cmd --zone=public --add-port=5984/tcp --permanent
# Restart the firewalld service
firewall-cmd --reload
а затем {повторно} запустите демон couchdb, например
/usr/local/etc/rc.d/couchdb start
Надеюсь, поможет!