【问题标题】:Can I set a static network route for outbound socket in NODE.js?我可以在 NODE.js 中为出站套接字设置静态网络路由吗?
【发布时间】:2014-12-05 21:32:34
【问题描述】:

我的服务器中有三个网卡,其中 VMware“拥有”一个 192.168.114.0 的子网和一个位于 192.168.114.1 的网关。

我有一个“记录器”应用程序在主机 (10.x.x.x) NIC 上运行,第三个 NIC 用于 172.x.x.x 的出站流量,这与此处无关。

我的 Node.js 服务器正在侦听在主 NIC 为 10.x.x.x 的服务器上运行的 192.168.114.1。在 VMware 中,还有其他服务器运行的 IP 都在 192.168.114.x 范围内。

还有一些数据库安装在 10.x.x.x 上,VMware 服务器可以毫无问题地访问这些数据库。

VMware 中的服务器发现 Node.js 服务器正常(已发送 TCP SYN),但随后 Node.js 在 10.x.x.x 接口上发送所有 TCP 包,因此我没有将任何内容返回给 VMware 服务器。

添加到 Windows 的静态路由并不能解决问题,因为 Node.js 仍然选择最低的指标,它似乎始终是主 NIC。

作为测试,我使用 10.x.x.x 地址添加了一个新的 VMware 服务器,然后 Node.js 正确发送了数据包。我还测试了将主 NIC 设置为 192.168.114.x 地址,这也使它工作,所以这显然是一个路由问题。

问题是,如何让 Node.js 路由到选定的 NIC 而不是主要的?

【问题讨论】:

    标签: node.js nic


    【解决方案1】:

    这取决于你在做什么。

    对于net.Serverhttp/https.Server,您可以将接口的IP 作为第二个参数传递给服务器实例的listen()

    对于net.connect()/net.Socket.connect()http/https.request(),您可以传递一个localAddress 选项,其中包含您要使用的接口的IP。

    【讨论】:

    • 感谢您的回复!我在 VMware 接口 (192.168.114.1) 上有“监听”,该子网中的 VMware 服务器“找到”服务器。那就是 TCP SYN 数据包到达 Node.js 服务器。问题是从 Node.js “返回”的 SYN ACK 将发送到 10.x.x.x 的主 NIC,这意味着发送服务器不会“看到”它,因此无法建立 TCP 会话。我需要 SYN ACK 在 SYN 进来的同一个 NIC 上发出...
    • 那更像是一个 ServerFault 问题。听起来您在 node.js 方面已经做好了一切。
    猜你喜欢
    • 2017-11-11
    • 2021-12-03
    • 1970-01-01
    • 2011-12-07
    • 2016-12-30
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多