知识库

使用隧道或 NAT 时通过 Bolt 连接

本文旨在提供一种通过 Bolt 连接到 Neo4j 数据库的方法,通过 Neo4j 浏览器,其中 Bolt 主机与实例本身的 IP 不同,以及在 Bolt 主机 IP/端口动态的情况下。

除非设置 dbms.connector.bolt.advertised_address=<server-name>:<port>,否则 Neo4j 浏览器会使用实例的私有 IP 作为 Bolt 主机 IP,但例如在使用 SSH 隧道访问 Neo4j 实例时,客户端(例如 Neo4j 浏览器)会使用例如 127.0.0.1:port 并更改以前保存的 Bolt 主机 URL 以使用实例 IP,这将无法连接。

一种解决方法是在 neo4j.conf 中指定 dbms.connector.bolt.advertised_address=<server-name>:<port> (其中 <server-name>:<port> 是所需的 Bolt 主机的 DNS 名称和端口)。但是,如果某些环境中的主机/端口每次都自定义,则通过上述配置使用 neo4j.conf 对其进行硬编码可能不可用,因为 Bolt 应该监听通过 SSH 隧道映射到的 IP/端口。防火墙内的某些客户端可能不使用隧道,因此为每个客户端设置隧道以匹配硬编码地址可能不是理想的。

在这种情况下,在 Neo4j 浏览器登录/连接页面提供自定义 dbms.connector.bolt.advertised_address=<server-name>:<port> 可能并不总是尊重该值,例如在页面刷新时,浏览器可能会忘记输入的 Bolt URL 并将其覆盖为默认的广告地址。

为了防止用户指定的配置被覆盖,可以在指向 Neo4j 浏览器的链接中传递 connectUrl 参数

如果托管的 Neo4j 浏览器在 http://browser.neo4j.com 上可用,它会将 Bolt URL 设置为 http://neo4jdb.xxyyzz.com:26000 并尝试连接。因此,connectURL 参数可能对上述用例有用,在这些用例中,客户端使用隧道、网络地址转换和其他非传统访问方法。