![通过公有 IP 地址访问私有 IP](https://linux22.com/image/775932/%E9%80%9A%E8%BF%87%E5%85%AC%E6%9C%89%20IP%20%E5%9C%B0%E5%9D%80%E8%AE%BF%E9%97%AE%E7%A7%81%E6%9C%89%20IP.png)
我在 ubuntu OS 中为应用程序和数据库提供了两个 IP 地址。一个是公共 IP 地址,另一个是私有 IP 地址。我该如何将私有 IP 地址添加到公共 IP 地址中,以便我可以通过公共服务器上的应用程序访问其上的数据库。
答案1
我相信你问的是如何将数据库的端口从你的公共 IP 传递到你的私有 IP?这样的端口转发?你连接到数据库的同一端口是否应该可以从网络内部或外部访问同一服务器、同一端口?
在这种情况下,端口转发很可能就是您要找的东西,几乎所有路由器都在某种程度上具备此功能。在大多数消费级路由器中,他们称之为“端口转发”,它会询问您想要在 WAN 上监听哪个端口,然后询问您希望将其转发到哪个 LAN IP/端口。
现在..根据所讨论的数据库(可以说是大多数),这可能不是最好的,或者更差的远程安全设计原理,因为您可能只想公开一些数据模型,而不是用于直接查询的数据库。
正如其他人所说,要进一步解决需要更多有关设置和意图的信息,但当我阅读该问题时,似乎端口转发/ PAT 就是您所要求的。
答案2
最直接的解决方案是更新数据库配置以监听公共 IP。例如,使用 PostgreSQL,您可以编辑 /etc/postgresql/13/main/postgresql.conf 并进行设置,listen_addresses
使其包含您的公共地址。确保数据库需要身份验证和加密。如果适用,请更新防火墙以限制访问。
如果您需要临时访问,ssh -L $local_port:localhost:$database_port $public_ip
有一个很有用的端口转发功能。现在,您可以通过特定于数据库的端口访问本地计算机$local_port
。PostgreSQL$database_port
的默认端口是5432
。
答案3
请指定您使用的数据库引擎(MySQL、PostgreSQL 等)。还请指定它运行在哪个操作系统上。答案取决于引擎类型和操作系统。
大多数数据库引擎都允许您将其配置为“监听”特定接口。根据您的情况,您可以让引擎监听公共接口和私有接口。您可以让它监听两个接口或其中一个接口。根据您的情况,您需要它监听公共接口(您可能还需要它监听私有接口,具体取决于需要访问它的其他内部系统)。如果您要让数据库引擎监听公共接口,我建议您使用防火墙,仅通过 IP 白名单限制对某些外部系统的访问。
对于 PostgreSQL 请参见:https://www.postgresql.org/docs/current/runtime-config-connection.html(参见 listen_addresses)对于 Linux 上的 MySQL,请参见:https://linuxize.com/post/mysql-remote-access/
答案4
您可以这样做,只需在通过公共 IP 连接到互联网的计算机/路由器上创建端口转发。
例如
80 -> 192.168.1.1:80 443 -> 192.168.1.1:443
3306-> 192.168.1.2:3306