我有一个基础设施,其中内部子网发出的所有请求都必须通过“向世界开放”子网中的服务器,我的 NAT 实例就在那里(我正在使用 AWS)。
我想要创建一个供内部使用的主机名,也就是说,内部实例对 example.com 发出的任何请求都应由 NAT 实例重定向到某个特定的内部实例。
我的 NAT 实例中已经有 haproxy。它将传入到 example.com 的流量转发到某个内部 ip 地址。如果我使用以下命令更改内部实例/etc/hosts
:
172.31.10.123 example.com
(其中 172.31.10.123 是 NAT 实例的 IP 地址)
来自此类内部实例的请求被正确重定向。问题是我必须/etc/hosts
针对每个实例修改文件,而我并不想这样。
因此,由于所有到 Web 的流量都应通过 NAT 实例,是否可以检查主机目的地是否为 example.com 并将其重定向到我的特定内部实例的 IP 地址?
答案1
您需要使用内部 DNS 并让实例使用此 DNS。您可以通过不同的方式做到这一点:
- 设置 BIND 或其他 DNS 服务器
- 从 AWS 使用 Route53
- 使用内部主机名进行连接
最好的想法是设置您自己的 BIND 服务器,但您需要研究它的 DNS。
在您拥有内部 DNS(BIND 或 Route53)之后,您必须修改 /etc/resolv.conf 或 VPC 的 DHCPOption 以反映这一点,并让您的实例了解您的内部 DNS。
答案2
我不认为我误解了这个问题,但是在你的 haproxy 实例上添加一个 itpables 规则来检查源以及如果它源自你的内部网络,则 NAT 到 172.31.10.123 怎么样?
Haproxy 也具有 acl,您可以使用它根据源 IP 进行重定向,而 iptables 不是一个选项。