Почему я не могу подключиться к MongoDB извне, если для него установлен IP-адрес 0.0.0.0 без брандмауэра?

Первый netstat -nltp вывод отображает:

tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      1235/mongod

Таким образом, похоже, что MongoDB работает на порту 27017 и принимает соединение со всех IP-адресов .

Просто чтобы убедиться, что MongoDB работает, я выдал mongo , чтобы убедиться, что я вижу mongoDB:

mongo --port 27017 -u "MyUser" --authenticationDatabase "admin" -p 'MyPassword'

MongoDB shell version v4.2.8
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("00000000-d8c3-422a-9446-38eb624dd88f") }
MongoDB server version: 4.2.8

Теперь я попробовал команду tcptraceroute , чтобы убедиться, что ничто между ними не закрывает мое соединение:

$ sudo tcptraceroute My-Server-IP-Address 27017
Password:
Selected device en0, address 192.168.1.55, port 54871 for outgoing packets
Tracing the path to My-IP-Address on TCP port 27017, 30 hops max
 1  192.168.1.1  8.847 ms  3.853 ms  0.994 ms
 2  * * *
 3  10.101.96.93  26.486 ms  24.977 ms  27.186 ms
 4  10.101.105.14  41.399 ms  30.886 ms  16.155 ms
 5  * * *
 6  10.101.97.57  24.635 ms  29.538 ms  17.545 ms
 7  10.101.117.25  39.587 ms  47.088 ms  62.840 ms
 8  * * *
 9  10.21.251.106  29.101 ms  29.739 ms  34.785 ms
10  10.21.21.22  35.107 ms  19.941 ms  20.011 ms
11  10.21.211.20  49.572 ms  33.257 ms  34.870 ms
12  * * *
13  * * *
14  ex9k1.dc5.fsn1.A-DOMAIN.com (AN-IP-ADDRESS)  93.807 ms  108.962 ms  115.046 ms
15  static.ANOTHER-IP.clients.your-server.it (IP-ADDRESS-IT)  99.938 ms  102.719 ms  109.238 ms
16  static.MY.IP.ADDRESS.clients.your-server.de (MY.IP.ADDRESS) [closed]  173.753 ms  112.972 ms  102.902 ms

На последнем прыжке я вижу [закрыто] флаг.


Чтобы перечислить все правила брандмауэра сервера:

$ sudo iptables -L -n 
-> # sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0
DOCKER-ISOLATION-STAGE-1  all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain DOCKER (1 references)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            172.18.0.3           tcp dpt:80

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination
DOCKER-ISOLATION-STAGE-2  all  --  0.0.0.0/0            0.0.0.0/0

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            0.0.0.0/0

Chain DOCKER-USER (1 references)
target     prot opt source               destination
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Chain ufw-after-forward (0 references)
target     prot opt source               destination

Chain ufw-after-input (0 references)
target     prot opt source               destination

Chain ufw-after-logging-forward (0 references)
target     prot opt source               destination

Chain ufw-after-logging-input (0 references)
target     prot opt source               destination

Chain ufw-after-logging-output (0 references)
target     prot opt source               destination

Chain ufw-after-output (0 references)
target     prot opt source               destination

Chain ufw-before-forward (0 references)
target     prot opt source               destination

Chain ufw-before-input (0 references)
target     prot opt source               destination

Chain ufw-before-logging-forward (0 references)
target     prot opt source               destination

Chain ufw-before-logging-input (0 references)
target     prot opt source               destination

Chain ufw-before-logging-output (0 references)
target     prot opt source               destination

Chain ufw-before-output (0 references)
target     prot opt source               destination

Chain ufw-reject-forward (0 references)
target     prot opt source               destination

Chain ufw-reject-input (0 references)
target     prot opt source               destination

Chain ufw-reject-output (0 references)
target     prot opt source               destination

Chain ufw-track-forward (0 references)
target     prot opt source               destination

Chain ufw-track-input (0 references)
target     prot opt source               destination

Chain ufw-track-output (0 references)
target     prot opt source               destination

И, наконец, мой вывод telnet :

$ telnet MY-IP 27017
Trying MY-IP...
telnet: connect to address MY-IP: Connection refused
telnet: Unable to connect to remote host

Что я сделал не так? Что мне делать, чтобы подключиться к MongoDB извне?


РЕДАКТИРОВАТЬ:

Изменив порт с 27017 на 27018, я смог подключиться к MongoDB , и все работает нормально. Но мне все еще интересно, почему я не могу использовать порт 27017 и что я сделал неправильно в конфигурации iptables ?

ПРИМЕЧАНИЕ: брандмауэр ufw отключен.

0
задан 15 November 2020 в 12:59

2 ответа

Одна из возможностей заключается в том, что ваш интернет-провайдер блокирует этот порт. Многие используют прозрачные прокси-серверы и прочее.

Другой вариант - вы используете антивирусное ПО на своем клиентском компьютере, которое делает то же самое.

Или ваш маршрутизатор активировал динамические порты или NAT, создавая помехи.

заключается в том, что другой процесс прослушивает этот порт:

sudo netstat -tulpn

Это скажет вам, какой процесс прослушивает какой порт. Я видел ваш вывод только для одной строки, но может случиться так, что у вас есть другой процесс, который прослушивает этот порт с ip xxxx, а mongo прослушивает этот порт с 0.0.0.0, но не подходит для xxxx

. Вы также можете использовать:

sudo ss -tunlp

Если Mongo прослушивает правильный порт, запустите tcpdump, чтобы узнать, добирается ли до него ваш компьютер.

sudo tcpdump | grep $YOURIP

Где $ YOURIP - это IP-адрес клиентской машины, значит ваша рабочая станция.

Вы запускаете tcpdump, а затем попытаться установить соединение. Если вы ничего не видите, что-то блокирует соединение.

Знать, прослушивает ли Mongo правильный порт и приходят ли пакеты, - это первое, что я бы попробовал.

0
ответ дан 3 January 2021 в 22:49

Относится ли «извне» к общей сети, например, за вашим маршрутизатором / межсетевым экраном?

Это звучит так, как будто ваш межсетевой экран / маршрутизатор блокирует его. Я имею в виду не брандмауэр ОС, а ваш физический брандмауэр.

Вам следует проверить, настроены ли у вас политики, разрешающие внешние соединения, а также настроить NAT (переадресацию портов) на вашем маршрутизаторе.

2
ответ дан 3 January 2021 в 22:49

Другие вопросы по тегам:

Похожие вопросы: