Первый 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 отключен.
Одна из возможностей заключается в том, что ваш интернет-провайдер блокирует этот порт. Многие используют прозрачные прокси-серверы и прочее.
Другой вариант - вы используете антивирусное ПО на своем клиентском компьютере, которое делает то же самое.
Или ваш маршрутизатор активировал динамические порты или 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 правильный порт и приходят ли пакеты, - это первое, что я бы попробовал.
Относится ли «извне» к общей сети, например, за вашим маршрутизатором / межсетевым экраном?
Это звучит так, как будто ваш межсетевой экран / маршрутизатор блокирует его. Я имею в виду не брандмауэр ОС, а ваш физический брандмауэр.
Вам следует проверить, настроены ли у вас политики, разрешающие внешние соединения, а также настроить NAT (переадресацию портов) на вашем маршрутизаторе.