我有一个在本地网络中运行的 postgres 服务器(但我想它可以是任何服务)和一个我想用作访问数据库的中介的服务器(AWS EC2 实例)。
到目前为止,我已经成功建立了从本地服务器到中介的反向 ssh 隧道:
autossh -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -fnN -R 5432:localhost:5432 user@intermedite-host
如果我对服务器进行“转发”隧道,然后只需连接到我的localhost:5432
(在笔记本电脑中),我就可以从笔记本电脑访问数据库。
但是,我想做的是将数据库公开,就好像它在中间服务器中运行一样,只需使用intermedite-host:5432
.
到目前为止,我已经尝试过另一个 ssh 隧道,仅在内部intermedite-host
和iptables
.但我超出了我的深度,无法弄清楚。任何帮助,将不胜感激。
答案1
有一种方法可以满足您的要求(如下),但我想知道这是否真的适合您的情况。
在 AWS 中完成您想要的操作的规范方法是使用 AWS 功能而不是 Linux 主机转发端口。这通常是:
- 使用自己的公共 IP 地址设置运行您的服务 (PostgreSQL) 的 EC2 实例。您可以使用安全组将公共访问限制为仅限一个端口 (5432)。
- 或设置一个NAT网关在 AWS 中并将端口 5432 转发到您的 EC2 计算机。
使用 stunnel 配置
由于您要将其公开到公共互联网,您可能会考虑使用使您的中间机器成为 SSL 网关。你可以设置隧道向互联网提供 SSL 加密端口 5432,并将未加密端转发到您的 PostgreSQL 服务器。
使用 IP 表进行配置
要在 Linux 下执行此操作,您可以将中间计算机设置为 NAT 网关。但挑战在于确保 PostgreSQL 正确理解如何处理出站流量(返回客户端)。您需要:
- 配置 PostgreSQL 服务器以通过中间服务器将所有出站流量(端口 5432)路由到公共 IP 地址
- 使用两个 NAT 配置中间服务器:一个公共端,一个私有端。这样 PostgreSQL 将始终看到您的中间服务器正在与它通信,并且。
我手头没有正确的命令来执行此操作,因此稍后会回来编辑它们。