通过代理从个人计算机访问 public PostgreSQL 服务器 (Amazon RDS)

Access public PostgreSQL server (Amazon RDS) from personal computer through proxy

我是亚马逊网络服务 (AWS) 的新手。
我已经从 AWS RDS 创建了一个 PostgreSQL:

之后,我会将使用数据库的应用程序推送到 AWS(可能部署到 EKS)。
但是,我想先尝试从我的本地计算机测试数据库服务器。

我还没有尝试在家里用我的笔记本电脑进行测试,但我认为它会连接正常,因为我的笔记本电脑没有使用 HTTP 代理连接到网络。

问题是我想尝试从我公司的 PC 上进行测试,这需要设置 HTTP 代理才能连接到 Internet。 PC 规格:

首先,我尝试使用 psql 命令行:

psql -h database-1.XXXX.rds.amazonaws.com -U postgre
>  Unknown host

set http_proxy=http://user:password@my_company_proxy:3128
set https_proxy=http://user:password@my_company_proxy:3128
psql -h database-1.XXXX.rds.amazonaws.com -U postgre
>  Unknown host

set http_proxy=http://my_second_company_proxy:3128
set https_proxy=http://my_second_company_proxy:3128
psql -h database-1.XXXX.rds.amazonaws.com -U postgre
>  Unknown host

然后,我尝试使用 pgAdmin 工具。

internet post开始说我们可以使用“SSH隧道”来输入代理:

但是,会显示错误信息:

所以,任何人都可以帮助建议我们是否可以通过 HTTP 代理连接到 public PostgreSQL 服务器?

我认为问题是 Postgres 使用 plain TCP/IP protocol 而您正在尝试使用 HTTP 代理。此外,您正在尝试针对您的 HTTP 代理服务器创建 SSH 隧道,但这将不起作用。

所以我建议采用以下解决方案:

  1. 使用 TCP 代理而不是 HTTP 代理
  2. 创建一个 EC2 或任何可以从您的公司网络进行 SSH 访问并可以访问 public 互联网的实例。这样您就可以通过该实例创建 SSH 隧道来实现您的目标。

注意:确保你的 PostgreSQL 可以从 public 互联网访问(虽然这通常是个坏主意,但它超出了这个问题的范围)有时安全组配置阻止它从 public 连接互联网。

只需从您的 RDS 添加安全组中的所有端口 (5432,3128...) 并指定您的 IP。不要忘记“/32”

让我补充一点,“未知主机”通常表示您没有解析 DNS 主机名。此外,您的 HTTP 代理不应干扰与数据库的连接,因为它们不在端口 80 或 443 上。您可以尝试一些事情(假设您在 windows)子中实际 url:

nslookup database-1.XXXX.rds.amazonaws.com
telnet database-1.XXXX.rds.amazonaws.com 5432

您还应该检查附加到您的 RDS 的安全组,并确保您已经在端口 TCP/5432.

上打开了您来自的 IP 地址

最后检查您的 VPC 是否启用了 DNS 和主机名。 https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-updating