说我的地下室有一台服务器,我想复制到RDS数据库。为此,我在pip install numpy==1.16
文件中添加了一个用户,例如:
pg_hba.conf
那行得通!直到IP地址更改。
所以我尝试将AWS主机放在那里:
hostssl all replica 64.222.124.22 md5
但是这样的日志失败了:
hostssl all replica my-db.random-string.us-west-2.rds.amazonaws.com md5
当我在IP上执行反向DNS请求时:
2019-03-01 11:50:13.205 PST [28518] replica@server DETAIL: Client IP address resolved to "ec2-64-222-124-22.us-west-2.compute.amazonaws.com", forward lookup not checked.
2019-03-01 11:50:13.251 PST [28519] replica@server FATAL: no pg_hba.conf entry for replication connection from host "64.222.124.22", user "replica", SSL off
因此,我发现无法将连接的IP地址解析回我在↪ host 64.222.124.22
49.221.155.35.in-addr.arpa domain name pointer ec2-64-222-124-22.us-west-2.compute.amazonaws.com.
文件中输入的主机名。我可以像这样将根域名放在其中:
pg_hba.conf
但是,如果所有的AWS都可以连接到我的服务器,则无法达到限制单个IP地址/主机的目的。
这里是否有技巧来使解析与AWS的主机名一起正常工作?
我真的不希望在两个服务器之间建立代理,只是给其中一个提供静态IP。我查看了AWS弹性IP,但无法将它们分配给RDS实例。
答案 0 :(得分:2)
Postgresql在验证pg_hba.conf时首先进行反向DNS查找。因此,重要的是反向DNS。这也意味着这行不通:
hostssl all replica .rds.amazonaws.com md5
您可以这样做:
hostssl all replica .us-west-2.compute.amazonaws.com md5
但是,当您正确停留时,这将留下一个非常开放的配置,该配置将允许在该AWS区域中运行的任何计算机使用正确的md5密码进行连接。
从本质上讲,有两个不同的解决方案。
选项1-专用网络和VPN
使用AWS VPC,您可以为RDS实例设置专用网络和子网组,在其中您可以控制IP空间中为其分配IP地址。假设您有一个10.10.10.0/24
子网。这意味着您可以随后在您的10.10.10.0/24
中发布pg_hba.conf
。这将需要在VPC和您的服务器之间建立某种VPN。
根据地下室中网络设备的类型,您可能可以使用AWS Site-to-site VPN。另外,您可以使用其他解决方案货架解决方案,例如OpenVPN或WireGuard。
选项2-动态更新pg_hba.conf
如果您不想要VPN的额外复杂性。您可能每隔5分钟就有一个脚本查询主机名my-db.random-string.us-west-2.rds.amazonaws.com
,然后根据需要更新pg_hba.conf并将SIGHUP信号发送到postgres。这不是最漂亮的解决方案,但应允许它半自动运行。如果不需要在该连接上停机,那么这不太可能是理想的解决方案。
答案 1 :(得分:-1)
现在,在这里复制(嘿)这个想法,因为我知道如何实际“回答” SO上的问题。
另一种可能性是使用动态DNS提供程序。我以前没有想到这一点,因为它基本上只在您想使用连接DHCP的连接在家中托管服务器时使用,所以我实际上不知道它的工作原理。
本质上:
我认为更新应该几乎是立即的,但是我不确定传播延迟是否仅限于主机名或A记录实际上是否沿途被缓存(从而绕过名称服务器查找)。
几个潜在问题(除了传播延迟):
我认为,如果动态DNS提供程序具有API,则可以使用相当简单的Lambda函数和事件触发器来解决问题#1。
但这是权宜之计。我认为VPN和代理解决方案绝对是更可靠的选择。