通过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
>