[英]GCP: How to dynamically change an VM Instance's public IP and keep the connection
我们在 Compute Engine 中有许多用于抓取的 VM 实例,它们可能会在某些站点中被阻止,然后我们尝试使用 NordVPN 更改 IP。 我们正在尝试创建一个 Python 脚本,以便在我们检测到我们被阻止时自动更改 IP。 目前,我们正在使用我们最近发现的这个 Python package : NordVPN-switcher ,但我们收到下一个错误:
Connecting you to Denver ...
An unknown error occurred while connecting to a different server!
An unknown error occurred while connecting to a different server! Retrying with a different server...
Traceback (most recent call last):
File "demo.py", line 13, in <module>
rotate_VPN(instructions) # refer to the instructions variable here
File "/home/eduardo_santos_housecallprosolut/.local/lib/python3.8/site-packages/nordvpn_switcher/nordvpn_switch.py", line 514, in rotate_VPN
raise Exception("Unable to connect to a new server. Please check your internet connection.\n")
Exception: Unable to connect to a new server. Please check your internet connection.
注意:我们有互联网连接。
虚拟机实例也安装了 NordVPN,如果我们手动尝试,我们可以更改它,但由于我们使用 SSH 连接到实例,此时我们更改 IP 连接丢失。
那么,目前的问题是:
注意: scrapers和所有的逻辑都是docker化的,Python版本是3.9
正如我一开始提到的,我们有很多机器用于scrape,我们希望保留每台使用的IP的注册表以便更好地分配,可能使用Redis DB oa small collection in MongoDB。 你怎么看待这件事? 什么是开发这个的好方法?
太感谢了。
如何正确动态更改实例的IP?
没有支持的方法。 一旦 IP 地址更改,任何现有连接都将中断/失败。 需要编写使用 IP 的软件来处理连接失败并尝试重新连接。 这种类型的功能在手机应用程序中很常见,但在桌面/服务器世界中则较少。
谷歌云(以及大多数云供应商)的重要一点是,您的虚拟机没有分配给网络接口的公共 IP 地址。 公共 IP 地址分配给一对一 NAT 的一侧。 这意味着不会发生操作系统和应用程序内的 IP 地址更改通知。
Google 提供了 CLI、SDK 和 API,可用于以编程方式更改分配给实例的 IP 地址。
更改发生后如何保持连接。
两种策略:
添加另一个具有不变的公共 IP 地址的网络接口。 使用该 IP 地址连接到 VM。
创建一个您将使用的公共 IP 地址池。 使用具有跟踪连接地址更改的出色功能的 VPN,例如 WireGuard。 使用 VM 的私有 IP 地址通过 VPN 连接,该地址在公共 IP 地址更改时不会更改。
我会使用第一种策略,因为它的复杂性和潜在问题更少。 但是,一旦您了解了 WireGuard 如何管理连接并实现签名而不是 IP 地址,连接管理就有很多可能性。
我今晚在具有公共 IP 的 VM 上尝试了这个,然后我删除了公共 IP 并且它继续工作。 这可能是解决方案!
您可以使用 IAP连接到您的虚拟机。 像这样在带有 gcloud 的终端中执行此操作:
gcloud compute ssh --tunnel-through-iap -project=$project_name --zone=us-west2-a $instance_name
让我知道。 如果它不适合你,我将删除答案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.