通过IPv6网络连接到外部的MongoDB

由于后端数据库也拥有全球IPv4地址,而且IPv6资源充足,我们决定改为使用IPv6。据说MongoDB默认情况下禁用了IPv6,我们将启用它。

    • OS

Ubuntu 14.04

MongoDB

2.6.5

设定

需要在mongod.conf中写入启用IPv6选项。
ipv6 = true是启用选项(大概)。
此外,默认情况下,bind_ip = 127.0.0.1,无法从外部访问,因此需要写入要监听的IP地址。
或者,如果要在任何接口上监听,可以将bind_ip的行注释掉。
更改设置后,只需重新启动即可。

# vim /etc/mongod.conf
logpath=/var/log/mongodb/mongod.log
logappend=true
port = 27017
+ ipv6 = true
# service mongod restart
Restarting database: mongod.

我本以为这样应该可以用的,所以从外部尝试访问了一下,但是始终无法使用。

# lsof -i:27017
COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mongod  8434 mongodb    8u  IPv4  12214      0t0  TCP *:27017 (LISTEN)
mongod  8434 mongodb   11u  IPv6  12215      0t0  TCP *:27017 (LISTEN)

嗯,結果發現在所有介面都正確地LISTEN。
稍微思考後,我意識到問題出在iptables上。
由於是IPv6,所以是ip6tables。
我將開放這個27017端口。

$ ip6tables -A INPUT -p tcp --dport 27017 -j ACCEPT

这应该可以从外部使用。

客户的指令 de

顺便说一下,如果客户端的命令没有添加–ipv6,它就不会以IPv6的方式进行访问。请将写有IPv6地址的部分根据需要进行重新解释。

$ mongo IPv6のアドレス:27017/test
MongoDB shell version: 2.4.9
connecting to: IPv6のアドレス:27017/test
Thu Oct 23 02:48:09.538 getaddrinfo("IPv6のアドレス") failed: Address family for hostname not supported
Thu Oct 23 02:48:09.539 Error: couldn't connect to server IPv6のアドレス:27017 at src/mongo/shell/mongo.js:147
$ mongo IPv6のアドレス:27017/test --ipv6
MongoDB shell version: 2.4.9
connecting to: IPv6のアドレス:27017/test
>
bannerAds