【发布时间】:2014-12-16 10:24:10
【问题描述】:
谁能提供一个教程,告诉我如何通过谷歌云中的转发向我的实例添加额外的 IP?
当前的文档太复杂,没有帮助。它没有说明应该在哪里执行命令并且指令过于模糊。
我一直在尝试设置一个新实例,但我不明白如何设置将此实例上的所有流量转发到其他实例。如果有人能阐明这个话题,我将不胜感激。
谢谢。
【问题讨论】:
标签: ssl ip google-compute-engine forwarding
谁能提供一个教程,告诉我如何通过谷歌云中的转发向我的实例添加额外的 IP?
当前的文档太复杂,没有帮助。它没有说明应该在哪里执行命令并且指令过于模糊。
我一直在尝试设置一个新实例,但我不明白如何设置将此实例上的所有流量转发到其他实例。如果有人能阐明这个话题,我将不胜感激。
谢谢。
【问题讨论】:
标签: ssl ip google-compute-engine forwarding
我对您的问题的理解不同(与其他答案相比)。我了解您需要第二个公共 IP 指向已经拥有自己的公共 IP 的实例。如果是这种情况,请按照以下步骤操作:
既然你提到了,让我们从 SDK 开始:
它没有说明应该在哪里执行命令和 说明太模糊了
一旦您拥有downloaded and installed Google Cloud SDK,这些命令就会在您的终端中执行。在 Linux/OS X 中是:
curl https://sdk.cloud.google.com | bash
该链接中有一个包含更多信息的三步指南。
发出命令:
gcloud compute instances list
获取您的实例及其所属区域的列表。记下您需要使用的实例的名称和区域。请注意,以下命令中需要的 REGION 是 ZONE 字段的第一部分。 (例如:ZONE: us-central1-f,则 REGION 为 us-central1)
Create a static public IP接收你要转发的流量:
gcloud compute addresses create NAME
gcloud compute addresses create targ-ip-1
NAME 又在哪里,由您选择。它将提示您输入 region(选择您的实例所在的同一区域)。此命令将返回一个 IP,比如说:W.X.Y.Z
然后你需要create a target-instance:
gcloud compute target-instances create NAME --instance INSTANCE
gcloud compute target-instances create targ-ins-1 --instance instance-1
其中 NAME 是您为目标实例选择的名称。 INSTANCE 是将处理来自一个或多个转发规则的流量的实例的名称。它将提示您输入 zone(选择您的实例所在的同一区域)。
您还可以创建target-pools 以同时指向多个实例,而不仅仅是一个目标实例。
Create the forwarding rule,使用目标实例和刚刚创建的静态公网 IP:
gcloud compute forwarding-rules create NAME --address ADDRESS --target-instance TARGET_INSTANCE --target-instance-zone TARGET_INSTANCE_ZONE --ip-protocol IP_PROTOCOL --port-range [PORT | PORT-PORT]
gcloud compute forwarding-rules create fwd-rule-1 --address W.X.Y.Z --target-instance targ-ins-1 --target-instance-zone us-central1-f --ip-protocol TCP --port-range 5678-5680
地点:
系统将提示您选择该规则所属的区域。
要验证您的规则,您可以像这样list your configured forwarding rules:
gcloud compute forwarding-rules list
您应该开始在您选择的实例中接收指向新公共 IP 的流量。
【讨论】:
ip forwarding设置为on,2)在服务器中,配置sysctl:net.ipv4.ip_forward = 1,以及3)在服务器中,配置iptables以更改原始IP(也许是这样,但正如我所说,这只是给你一个提示,尚未经过测试):iptables -t nat -A POSTROUTING -s <SERVER PRIVATE IP> -d <DESTINATION IP (in case it is static?)> -j SNAT --to-source <PUBLIC IP YOU WANT TO DISPATCH FROM>
根据您的问题,我了解到您希望设置一个路由规则,以便来自一个实例的所有流量都通过另一个实例路由。
设置应该不会太复杂,我能想到的最好的例子就是谷歌帮助中心文档的"Configuring a NAT gateway"指南中使用的设置。
更具体地注意以下内容(从指南中的第 5 步开始):
$ gcloud compute routes create no-ip-internet-route --network gce-network \
--destination-range 0.0.0.0/0 \
--next-hop-instance nat-gateway \
--next-hop-instance-zone us-central1-a \
--tags no-ip --priority 800
我们可以将其分解以更好地了解该规则的确切作用:
--destination-range 0.0.0.0/0 指定用于任何目的地的流量都应受规则影响。我们指的是即将离开我们的实例的流量。--next-hop-instance nat-gateway 部分用于指定触发规则后,应将流量作为下一跳发送到“nat-gateway”实例。--next-hop-instance-zone us-central1-a只是指定我们网关机器的区域。--tags no-ip --priority 800 用于表示只有带有“no-ip”标签的实例才会受到影响(只要它们在创建此规则的网络中)并且我们还设置了“更高”规则的优先级,以确保它优先于其他规则。考虑到以上所有因素,任何带有“no-ip”标签的实例都会将其传出流量传递给“nat-gateway”实例。总之,“nat-gateway”实例自动成为来自标记实例的所有传出流量的“下一个跃点”。
您可以使用类似的设置来确定您的路由规则并根据该规则创建它们,但是请注意,本示例中使用的“nat-gateway”具有特定功能,例如 IP 转发,并且基本上充当路由器并成为使用该规则标记的实例的默认网关。
你还问:如何通过谷歌云中的转发给我的实例添加额外的ip?
从技术上讲,您只需将实例添加到 'target pool',然后创建 forwarding rule,即可将所需流量转发到该实例。转发规则将为您提供一个额外的 IP 地址。只要您在端口 22 或实例设置侦听的任何端口上转发流量,这也可用于通过转发规则的 IP 地址 SSH 到实例。
【讨论】: