V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐工具
RoboMongo
推荐书目
50 Tips and Tricks for MongoDB Developers
Related Blogs
Snail in a Turtleneck
chenqh
V2EX  ›  MongoDB

关于 xinetd 做 mongodb 端口映射遇到的问题

  •  
  •   chenqh · 2017-06-29 10:51:48 +08:00 · 3264 次点击
    这是一个创建于 2465 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在的情况是这样的
    我在腾讯云上买了一个 mongodb 数据库 M 和一个云服务器 E,两个组成一个私有网络 ,
    在云服务器 E 上使用 mongo 客户端连接,是能够连上 mongodb 数据库的。
    现在有个问题,我想在本地访问 mongodb 数据库,也就是外网访问云私有网络中的 mongodb 数据库。
    所以我的做法是

    1. 在云服务器 E 的安全组添加 一个 TCP:9001 端口允许的规则。
    2. 在去服务器 E 上安装 xinetd,配置如下
    service mongo-portmap {
        id = 100
        disable = no
        type = UNLISTED
        socket_type = stream
        protocol = tcp
        wait = no
        redirect =10.0.0.17  27017
        bind = 0.0.0.0
        port = 9001
        user = cqh
        group = cqh
        flags = NODELAY KEEPALIVE NOLIBWRAP IPv4
        log_type = FILE /data/log/xinetd/mongo-portmap.log
        cps = 100 30
    }
    
    
    1. 在本地使用 mongo shell 进行连接,命令如下 :
      mongo 云服务器 IP:9001/admin -u 用户名 -p 密码 -verbose
      但是却显示有错误,错误结果如下
    MongoDB shell version: 2.4.9
    Thu Jun 29 10:26:57.684 versionArrayTest passed
    connecting to: 服务器 IP:9001/admin
    Thu Jun 29 10:26:57.707 creating new connection to:服务器 IP:9001
    Thu Jun 29 10:26:57.707 BackgroundJob starting: ConnectBG
    Thu Jun 29 10:26:57.741 connected connection!
    Thu Jun 29 10:26:57.890 User Assertion: 18:{ ok: 0.0, errmsg: "auth failed", code: 18 }
    Thu Jun 29 10:26:57.891 Error: 18 { ok: 0.0, errmsg: "auth failed", code: 18 } at src/mongo/shell/db.js:228
    Thu Jun 29 10:26:57.891 User Assertion: 12514:login failed
    Thu Jun 29 10:26:57.891 freeing 1 uncollected N5mongo20DBClientWithCommandsE objects
    exception: login failed
    
    

    当然我能确保,用户名和密码是对的,我是直接复制过来的
    ,现在的问题是我怎么知道哪里错了呢,我连 xinetd 的日志都没有看到,我是 ubuntu16.04 apt-get install 安装 的 xinetd

    第 1 条附言  ·  2017-07-21 18:51:43 +08:00

    结贴,发现方式错了,
    起初我以为xinetrinet的升级版,其实就是用错了软件,使用rinet很简单了
    再附上答案吧
    /etc/rinetd.conf 添加 一行就好了

    0.0.0.0 9001 mongo服务器ip  27017
    

    然后重启rinetd, sudo service rinetd restart
    这样就可以通过外网9001端口访问mongo了,这个9001端口在云服务器的安全组要开户链接

    5 条回复    2017-06-29 20:43:24 +08:00
    tempdban
        1
    tempdban  
       2017-06-29 11:02:07 +08:00   ❤️ 1
    跑个题,iptables
    chenqh
        2
    chenqh  
    OP
       2017-06-29 12:03:59 +08:00 via iPhone
    @tempdban 好的 我试下
    tempdban
        3
    tempdban  
       2017-06-29 12:09:31 +08:00 via Android
    iptables 搞端口映射 要两条规则 SNAT DNAT
    chenqh
        4
    chenqh  
    OP
       2017-06-29 12:19:54 +08:00 via iPhone
    @tempdban 好的我先看看春 iptables 先
    chenqh
        5
    chenqh  
    OP
       2017-06-29 20:43:24 +08:00
    @tempdban 大神能给个例子吗,弄了一整天了,还是不行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4988 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 09:38 · PVG 17:38 · LAX 02:38 · JFK 05:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.