我有一个使用网络 的 VPC10.10.0.0/16
和一个位于公有子网 ( 10.10.0.0/24
) 中的 VPN 服务器。VPN 使用10.11.254.0/24
范围内的地址。当我连接到 VPN 时,我可以访问公有子网和私有子网 ( 10.10.1.0/24
) 中的主机,因此我相信我已经正确设置了路由表,以便通过 VPN 服务器将发往 VPN 的数据包发回。我已禁用 VPN 服务器上的源/目标检查(这也是访问网络中其他主机所必需的)。
AmazonProvidedDNS 服务器似乎在 VPC 内部正常工作;我可以dig @10.10.0.2 ip-10-10-1-215.ec2.internal
从 VPC 中的主机运行,并得到预期的响应。
但是,如果我dig
从连接到 VPN 的笔记本电脑运行相同的命令,则不会得到任何响应。
通过在 vpn 服务器上运行 tcpdump,我看到A?
数据包来自我的 VPN 地址,并到达10.10.0.2
,但我没有看到任何响应返回。我需要做些什么才能使 DNS 服务器能够回答来自 VPC 地址范围之外的请求?
答案1
这听起来像是一种不寻常的做法,但考虑到他们所实现的内/外分割分辨率魔法,我明白为什么这是有意义的(现在我想起来了)。
EC2 DNS 解析器不太可能回答来自外部 IP 地址的请求,但应该有一个简单的解决方法。
例如,如果您在 vpn 上的 IP 地址是 192.168.2.*,那么,在 VPC 中的 vpn 服务器上...
$ sudo iptables --table nat -A POSTROUTING -s 192.168.2.0/24 -d 10.10.0.2/32 -j MASQUERADE
这会向网络地址转换表添加一条规则,这样在它对从指定源块到指定目标块的数据包做出路由决定后,它不会像往常一样转发数据包,而是会剥离您的 IP 并将其自己的 IP 添加为源地址,并记住该请求。当响应返回时,地址为 vpn 服务器的 IP,它将再次重写地址(这次是目标地址,回到您的地址)并将响应发送回您。
这应该可以实现你想要的。
答案2
您可以启动一个微实例并将其用作 udp 代理。
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 53 -j DNAT --to 10.10.0.2