来自 DigitalOcean 的 IP 和来自 Google Cloud 的 IP 有什么区别?

Whats the difference between IP's from DigitalOcean and IP's from Google Cloud?

我对来自 Digital Ocean 和 Google Cloud 的 IP 有一些疑问,我对 IP 和网络知之甚少,我有两个应用程序,一个是 运行ning 在 DigitalOcean 服务器上(dropplet)另一个是 运行ning 在 Google 云的 VM 实例上,我试图在每台服务器上设置代码服务器。

在 DigitalOcean 的 droplet 中,我成功配置了代码服务器,当我 运行ning 命令 code-server 代码服务器在地址上联机时:http://127.0.0.1:8080 所以我不能'无法进入应用程序,因为它是 Droplet 的本地 IP,所以出于显而易见的原因,我无法在浏览器上写入该 IP,做了一些研究,我发现代码服务器的标志 --bind-addr,然后我尝试了这个命令:code-server --bind-addr=192.231.24.04:8080(该 IP 是一个 IP 示例)并且它有效,我能够访问在我的导航器 http://192.231.24.04:8080 中编写的代码服务器,而且我还可以使用 mydomain.com:8080

在 Google 云中,我尝试做同样的事情,但我做不到,我在 VM 实例上成功配置了代码服务器,当我 运行 code-server 代码服务器上网地址:http://127.0.0.1:8080(与 DigitalOcean 中一样)显然,这是本地 IP 的 VM 实例,然后我继续做我在 DigitalOcean 中做的同样的事情,使用 ---bind-addr 标志,所以我在控制台上写了这个:code-server --bind-addr=104.652.18.64:8080(那个 IP 是一个 IP 示例)和控制台是这样的:error listen EADDRNOTAVAIL: address not available 104.652.18.64:8080,我以为 Google 云阻塞了端口 8080,所以我解锁了它,但仍然没有用,做了一点研究我发现我必须使用 IP 0.0.0.0:8080,所以我写了这个命令:code-server --bind-addr=0.0.0.0:8080 并且我尝试使用 http://104.652.18.64:8080 在我的浏览中访问并且它有效......我不知道为什么,我也尝试使用 myseconddomain.com:8080 也有效

所以我不知道有什么区别,IP 0.0.0.0 是什么意思?

我回到了 DigitalOcean droplet 并尝试做同样的事情,我写道:code-server --bind-addr=0.0.0.0:8080 并且在 digital ocean droplet 中说:error listen EADDRINUSE: address already in use 0.0.0.0:8080

所以...有什么区别?

为什么 DigitalOcean 的工作方式 Google Cloud 不工作,而 Google Cloud 的工作方式 DigitalOcean 不工作?

感谢您的回复

Google云的网络有区别internal and external IP addresses。特别是,GCE VM 实际上不会有与外部可见 IP 地址的接口。相反,Google 云网络将从外部 IP 地址透明地路由到内部 IP 地址,假设该端口的防火墙允许此类路由。因此,当您尝试启动代码服务器专门侦听外部 IP 地址时,VM 不知道它指的是什么,因为 VM 内部不存在该接口。

通常在主机上(在给定接口上启动服务的上下文中),0.0.0.0 refers to any/all of the IP addresses on the machine。在你的情况下,这意味着你已经启动代码服务器监听内部 IP 地址,并且由于你已经删除了 GCP 防火墙中的 8080 块,GCP 网络会将请求路由到外部地址到 VM。

我不确定 DigitalOcean,但我认为它们没有不同的内部和外部 IP 地址,因此当您启动代码服务器直接侦听外部 IP 地址时,它会附加到正确的地址.您在尝试 0.0.0.0 时遇到的错误表明其他东西已经在端口 8080 上侦听。检查您是否首先停止了所有先前的代码服务器进程,以及可能已经在任何 IP 上侦听 8080 的任何其他东西。