ネットワーキング ユースケース用に 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. あるインスタンスから別のインスタンスに接続する方法を理解します。これは、内部専用のインスタンスには直接接続できないためです。
  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 squid3
    

    ローカル ネットワーク上の任意のマシンが Squid3 サーバーを使用できるようにします。次の 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 のドキュメントをご覧ください。

次のステップ