google-cloud-platform - 当我尝试连接到 VPN 服务提供商 (NordVPN) 时,在 Google Compute Engine 中失去对 VM Instance Debian 9 的控制
问题描述
当我尝试连接到 VPN 服务提供商 (NordVPN) 时,在 Google Compute Engine 中失去对 VM Instance Debian 9 的控制。
我有一个 NordVPN 的有效订阅,并且我一直使用这个 VPN 没有问题,无论是从 Windows、Mobile 还是 Linux 本地虚拟机。现在我发现自己有一个项目可以在 Google Cloud 中的不同 VM Debian 9 机器上使用它。我安装了客户端(测试是使用供应商的自定义客户端和带有供应商服务器列表的 openVPN 完成的)但是当我在 VM 和 VPN 之间进行连接时,我失去了对机器的控制,终端挂起。如果我改用本地 VM,则不会出现此问题。我无法再从内部地址和外部地址 ping 它。前提是我不是网络高手。测试是在创建 VM 时启用和禁用 IP 转发的情况下完成的。
我只在网上找到在 GCP 中创建 VPN 服务器的材料,但这不是我的情况。我的情况是虚拟机是客户端,而 VPN 服务器是外部的。
毫无疑问,我相信这种情况是可能的,但我无法理解我必须针对本地 VM 输入更多设置。
谢谢你们。
解决方案
VPN客户端似乎正在从您的VPN提供商接收网络路由,因此VM正在通过VPN路由所有流量,因此所有入站连接都被丢弃。
正如您所描述的,一旦网络访问不可用,您最好的机会就是与串行控制台 [1] 交互。在 [1] 中,您可以逐步了解如何通过 Google Cloud Platform 面板使用串行控制台访问您的 VM。
现在,在 GCP(通常)中,所有虚拟机都只有 1 个 vNIC,并且所有流量都通过该 vNIC 进行路由。当您将 VM 连接到 NordVPN 时,会创建一个新的网络设备 (tun)。如果您的默认路由 [4] 设置为将所有默认流量发送到您的 tun(NordVPN)而不是 GCP 的 vNIC,那么当新的 SYNC [5] 请求到达您的 VM 时,您的 VM 将通过您的网卡 TUN (NordVPN) 而不是 ETH0 (Google VM)。由于连接不是通过 NordVPN 开始的,NordVPN 将断开连接。
我解释的行为完全在意料之中,因为您希望来自 VM 的所有流量都流向 NordVPN,这样您就可以匿名上网。缺点是您的虚拟机将无法接收传入流量。
[1] https://cloud.google.com/compute/docs/instances/interacting-with-serial-console
[2] https://help.ubuntu.com/community/OpenVPN
[3] https://nordvpn.com/es/tutorials/linux/openvpn/
[4] https://www.cyberciti.biz/faq/howto-debian-ubutnu-set-default-gateway-ipaddress/
[5] https://www.inetdaemon.com/tutorials/internet/tcp/3-way_handshake.shtml
[6] https://community.openvpn.net/openvpn/wiki/IgnoreRedirectGateway
推荐阅读
- javascript - 无法理解异步函数中的多个等待
- process - 旧 linux 内核中的子运行优先语义
- reactjs - 是否可以使用 AppSync VTL 使用 BatchPutItem (BatchWriteItem) 在 DynamoDB 上插入超过 25 个项目?
- mysql - 我们可以使用 OR 关键字进行 sql 连接吗?
- mapbox - 如何在一个缩放级别后显示较小的道路?
- c# - 使用 Winapp 驱动程序拖放 UI 元素
- regex - 删除所有流文件属性,明确定义的除外
- php - 从服务器检索 PHP 记录?
- python - 搜索带有 ts 扩展名的文件失败
- web-scraping - 我想使用此查询或代码获取 data.json 中的数据