user315648
user315648

Reputation: 1965

Getting MongoDB on Linux to listen to remote connections

I've successfully installed MongoDB on Windows (on a local machine) as a service, but now I want to move MongoDb to a separate server. So I extracted the tarball to a virtual server on network (running linux).

When I connected to the server ("testmongoserver") using PuTTY from my local machine, I started the mongod server and it told me that it was listening to the default 28017 port. The mongo console is also working and allowed me to create a new database (testdb) and add users to it.

However, I could not access the server from remote. When I type testmongoserver:28017 it doesn't open the HTTP console as localhost:28017 on my local machine does. I also can't connect using official drivers and providing a connectionstring.

What are the neccesarry steps to install MongoDB on Linux, so that I could access it from a remote machine with a connectionstring and use its HTTP console via testmongoserver:28017

Thanks!

Upvotes: 59

Views: 89413

Answers (6)

Javad Asoodeh
Javad Asoodeh

Reputation: 318

To enable remote connections to a MongoDB instance running on Linux and access it via both a connection string and the HTTP console, follow these steps:

  1. Edit the MongoDB Configuration File:

    • Locate mongod.conf, typically in /etc/mongod.conf.
    • Change bindIp from 127.0.0.1 to 0.0.0.0 to listen for connections from all IP addresses.
      net:
        bindIp: 0.0.0.0
        port: 27017
      
    • Note: 27017 is the default MongoDB port. HTTP console runs on 28017.
  2. Enable Security:

    • In mongod.conf, enable authorization:
      security:
        authorization: "enabled"
      
  3. Restart the MongoDB Service:

    • Restart MongoDB to apply new settings:
      sudo service mongod restart
      
  4. Configure the Firewall:

    • Open MongoDB port in the firewall (e.g., iptables for port 27017):
      sudo iptables -A INPUT -p tcp --dport 27017 -j ACCEPT
      
    • Save iptables rules.
  5. Create a MongoDB User:

  6. Test Server Port Accessibility:

  7. Connect Using MongoDB Compass:

    • Connect using MongoDB Compass with the connection string:
    mongodb://username:password@testmongoserver:27017/testdb
    

Access the HTTP console via http://testmongoserver:28017 (if enabled and running on port 28017).

Security Note: Ensure strong user credentials and consider SSL/TLS encryption and network filtering for security.

Upvotes: 3

victorkurauchi
victorkurauchi

Reputation: 1409

Make sure in your /etc/mongodb.conf file you have the following line,

bind_ip = 0.0.0.0

http://jitu-blog.blogspot.com.br/2013/06/allow-mongo-to-connect-from-remote-ip.html

Upvotes: 37

Yves M.
Yves M.

Reputation: 30987

1. Bind IP option

Bind IP is a MongoDB option that restricts connections to specifics IPs.

Have a look at your mongod configuration file, most of the time bind_ip is set to 127.0.0.1 for obvious security reasons. You can:

  1. Add your desired IP by concatenating a list of comma separated values to bind MongoDB to multiple IP addresses.
  2. Remove or comment (with # character) the bind_ip line. But be aware that all remote connection will be able to connect your MongoDB server!

More about bind_ip configuration option: https://docs.mongodb.com/manual/reference/configuration-options/#net.bindIp

Bind IP can also be set as a command argument: http://docs.mongodb.org/manual/reference/program/mongod/#cmdoption--bind_ip

2. Firewall

Check that you are not running behind a firewall

Upvotes: 81

John Culviner
John Culviner

Reputation: 22954

Just had this issue and this fixed it:

Edit /etc/mongod.conf with sudo nano /etc/mongod.conf ensure that the net section looks like below (localhost binding by default doesn't allow for remote access):

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0

Make sure to restart mongod when you are done with above with below (assuming systemd ubuntu 16.04+ etc.):

sudo service mongod restart

Obviously from a security perspective if you are going to be opening up mongo to your network/the world be aware of the implications of this (if any)

Upvotes: 8

J.C. Gras
J.C. Gras

Reputation: 5442

Another problem may be that the mongodb port is not enabled. Check, from another host, the ports enabled on your server. For that you can use the command:

sudo nmap -P0 your_server_ip

You can get an answer like this:

Host is up (0.052s latency).
Not shown: 997 filtered ports
PORT    STATE  SERVICE
22/tcp  open   ssh
80/tcp  open   http
443/tcp closed https

If you use a virtual server in the cloud, as AWS, you need to add a new rule to add mongodb port (27017 by default).

Important: Note that with this configuration anyone can have access to your database

enter image description here

Upvotes: 3

Andrej
Andrej

Reputation: 7504

  1. Run netstat -a on mongo server and check a port.
  2. Check DNS settings and check that linux server allows external connections.
  3. Check that mongodb can accept external/remote connection.

Default port for mongo is 27017. 28017 - port for webstats.

See http://www.mongodb.org/display/DOCS/Security+and+Authentication#SecurityandAuthentication-Ports

Upvotes: 21

Related Questions