无法从私有子网中的实例连接到 Internet

Posted

技术标签:

【中文标题】无法从私有子网中的实例连接到 Internet【英文标题】:Cannot connect to Internet from instance in private subnet 【发布时间】:2019-07-28 06:08:36 【问题描述】:

我在 Azure 中设置了一个最小环境,其中一个实例 (Linux) 在一个私有子网中,一个虚拟网络网关通过 IPSec 连接。我按照Azure docs 中的说明进行操作,我的设置应该与示例中的设置相同。

我在 Terraform 中完成了所有这些操作,并且我使用 strongSwan 作为 *** 客户端连接到网关。我可以毫无问题地通过 strongSwan 建立 *** 连接。我在 FrontEnd 子网中创建了我的测试实例。为了通过 SSH 访问我的机器,我添加了另一个 NSG 规则以允许访问端口 22。到目前为止一切正常。

我的问题是,我无法从这台机器访问互联网。

到目前为止我检查过的内容:

DNS 解析工作正常 Linux 将其默认路由设置为 Azure 网关地址 (192.168.1.1) NIC 连接到 NSG,它只有默认的出站流量规则(允许所有出站流量) 没有自定义路由规则 根据Azure docs SNAT/PAT 应该会自动应用到我的场景中。

我错过了什么吗?

编辑:我忘了说实例的网卡只有一个私有IP。

【问题讨论】:

确保您没有在 Vnet 上配置自定义用户定义路由。 docs.microsoft.com/en-us/azure/virtual-network/… 【参考方案1】:

您可能无法从该 Azure VM 正确验证 Internet 连接。我有与question 相同的场景。您可以尝试在 Azure 机器上通过 ping bing.com 验证这一点。有些网站似乎无法ping通,但是您可以直接通过Web Browser或curl访问这些网站以从互联网上下载内容。

我已经在 Windows 本地桌面上使用一个 Azure VNet 建立了 P2S *** 连接,该 VNet 有一个 GatewaySubnet 和一个 VMsubnet。 VMsubnet 中的一个 windows 虚拟机和一个 ubuntu 虚拟机。两个 VM 都没有实例级公共 IP。

通常,Azure VM 在同一子网中本地有一个系统默认网关。此网关有助于路由来自主网络接口的所有出站流量。如果设置了 *** 网关,Azure 将自动生成到 P2S 本地子网的路由。默认情况下,effective routes 中还有一条默认路由0.0.0.0/0 到 Internet。

我可以在网络资源管理器中访问google.combing.com,但不能直接ping google.com,可以在Windows VM 上ping bing.com

同样的情况,我也不能直接pinggoogle.com,但是可以在Linux VM上pingbing.com或者curl www.google.com

希望对您有所帮助,如果您有任何问题,请告诉我。

【讨论】:

感谢您指出这一点。 curl/wget 正在按预期工作。我知道 google 不会响应 ping,所以我通常使用其他网站或 google DNS 服务。奇怪的是,我似乎无法在我的设置中 ping 任何公共 IP。知道这是为什么吗?我的有效出站规则说允许所有到 Internet 的出站流量。这不包括 ICMP 包吗? 因为默认情况下 Azure 在 Azure 负载均衡器级别阻止 ICMP,以避免任何有针对性的 Ping/ICMP 洪水攻击,这是一种 DDoS 攻击。参考this1和this2和this3

以上是关于无法从私有子网中的实例连接到 Internet的主要内容,如果未能解决你的问题,请参考以下文章

如何将面向公众的负载均衡器连接到私有 VPC 中的 EC2 实例

如何使用 mySQL 工作台连接到 AWS 私有子网 VPC 中的 RDS

如何从ec2实例ssh到另一个ec2实例而不将公钥存储在其中一个实例中?

VPC 中私有子网中 EC2 实例的 Amazon ELB

如何使用私有 IP 连接到 EC2 上的后端

如何从亚马逊 vpc 连接到外部世界?