Como configurar VMs para casos de uso de rede

Nesta página, descrevemos as configurações especiais de rede das instâncias de máquina virtual (VM) do Compute Engine, como as seguintes:

  • Como configurar uma conexão HTTP externa com uma VM
  • Como configurar uma VM como um proxy de rede

Como configurar uma conexão HTTP externa com uma VM

As regras de firewall padrão não permitem conexões HTTP ou HTTPS com suas instâncias. No entanto, é muito simples adicionar uma regra que as permita. Observe que uma VM precisa ter um endereço IP externo (estático ou efêmero) antes de receber tráfego de fora da rede da nuvem privada virtual (VPC).

Adicione uma regra de firewall para permitir conexões HTTP ou HTTPS usando a gcloud ferramenta de linha de comando ou Console do Google Cloud. Você também pode adicionar uma regra de firewall por meio da API.

Console

É possível usar o Console do Cloud para criar uma regra de firewall geral para todas as instâncias na rede VPC ou pode permitir que instâncias individuais acessem conexões HTTP e HTTPS selecionando a respectiva opção ao criar essa instância. Essa última opção é descrita primeiro, por fornecer mais controle das instâncias individuais.

  1. No Console do Cloud, acesse a página Instâncias de VM.

    Acessar instâncias de VM

  2. Clique em Criar instância.
  3. Na seção Firewall, selecione Permitir tráfego HTTP e Permitir tráfego HTTPS.
  4. Clique em Criar para criar a instância.

Ao marcar essas caixas de seleção, a rede VPC cria automaticamente uma regra default-http ou default-https que se aplica a todas as instâncias com as tags http-server ou https-server. A nova instância também será marcada com a devida tag, de acordo com a caixa de seleção marcada.

Se você já tem regras de firewall default-http e default-https, aplique a regra de firewall a instâncias existentes ativando as opções Permitir HTTP ou Permitir HTTPS na página de detalhes da instância.

  1. Acesse a página Instâncias de VM.
  2. Clique no nome da instância desejada.
  3. Clique no botão Editar na parte superior da página.
  4. Role para baixo até a seção Firewalls.
  5. Marque as opções Permitir HTTP ou Permitir HTTPS na rede VPC que quiser.
  6. Clique em Salvar.

De maneira semelhante, você também pode desativar o acesso HTTP ou HTTPS externo para uma VM desmarcando uma ou ambas as caixas de seleção.

Ao permitir que instâncias específicas sejam codificadas para tráfego HTTP e HTTPS em vez de criar uma regra de firewall geral aplicável a todas as instâncias, o Google Cloud limita as possíveis implicações de segurança de permitir tráfego externo para todas as máquinas virtuais em um projeto. Mas, se quiser criar uma regra de firewall que permita tráfego HTTP ou HTTPS em todas as instâncias de máquina virtual, crie sua própria regra de firewall:

  1. Acesse a página Redes VPC.
  2. Selecione a rede VPC na qual você aplicará a regra de firewall.
  3. Na seção Regras de firewall, clique em Adicionar regra de firewall.
  4. Nomeie sua regra de firewall e adicione tcp:80 na caixa Protocolos e portas ou tcp:443 para tráfego HTTPS.
  5. Clique em Criar.
Ferramenta de linha de comando gcloud

Se você quiser permitir tráfego HTTP e HTTPS em todas as máquinas virtuais de um projeto, o comando a seguir cria um firewall que permite a entrada de solicitações HTTP e HTTPS de qualquer lugar em qualquer instância conectada a essa rede VPC.

gcloud compute firewall-rules create FIREWALL_RULE --allow tcp:80,tcp:443

**Exemplo**

gcloud compute firewall-rules create sample-http \
 --description "Incoming http and https allowed." \
 --allow tcp:80,tcp:443
gcloud compute firewall-rules describe sample-http
allowed:
- IPProtocol: tcp
  ports:
  - '80'
  - '443'
creationTimestamp: '2014-06-13T13:27:12.206-07:00'
id: '5057780722612413546'
kind: compute#firewall
name: sample-http
network: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default
selfLink: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/samplehttp
sourceRanges:
- 0.0.0.0/0

Como configurar uma VM como um proxy de rede

Projete sua rede VPC para que apenas uma instância tenha acesso externo e todas as outras usem essa instância como um servidor proxy para comunicação externa. Isso será útil para controlar o acesso de entrada ou saída da rede VPC ou para reduzir o custo de pagamento de vários endereços IP externos.

Esse exemplo específico trata da configuração de um proxy de rede nas instâncias de VM que usam uma imagem Debian. Ele usa uma instância de gateway como um servidor proxy Squid, mas esse é apenas um modo de configurar um servidor proxy.

Para configurar um servidor proxy Squid:

  1. Configure uma instância com um endereço IP externo estático ou temporário. Para este exemplo, nomeie sua instância gateway-instance.
  2. Configure uma ou mais instâncias sem endereços IP externos especificando gcloud compute instances create ... --no-address. Para este exemplo, chame esta instância hidden-instance.
  3. Aprenda a conectar-se de uma instância à outra, visto que não é possível conectar-se diretamente às suas instâncias somente internas.
  4. Adicione um firewall para permitir o tráfego TCP na porta 3128:

    gcloud compute firewall-rules create [FIREWALL_RULE] --network [NETWORK] --allow tcp:3128
    
  5. Instale o Squid em gateway-instance e configure-o para permitir o acesso de qualquer máquina na rede VPC (endereços IP de sub-rede válidos). O processo presume que gateway-instance e hidden-instance estão conectados à mesma rede VPC, o que permite que eles se conectem uns aos outros.

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

    Autorize todas as máquinas na rede local a usar o servidor Squid3. Os seguintes comandos sed descompactam e ativam as entradas acl localnet src nos arquivos de configuração do Squid para redes e máquinas locais.

    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. Configure hidden-instance para usar gateway-instance como proxy. Use SSH para se conectar a hidden-instance e defina seus endereços URL do proxy que apontem para gateway-instance na porta 3128 (a configuração padrão do Squid) como mostrado aqui:

    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
    

    Atualize o sudoers para transmitir estas variáveis env:

    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. Saia de sudo, carregue as variáveis e execute apt-get em hidden-instance. Agora, isso funcionará usando o gateway como um proxy. Se o gateway não estiver sendo exibido como um proxy, apt-get não funcionará porque hidden-instance não tem conexão direta com a Internet.

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

Como configurar uma VM como um gateway de VPN

Este conteúdo foi suspenso e removido. Para uma solução de VPN gerenciada, consulte a documentação do Cloud VPN.

Como configurar uma VM como um gateway NAT

Este conteúdo foi suspenso e removido. Para uma solução NAT gerenciada, consulte a documentação do Cloud NAT.

Como criar gateways NAT de alta disponibilidade e grande largura de banda

Este conteúdo foi suspenso e removido. Para uma solução NAT gerenciada, consulte a documentação do Cloud NAT.

A seguir