ネットワーキング ユースケース用に VM を構成する

このページでは、ネットワーク プロキシとして VM を構成する方法について説明します。

VM をネットワーク プロキシとして構成する

VPC ネットワークを設計するとき、VPC ネットワーク内の 1 つのインスタンスだけが外部にアクセスし、他のインスタンスはすべてそのインスタンスをプロキシ サーバーとして外部にアクセスするように構成できます。これは、VPC ネットワークに出入りするアクセスを制御したり、複数の外部 IP アドレスにかかる費用を抑える場合に便利です。

この例では、Debian イメージを使用する VM インスタンスにネットワーク プロキシを設定する方法について説明します。ここでは、Squid プロキシ サーバーとしてゲートウェイ インスタンスを使用します。これはプロキシ サーバーを設定する唯一の方法です。

Squid プロキシ サーバーを設定するには:

  1. 外部(静的またはエフェメラル)IP アドレスを持つインスタンスを 1 つ設定します。この例では、インスタンスに gateway-instance という名前を付けます。
    gcloud compute instances create gateway-instance 
    --project=project_id
    --zone=zone
    --network-interface=network-tier=PREMIUM,subnet=default
    --scopes=https://www.googleapis.com/auth/cloud-platform
  2. gcloud compute instances create ... --no-address を指定して、外部 IP アドレスを持たないインスタンスを 1 つ以上設定します。この例では、このインスタンス hidden-instance を呼び出します。
    gcloud compute instances create hidden-instance 
    --project=project_id
    --zone=zone
    --network-interface=network-tier=PREMIUM,subnet=default,no-address
    --scopes=https://www.googleapis.com/auth/cloud-platform
  3. 内部専用インスタンスには直接接続できないため、内部専用 VM の接続オプションを選択します
  4. 次のように、ポート 3128 での tcp トラフィックを許可するファイアウォールを追加します。

    gcloud compute firewall-rules create [FIREWALL_RULE] --network [NETWORK] --allow tcp:3128
    
  5. gateway-instanceSquid をインストールし、VPC ネットワーク上の任意(有効なサブネット IP アドレス)のマシンからのアクセスを許可するように構成します。これは、gateway-instancehidden-instance の両方が同じ VPC ネットワークに接続されていて、相互に接続可能であることを前提としています。

    user@gateway-instance:~$ sudo apt-get install squid
    

    ローカル ネットワーク上の任意のマシンが Squid サーバーを使用できるようにします。次の sed コマンドは、コメント化を解除し、ローカルのネットワークとマシン用の Squid 構成ファイル内にある acl localnet src エントリを有効にします。

    user@gateway-instance:~$ sudo sed -i 's:#\(http_access allow localnet\):\1:' /etc/squid/squid.conf
    
    user@gateway-instance:~$ sudo sed -i 's:#\(http_access deny to_localhost\):\1:' /etc/squid/squid.conf
    
    user@gateway-instance:~$ sudo sed -i 's:#\(acl localnet src 10.0.0.0/8.*\):\1:' /etc/squid/squid.conf
    
    user@gateway-instance:~$ sudo sed -i 's:#\(acl localnet src 172.16.0.0/12.*\):\1:' /etc/squid/squid.conf
    
    user@gateway-instance:~$ sudo sed -i 's:#\(acl localnet src 192.168.0.0/16.*\):\1:' /etc/squid/squid.conf
    
    user@gateway-instance:~$ sudo sed -i 's:#\(acl localnet src fc00\:\:/7.*\):\1:' /etc/squid/squid.conf
    
    user@gateway-instance:~$ sudo sed -i 's:#\(acl localnet src fe80\:\:/10.*\):\1:' /etc/squid/squid.conf
    
    # Prevent proxy access to metadata server
    user@gateway-instance:~$ sudo tee -a /etc/squid/squid.conf <<'EOF'
    acl to_metadata dst 169.254.169.254
    http_access deny to_metadata
    EOF
    
    # Start Squid
    user@gateway:~$ sudo service squid start
    
  6. gateway-instance をプロキシとして使用するように hidden-instance を構成します。ssh を使用して hidden-instance に接続し、次に示すように、プロキシ URL アドレスがポート 3128(Squid のデフォルトの構成)上の gateway-instance を指すように定義します。

    user@gateway-instance:~$ ssh hidden-instance
    
    user@hidden-instance:~$ sudo -s
    
    root@hidden-instance:~# echo "export http_proxy=\"http://gateway-instance.$(dnsdomainname):3128\"" >> /etc/profile.d/proxy.sh
    
    root@hidden-instance:~# echo "export https_proxy=\"http://gateway-instance.$(dnsdomainname):3128\"" >> /etc/profile.d/proxy.sh
    
    root@hidden-instance:~# echo "export ftp_proxy=\"http://gateway-instance.$(dnsdomainname):3128\"" >> /etc/profile.d/proxy.sh
    
    root@hidden-instance:~# echo "export no_proxy=169.254.169.254,metadata,metadata.google.internal" >> /etc/profile.d/proxy.sh
    

    このような環境変数を通すように sudoers を更新します。

    root@hidden-instance:~# cp /etc/sudoers /tmp/sudoers.new
    
    root@hidden-instance:~# chmod 640 /tmp/sudoers.new
    
    root@hidden-instance:~# echo "Defaults env_keep += \"ftp_proxy http_proxy https_proxy no_proxy"\" >>/tmp/sudoers.new
    
    root@hidden-instance:~# chmod 440 /tmp/sudoers.new
    
    root@hidden-instance:~# visudo -c -f /tmp/sudoers.new && cp /tmp/sudoers.new /etc/sudoers
    
  7. sudo を終了し、変数をロードして、hidden-instanceapt-get を実行します。この操作はゲートウェイをプロキシとして使用することで正常に動作します。ゲートウェイがプロキシとして機能していない場合、hidden-instance がインターネットに直接接続されないため、apt-get は動作しません。

    root@hidden-instance:~# exit
    
    user@hidden-instance:~$ source ~/.profile
    
    user@hidden-instance:~$ sudo apt-get update
    

VM を VPN ゲートウェイとして構成する

このコンテンツは非推奨となり、削除されました。マネージド VPN ソリューションについては、Cloud VPN のドキュメントをご覧ください。

VM を NAT ゲートウェイとして構成する

このコンテンツは非推奨となり、削除されました。マネージド NAT ソリューションについては、Cloud NAT のドキュメントをご覧ください。

高可用性で高帯域幅の NAT ゲートウェイを構築する

このコンテンツは非推奨となり、削除されました。マネージド NAT ソリューションについては、Cloud NAT のドキュメントをご覧ください。

次のステップ