【问题标题】:adding ip with forwarding rules in google cloud在谷歌云中添加带有转发规则的 ip
【发布时间】:2014-12-16 10:24:10
【问题描述】:

谁能提供一个教程,告诉我如何通过谷歌云中的转发向我的实例添加额外的 IP?

当前的文档太复杂,没有帮助。它没有说明应该在哪里执行命令并且指令过于模糊。

我一直在尝试设置一个新实例,但我不明白如何设置将此实例上的所有流量转发到其他实例。如果有人能阐明这个话题,我将不胜感激。

谢谢。

【问题讨论】:

    标签: ssl ip google-compute-engine forwarding


    【解决方案1】:

    我对您的问题的理解不同(与其他答案相比)。我了解您需要第二个公共 IP 指向已经拥有自己的公共 IP 的实例。如果是这种情况,请按照以下步骤操作:

    1. 既然你提到了,让我们从 SDK 开始:

      它没有说明应该在哪里执行命令和 说明太模糊了

    一旦您拥有downloaded and installed Google Cloud SDK,这些命令就会在您的终端中执行。在 Linux/OS X 中是:

        curl https://sdk.cloud.google.com | bash
    

    该链接中有一个包含更多信息的三步指南。

    1. 发出命令:

      gcloud compute instances list
      

    获取您的实例及其所属区域的列表。记下您需要使用的实例的名称和区域。请注意,以下命令中需要的 REGION 是 ZONE 字段的第一部分。 (例如:ZONE: us-central1-f,则 REGION 为 us-central1)

    1. Create a static public IP接收你要转发的流量:

      gcloud compute addresses create NAME
      gcloud compute addresses create targ-ip-1
      

    NAME 又在哪里,由您选择。它将提示您输入 region(选择您的实例所在的同一区域)。此命令将返回一个 IP,比如说:W.X.Y.Z

    1. 然后你需要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 以同时指向多个实例,而不仅仅是一个目标实例。

    1. 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
      

    地点:

    • NAME:您为转发规则选择的名称
    • ADDRESS:您在步骤 3 中保留的 IP 地址
    • TARGET_INSTANCE:您在第 4 步中创建的目标实例名称
    • TARGET_INSTANCE_ZONE:您的目标实例所属的区域
    • IP_PROTOCOL(可选):规则将服务的 IP 协议。如果留空,则使用 TCP。支持的协议有:AH、ESP、SCTP、TCP、UDP。
    • PORT(可选):如果指定,则只会转发发往指定范围内端口的数据包。如果未指定,则匹配所有端口

    系统将提示您选择该规则所属的区域

    要验证您的规则,您可以像这样list your configured forwarding rules

    gcloud compute forwarding-rules list
    

    您应该开始在您选择的实例中接收指向新公共 IP 的流量。

    【讨论】:

    • 在您需要机器发回数据的情况下不起作用...(来自单独的“连接”),它将从实例的默认外部 IP 发送...你呢有解决方案吗?
    • @Gizmo 这是一个想法,虽然我还没有测试过这些。您可以使用 iptables 将流量与其他 IP 一起发回。您需要:1)在谷歌云控制台中将该实例的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>
    • @Gizmo 我真的不认为 ip 转发的东西是必要的。我得到了 iptables 的想法,因为我使用它来更改在 VPN 网关中转发的数据包的原始 IP。它确实有效,但我的目的地是静态 IP。您将不得不根据您的情况进行调整。我希望这个想法有所帮助。
    • @magnap 哦好主意!在服务器上有多个进程我认为 iptables 所有者模块应该能够完成这项工作
    • 哇这个好用!很遗憾您需要使用 --can-ip-forward 创建虚拟机(不得不删除我的旧虚拟机)
    【解决方案2】:

    根据您的问题,我了解到您希望设置一个路由规则,以便来自一个实例的所有流量都通过另一个实例路由

    设置应该不会太复杂,我能想到的最好的例子就是谷歌帮助中心文档的"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
    

    我们可以将其分解以更好地了解该规则的确切作用:

    1. 我们正在“gce-network”内创建一个路由,我们称之为“no-ip-internet-route”。
    2. --destination-range 0.0.0.0/0 指定用于任何目的地的流量都应受规则影响。我们指的是即将离开我们的实例的流量。
    3. --next-hop-instance nat-gateway 部分用于指定触发规则后,应将流量作为下一跳发送到“nat-gateway”实例。
    4. --next-hop-instance-zone us-central1-a只是指定我们网关机器的区域。
    5. --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 到实例。

    【讨论】:

    • 谢谢你,我在尝试和错误之后从文档中找到了它:) 我发现我使用了错误的项目 ID,这就是我的命令行失败的地方......
    猜你喜欢
    • 2021-01-30
    • 1970-01-01
    • 2017-08-17
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 2012-05-12
    • 1970-01-01
    相关资源
    最近更新 更多