我有一个使用10.10.0.0/16networking的VPC和公有子网( 10.10.0.0/24 )中的VPN服务器。 VPN使用10.11.254.0/24范围内的地址。 当我连接到VPN时,我可以访问公有子网和私有子网( 10.10.1.0/24 )中的主机,所以我相信我已经正确地build立了路由表,以便通过VPN发回绑定到VPN的数据包服务器。 我禁用了VPN服务器上的源/目标检查(也需要能够访问networking中的其他主机)。
AmazonProvidedDNS服务器似乎在VPC内正常工作; 我可以从VPC中的主机运行dig @10.10.0.2 ip-10-10-1-215.ec2.internal ,并获得预期的响应。
但是,如果我运行从可能笔记本电脑,连接到VPN相同的dig命令,我没有得到任何回应。
从在vpn服务器上运行tcpdump,我看到A? 数据包来自我的VPN地址,去10.10.0.2 ,但我没有看到任何回应回来。 有什么我需要做的,使DNS服务器回答来自VPC地址范围外的请求?
这听起来像是一种不寻常的方式,但是考虑到他们已经实施的内部/外部拆分解决方法,我可以明白为什么它是有意义的(现在我想到了)。
EC2 DNSparsing程序不太可能应答来自外部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
这会在networking地址转换表中添加一条规则,以便在对指定源块的数据包进行路由决策之后,不再像往常一样转发数据包,而是删除IP并添加它自己的IP作为源地址,并会记住请求。 当响应返回到vpn服务器的IP地址时,它会再次将地址(目的地,这次返回到你的地址)重新发送给你。
那应该完成你想要的。
你可以启动一个微型实例,你可以使用它作为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