設定通訊協定轉送

本文件說明如何設定內部和外部通訊協定轉送的通訊協定轉送。設定通訊協定轉送功能前,請先參閱「通訊協定轉送功能總覽」。

設定外部通訊協定轉送

本節說明如何使用轉送規則將 TCP 流量轉送至單一目標執行個體,藉此設定外部通訊協定轉送。我們會提供不同的操作說明,分別適用於僅限 IPv4、雙重堆疊和僅限 IPv6 的流量。

如要設定外部通訊協定轉送,您必須建立包含單一 VM 執行個體的目標執行個體。接著,您可以建立外部區域轉送規則,將流量轉送至目標執行個體。

僅限 IPv4

為求簡單易懂,本範例使用預設網路和子網路。

  1. 建立防火牆規則,允許外部流量傳送至目標執行個體。

    gcloud compute firewall-rules create ALLOW_IPV4_FIREWALL_RULE_NAME \
        --target-tags=allow-ipv4-ext \
        --allow=tcp:80 \
        --source-ranges=0.0.0.0/0
    
  2. 建立 VM。在本例中,您會在 VM 上設定 Apache 伺服器。

    gcloud compute instances create VM_INSTANCE_NAME \
        --zone=ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ipv4-ext \
        --metadata=startup-script='#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://169.254.169.254/computeMetadata/v1/instance/name)"
        echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        sudo systemctl restart apache2'
    
  3. 建立包含上一個步驟中建立的 VM 的目標執行個體。您必須先建立目標執行個體,然後才能建立轉送規則物件,這是因為轉送規則必須參照現有的目標資源。

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
        --instance=VM_INSTANCE_NAME \
        --zone=ZONE
    
  4. 預留靜態外部 IPv4 位址

    gcloud compute addresses create IPV4_ADDRESS \
        --region=REGION
    
  5. 建立轉送規則,將 TCP 流量轉送至目標執行個體。轉送規則必須建立在目標執行個體所在的地區。

    gcloud compute forwarding-rules create IPV4_FORWARDING_RULE_NAME \
        --load-balancing-scheme=EXTERNAL \
        --region=REGION \
        --ip-protocol=TCP \
        --address=IPV4_ADDRESS \
        --ports=80 \
        --target-instance=TARGET_INSTANCE_NAME \
        --target-instance-zone=ZONE
    
  6. 測試設定。

    1. 取得轉送規則的 IP 位址。

      gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \
          --region=REGION
      
    2. 使用 curl 聯絡負載平衡器的 IP 位址,向負載平衡器發出網路要求。將 IP_ADDRESS 替換為上一個步驟中的 IP 位址。

      while true; do curl -m1 IP_ADDRESS; done
      

      輸出內容會與以下內容類似,其中會顯示產生回應的後端 VM 名稱。

      Page served from: VM_INSTANCE_NAME.
      

雙堆疊

如要同時處理 IPv4 和 IPv6 流量,您必須使用雙重堆疊子網路,並為目標執行個體後端提供雙重堆疊 VM 執行個體。

  1. 建立自訂模式 VPC 網路。

    gcloud compute networks create VPC_NAME \
        --subnet-mode=custom
    
  2. 在虛擬私有雲網路中建立雙重堆疊子網路。

    gcloud compute networks subnets create SUBNET_NAME \
        --network=VPC_NAME \
        --range=IPV4_ADDRESS_RANGE \
        --stack-type=IPV4_IPV6 \
        --ipv6-access-type=EXTERNAL \
        --region=REGION
    

    針對 IPV4_ADDRESS_RANGE,您可以使用 CIDR 標記法輸入新子網路的任何主要 IPv4 範圍。例如,192.168.11.0/24。詳情請參閱「IPv4 子網路範圍」。

  3. 建立防火牆規則,允許外部流量傳送至目標執行個體。

    gcloud compute firewall-rules create ALLOW_IPV6_FIREWALL_RULE_NAME \
        --network=VPC_NAME \
        --target-tags=allow-ipv6-ext \
        --allow=tcp:80 \
        --source-ranges=::/0
    
  4. 建立雙堆疊 VM。

    gcloud compute instances create VM_INSTANCE_NAME \
        --subnet=SUBNET_NAME \
        --stack-type=IPV4_IPV6 \
        --zone=ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ipv6-ext \
        --metadata=startup-script='#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://metadata.google.internal/computeMetadata/v1/instance/name)"
        echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        sudo systemctl restart apache2'
    
  5. 建立包含上一個步驟中建立的 VM 的目標執行個體。

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
        --instance=VM_INSTANCE_NAME \
        --network=VPC_NAME \
        --zone=ZONE
    
  6. 預留靜態外部 IPv4 位址

    gcloud compute addresses create IPV4_ADDRESS \
       --region=REGION
    
  7. 建立 IPv4 轉送規則,將 TCP 流量轉送至目標執行個體。轉送規則必須建立在目標執行個體所在的地區。

    gcloud compute forwarding-rules create IPV4_FORWARDING_RULE_NAME \
        --load-balancing-scheme=EXTERNAL \
        --region=REGION \
        --ip-protocol=TCP \
        --address=IPV4_ADDRESS \
        --ports=80 \
        --target-instance=TARGET_INSTANCE_NAME \
        --target-instance-zone=ZONE
    
  8. 預留靜態外部 IPv6 位址範圍

    gcloud compute addresses create IPV6_ADDRESS \
        --region=REGION \
        --subnet=SUBNET_NAME \
        --ip-version=IPV6 \
        --endpoint-type=NETLB
    
  9. 建立 IPv6 轉送規則,將 TCP 流量轉送至目標執行個體。轉送規則必須建立在目標執行個體所在的地區。

    gcloud compute forwarding-rules create IPV6_FORWARDING_RULE_NAME \
        --load-balancing-scheme=EXTERNAL \
        --subnet=SUBNET_NAME \
        --ip-version=IPV6 \
        --region=REGION \
        --address=IPV6_ADDRESS \
        --network-tier=PREMIUM \
        --target-instance=TARGET_INSTANCE_NAME \
        --target-instance-zone=ZONE \
        --ip-protocol=TCP \
        --ports=80
    
  10. 測試設定。

    1. 取得轉送規則的 IP 位址。

      gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \
        --region=REGION
      
      gcloud compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \
        --region=REGION
      
    2. 使用 curl 聯絡負載平衡器的 IP 位址,向負載平衡器發出網路要求。將 IP_ADDRESS 替換為上一個步驟中的 IP 位址。

      IPv4 流量:

      while true; do curl -m1 IP_ADDRESS; done
      

      IPv6 流量:

      curl -6 'http://[IP_ADDRESS]:80'
      

      輸出內容會與以下內容類似,其中會顯示產生回應的後端 VM 名稱。

      Page served from: VM_INSTANCE_NAME.
      

僅限 IPv6

如要僅處理 IPv6 流量,就必須使用僅限 IPv6 的子網路,並在目標執行個體後端使用僅限 IPv6 的 VM 執行個體。

  1. 建立自訂模式 VPC 網路。

    gcloud beta compute networks create VPC_NAME \
        --subnet-mode=custom
    
  2. 在虛擬私有雲網路中,建立僅限 IPv6 的子網路。

    gcloud beta compute networks subnets create SUBNET_NAME \
        --network=VPC_NAME \
        --stack-type=IPV6_ONLY \
        --ipv6-access-type=EXTERNAL \
        --region=REGION
     
  3. 建立防火牆規則,允許外部流量傳送至目標執行個體。

    gcloud beta compute firewall-rules create ALLOW_IPV6_FIREWALL_RULE_NAME \
        --network=VPC_NAME \
        --target-tags=allow-ipv6-ext \
        --allow=tcp:80 \
        --source-ranges=::/0
    
  4. 建立僅限 IPv6 的 VM。

    gcloud beta compute instances create VM_INSTANCE_NAME \
        --subnet=SUBNET_NAME \
        --stack-type=IPV6_ONLY \
        --zone=ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ipv6-ext \
        --metadata=startup-script='#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://metadata.google.internal/computeMetadata/v1/instance/name)"
        echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        sudo systemctl restart apache2'
    
  5. 建立包含上一個步驟中建立的 VM 的目標執行個體。

    gcloud beta compute target-instances create TARGET_INSTANCE_NAME \
        --instance=VM_INSTANCE_NAME \
        --network=VPC_NAME \
        --zone=ZONE
    
  6. 預留靜態外部 IPv6 位址範圍

    gcloud beta compute addresses create IPV6_ADDRESS \
        --region=REGION \
        --subnet=SUBNET_NAME \
        --ip-version=IPV6 \
        --endpoint-type=NETLB
    
  7. 建立 IPv6 轉送規則,將 TCP 流量轉送至目標執行個體。轉送規則必須建立在目標執行個體所在的地區。

    gcloud beta compute forwarding-rules create IPV6_FORWARDING_RULE_NAME \
        --load-balancing-scheme=EXTERNAL \
        --subnet=SUBNET_NAME \
        --ip-version=IPV6 \
        --region=REGION \
        --address=IPV6_ADDRESS \
        --network-tier=PREMIUM \
        --target-instance=TARGET_INSTANCE_NAME \
        --target-instance-zone=ZONE \
        --ip-protocol=TCP \
        --ports=80
    
  8. 測試設定。

    1. 取得轉送規則的 IP 位址。

      gcloud beta compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \
          --region=REGION
      
    2. 使用 curl 聯絡負載平衡器的 IP 位址,向負載平衡器發出網路要求。將 IPV6_ADDRESS 替換為上一個步驟中的 IP 位址。

      curl -6 'http://[IPV6_ADDRESS]:80'
      

      輸出內容會與以下內容類似,其中會顯示產生回應的後端 VM 名稱。

      Page served from: VM_INSTANCE_NAME.
      

設定內部通訊協定轉送

本節說明如何使用轉送規則將 TCP 流量轉送至單一目標執行個體,藉此設定內部通訊協定轉送。我們會提供單獨的操作說明,說明如何處理僅限 IPv4、雙重堆疊和僅限 IPv6 的流量。

在本例中,您會建立目標執行個體,其中包含已安裝 Apache 伺服器的單一 VM 執行個體。接著,您可以建立內部區域轉送規則,將流量轉送至目標執行個體。

僅限 IPv4

為求簡單易懂,本範例使用預設網路和子網路來設定內部通訊協定轉送。

  1. 建立防火牆規則,允許內部流量傳送至目標執行個體。

    gcloud compute firewall-rules create ALLOW_IPV4_FIREWALL_RULE_NAME \
        --target-tags=allow-ipv4-int \
        --allow=tcp \
        --source-ranges=0.0.0.0/0
    
  2. 建立防火牆規則,允許與網路標記 allow-ssh 的 VM 建立 SSH 連線。用於建立與用戶端 VM 的 SSH 連線。

    gcloud compute firewall-rules create ALLOW_SSH_FIREWALL_RULE_NAME \
        --target-tags=allow-ssh \
        --allow=tcp:22 \
        --source-ranges=0.0.0.0/0
    
  3. 建立 VM。

    gcloud compute instances create VM_INSTANCE_NAME \
        --zone=ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ipv4-int \
        --metadata=startup-script='#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://169.254.169.254/computeMetadata/v1/instance/name)"
        echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        sudo systemctl restart apache2'
    
  4. 建立包含上一個步驟中建立的 VM 的目標執行個體。您必須先建立目標執行個體,然後才能建立轉送規則物件,這是因為轉送規則必須參照現有的目標資源。

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
        --instance=VM_INSTANCE_NAME \
        --zone=ZONE
    
  5. 建立轉送規則,將 TCP 流量轉送至目標執行個體。轉送規則必須建立在目標執行個體所在的地區。

    gcloud compute forwarding-rules create IPV4_FORWARDING_RULE_NAME \
        --load-balancing-scheme=INTERNAL \
        --network-tier=PREMIUM \
        --region=REGION \
        --ip-protocol=TCP \
        --ports=80 \
        --target-instance=TARGET_INSTANCE_NAME \
        --target-instance-zone=ZONE
    
  6. 建立測試用戶端 VM。

    gcloud compute instances create CLIENT_VM_NAME \
        --zone=ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ssh
    

    您現在可以透過從這個用戶端 VM 傳送流量至轉送規則 IP 位址,來測試通訊協定轉送設定。

  7. 測試設定。

    1. 取得轉送規則的 IP 位址。

      gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \
          --region=REGION
      
    2. 建立與用戶端 VM 的 SSH 連線。

      gcloud compute ssh CLIENT_VM_NAME \
          --zone=ZONE
      
    3. 使用 curl 聯絡負載平衡器的 IP 位址,向負載平衡器提出要求。

      while true; do curl -m1 IP_ADDRESS; done
      

      輸出內容會與以下內容類似,其中會顯示產生回應的後端 VM 名稱。

      Page served from: VM_INSTANCE_NAME.
      

雙堆疊

如要同時處理 IPv4 和 IPv6 流量,您必須使用雙重堆疊子網路,並為目標執行個體後端提供雙重堆疊 VM 執行個體。

  1. 使用 --enable-ula-internal-ipv6 標記建立自訂模式 VPC 網路,即可在該網路的任何子網路上設定內部 IPv6 範圍。

    gcloud compute networks create VPC_NAME \
        --subnet-mode=custom \
        --enable-ula-internal-ipv6
    
  2. 在虛擬私有雲網路中建立雙重堆疊子網路。

    gcloud compute networks subnets create SUBNET_NAME \
        --network=VPC_NAME \
        --range=IPV4_ADDRESS_RANGE \
        --region=REGION \
        --stack-type=IPV4_IPV6 \
        --ipv6-access-type=INTERNAL
    

    針對 IPV4_ADDRESS_RANGE,您可以使用 CIDR 標記法輸入新子網路的任何主要 IPv4 範圍。例如,192.168.11.0/24。詳情請參閱「IPv4 子網路範圍」。

  3. 建立防火牆規則,允許內部流量傳送至目標執行個體。

    gcloud compute firewall-rules create ALLOW_IPV6_FIREWALL_RULE_NAME \
        --network=VPC_NAME \
        --target-tags=allow-ipv6-int \
        --allow=tcp \
        --source-ranges=::/0
    
  4. 建立防火牆規則,使用網路標記 allow-ssh 允許與 VM 建立 SSH 連線。

    gcloud compute firewall-rules create ALLOW_SSH_FIREWALL_RULE_NAME \
        --network=VPC_NAME \
        --target-tags=allow-ssh \
        --allow=tcp:22 \
        --source-ranges=0.0.0.0/0
    

    這個防火牆規則會套用至您使用 SSH 連線的用戶端 VM (在下列步驟之一建立),以便將 HTTP 流量傳送至轉送規則的 IP 位址。

  5. 建立雙堆疊 VM。

    gcloud compute instances create VM_INSTANCE_NAME \
        --subnet=SUBNET_NAME \
        --stack-type=IPV4_IPV6 \
        --zone=ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ipv6-int \
        --metadata=startup-script='#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://metadata.google.internal/computeMetadata/v1/instance/name)"
        echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        sudo systemctl restart apache2'
    
  6. 建立包含上一個步驟中建立的 VM 的目標執行個體。

    gcloud compute target-instances create TARGET_INSTANCE_NAME \
        --instance=VM_INSTANCE_NAME \
        --network=VPC_NAME \
        --zone=ZONE
    
  7. 建立 IPv4 轉送規則,將 TCP 流量轉送至目標執行個體。轉送規則必須建立在目標執行個體所在的地區。

    gcloud compute forwarding-rules create IPV4_FORWARDING_RULE_NAME \
        --load-balancing-scheme=INTERNAL \
        --network-tier=PREMIUM \
        --region=REGION \
        --ip-protocol=TCP \
        --ports=80 \
        --target-instance=TARGET_INSTANCE_NAME \
        --target-instance-zone=ZONE
    
  8. 建立 IPv6 轉送規則,將 TCP 流量轉送至目標執行個體。轉送規則必須建立在目標執行個體所在的地區。

    gcloud compute forwarding-rules create IPV6_FORWARDING_RULE_NAME \
        --load-balancing-scheme=INTERNAL \
        --network-tier=PREMIUM \
        --network=VPC_NAME \
        --subnet=SUBNET_NAME \
        --region=REGION \
        --ip-protocol=TCP \
        --ports=80 \
        --target-instance=TARGET_INSTANCE_NAME \
        --target-instance-zone=ZONE \
        --ip-version=IPV6
    
  9. 建立用戶端 VM。

    gcloud compute instances create CLIENT_VM_NAME \
        --subnet=SUBNET_NAME \
        --stack-type=IPV4_IPV6 \
        --zone=ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ssh
    
  10. 測試設定。

    1. 取得轉送規則的 IP 位址。

      gcloud compute forwarding-rules describe IPV4_FORWARDING_RULE_NAME \
          --region=REGION
      
      gcloud compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \
          --region=REGION
      
    2. 建立與用戶端 VM 的 SSH 連線。

      gcloud compute ssh CLIENT_VM_NAME \
          --zone=ZONE
      
    3. 使用 curl 向轉送規則的 IP 位址提出 HTTP 要求。

      IPv4 流量:

      while true; do curl -m1 IP_ADDRESS; done
      

      IPv6 流量:

      curl -6 'http://[FORWARDING_RULE_IP_ADDRESS]:80'
      

      輸出內容會類似以下內容,其中產生回應的後端 VM 名稱會顯示在文字中。

      Page served from: VM_INSTANCE_NAME.
      

僅限 IPv6

如要僅處理 IPv6 流量,就必須使用僅限 IPv6 的子網路,並為目標執行個體後端提供僅限 IPv6 的 VM 執行個體。

  1. 使用 --enable-ula-internal-ipv6 標記建立自訂模式 VPC 網路,即可在該網路的任何子網路上設定內部 IPv6 範圍。

    gcloud beta compute networks create VPC_NAME \
        --subnet-mode=custom \
        --enable-ula-internal-ipv6
    
  2. 在虛擬私有雲網路中,建立僅限 IPv6 的子網路。

    gcloud beta compute networks subnets create SUBNET_NAME \
        --network=VPC_NAME \
        --region=REGION \
        --stack-type=IPV6_ONLY \
        --ipv6-access-type=INTERNAL
    
  3. 建立防火牆規則,允許內部流量傳送至目標執行個體。

    gcloud beta compute firewall-rules create ALLOW_IPV6_FIREWALL_RULE_NAME \
        --network=VPC_NAME \
        --target-tags=allow-ipv6-int \
        --allow=tcp \
        --source-ranges=::/0
    
  4. 建立防火牆規則,使用網路標記 allow-ssh 允許與 VM 建立 SSH 連線。

    gcloud beta compute firewall-rules create ALLOW_SSH_FIREWALL_RULE_NAME \
        --network=VPC_NAME \
        --target-tags=allow-ssh \
        --allow=tcp:22 \
        --source-ranges=0.0.0.0/0
    

    這個防火牆規則會套用至您使用 SSH 連線的用戶端 VM (在下列步驟之一建立),以便將 HTTP 流量傳送至轉送規則的 IP 位址。

  5. 建立僅限 IPv6 的 VM。

    gcloud beta compute instances create VM_INSTANCE_NAME \
        --subnet=SUBNET_NAME \
        --stack-type=IPV6_ONLY \
        --zone=ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ipv6-int \
        --metadata=startup-script='#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://metadata.google.internal/computeMetadata/v1/instance/name)"
        echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        sudo systemctl restart apache2'
    
  6. 建立包含上一個步驟中建立的 VM 的目標執行個體。

    gcloud beta compute target-instances create TARGET_INSTANCE_NAME \
        --instance=VM_INSTANCE_NAME \
        --network=VPC_NAME \
       --zone=ZONE
    
  7. 建立 IPv6 轉送規則,將 TCP 流量轉送至目標執行個體。轉送規則必須建立在目標執行個體所在的地區。

    gcloud beta compute forwarding-rules create IPV6_FORWARDING_RULE_NAME \
        --load-balancing-scheme=INTERNAL \
        --network-tier=PREMIUM \
        --network=VPC_NAME \
        --subnet=SUBNET_NAME \
        --region=REGION \
        --ip-protocol=TCP \
        --ports=80 \
        --target-instance=TARGET_INSTANCE_NAME \
        --target-instance-zone=ZONE \
        --ip-version=IPV6
    
  8. 建立用戶端 VM。

    gcloud beta compute instances create CLIENT_VM_NAME \
        --subnet=SUBNET_NAME \
        --stack-type=IPV6_ONLY \
        --zone=ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ssh
    
  9. 測試設定。

    1. 取得轉送規則的 IP 位址。

      gcloud beta compute forwarding-rules describe IPV6_FORWARDING_RULE_NAME \
          --region=REGION
      
    2. 建立與用戶端 VM 的 SSH 連線。

      gcloud beta compute ssh CLIENT_VM_NAME \
          --zone=ZONE
      
    3. 使用 curl 向轉送規則的 IP 位址提出 HTTP 要求。

      curl -6 'http://[FORWARDING_RULE_IP_ADDRESS]:80'
      

      輸出內容會類似以下內容,其中產生回應的後端 VM 名稱會顯示在文字中。

      Page served from: VM_INSTANCE_NAME.
      

後續步驟