네트워킹 사용 사례에 맞는 VM 구성

이 페이지에서는 다음과 같은 Compute Engine 가상 머신(VM) 인스턴스의 특수한 네트워킹 구성을 설명합니다.

  • VM에 대한 외부 HTTP 연결 설정
  • VM을 네트워크 프록시로 구성

VM에 대한 외부 HTTP 연결 설정

기본 방화벽 규칙에서는 인스턴스에 대한 HTTP 또는 HTTPS 연결이 허용되지 않습니다. 그러나 연결을 허용하는 규칙을 간단히 추가할 수 있습니다. VM은 외부(고정 또는 임시) IP 주소가 있어야 Virtual Private Cloud(VPC) 네트워크 외부의 트래픽을 받을 수 있습니다.

gcloud 명령줄 도구 또는 Google Cloud Console을 사용하여 HTTP 또는 HTTPS 연결을 허용하는 방화벽 규칙을 추가할 수 있습니다. 또한 API를 통해 방화벽 규칙을 추가할 수도 있습니다.

Console

Cloud Console을 사용하여 VPC 네트워크의 모든 인스턴스에 대한 전체 방화벽 규칙을 만들거나, 인스턴스를 만들 때 각각의 옵션을 선택해서 개별 인스턴스의 HTTP 및 HTTPS 연결 액세스를 허용할 수 있습니다. 후자의 옵션이 더 많은 개별 인스턴스 제어 권한을 제공하므로 먼저 설명합니다.

  1. Cloud Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 인스턴스 만들기를 클릭합니다.
  3. 방화벽 섹션에서 HTTP 트래픽 허용HTTPS 트래픽 허용을 선택합니다.
  4. 만들기를 클릭하여 인스턴스를 만듭니다.

이러한 체크박스 선택을 통해 VPC 네트워크는 http-server 또는 https-server 태그가 있는 모든 인스턴스에 적용되는 default-http 또는 default-https 규칙을 자동으로 만듭니다. 또한 체크박스 선택에 따라 새 인스턴스에 적절한 태그가 지정됩니다.

기존 default-httpdefault-https 방화벽 규칙이 이미 있는 경우 인스턴스의 세부정보 페이지에서 HTTP 허용 또는 HTTPS 허용 옵션을 사용 설정하여 기존 인스턴스에 방화벽 규칙을 적용할 수 있습니다.

  1. VM 인스턴스 페이지로 이동합니다.
  2. 원하는 인스턴스 이름을 클릭합니다.
  3. 페이지 상단의 편집 버튼을 클릭합니다.
  4. 방화벽 섹션까지 아래로 스크롤합니다.
  5. 원하는 VPC 네트워크 아래에서 HTTP 허용 또는 HTTPS 허용 옵션을 선택합니다.
  6. 저장을 클릭합니다.

비슷한 방법으로, 하나 또는 두 개의 체크박스를 선택 해제하여 VM의 외부 HTTP 또는 HTTPS 액세스를 사용하지 않을 수도 있습니다.

Google Cloud는 모든 인스턴스에 적용되는 전체 방화벽 규칙을 만드는 대신 특정 인스턴스에 HTTP 및 HTTPS 트래픽 태그를 지정하도록 허용함으로써 프로젝트의 모든 가상 머신에서 외부 트래픽을 허용하는 데 따른 보안 문제를 제한합니다. 모든 가상 머신 인스턴스에서 HTTP 또는 HTTPS 트래픽을 허용하는 방화벽 규칙을 만들려면 다음과 같이 자체 방화벽 규칙을 만들 수 있습니다.

  1. VPC 네트워크 페이지로 이동합니다.
  2. 방화벽 규칙을 적용할 VPC 네트워크를 선택합니다.
  3. 방화벽 규칙 섹션 아래에서 방화벽 규칙 추가를 클릭합니다.
  4. 방화벽 규칙 이름을 지정하고 프로토콜 및 포트 상자에 tcp:80 또는 tcp:443(HTTPS 트래픽의 경우)을 추가합니다.
  5. 만들기를 클릭합니다.
gcloud 명령줄 도구

프로젝트의 모든 가상 머신에 대한 HTTP, HTTPS 트래픽을 허용하려면 다음 명령어를 사용하여 모든 출처에서 이 VPC 네트워크에 연결된 모든 인스턴스로 들어오는 HTTP 및 HTTPS 요청을 허용하는 방화벽을 만듭니다.

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

**예시**

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

VM을 네트워크 프록시로 구성

하나의 인스턴스만 외부 액세스 권한을 갖고 다른 모든 인스턴스는 이 인스턴스를 프록시 서버로 사용하여 외부에 연결하도록 VPC 네트워크를 설계할 수 있습니다. 이 구성은 VPC 네트워크 내부 또는 외부에 대한 액세스 권한을 제어하거나 여러 개의 외부 IP 주소를 사용하는 비용을 줄이고자 하는 경우에 유용합니다.

이 예시에서는 Debian 이미지를 사용하는 VM 인스턴스에 네트워크 프록시를 설정하는 방법을 설명합니다. 여기서는 게이트웨이 인스턴스를 Squid 프록시 서버로 사용하지만 이 방법은 프록시 서버를 설정하는 방법 중 하나일 뿐입니다.

Squid 프록시 서버를 설정하려면 다음 안내를 따르세요.

  1. 외부(정적 또는 임시) IP 주소가 있는 하나의 인스턴스를 설정합니다. 이 예시에서는 인스턴스의 이름을 gateway-instance로 지정합니다.
  2. gcloud compute instances create ... --no-address를 지정하여 외부 IP 주소가 없는 여러 개의 인스턴스를 설정합니다. 이 예시에서는 이 인스턴스의 이름을 hidden-instance로 지정합니다.
  3. 내부 전용 인스턴스에 직접 연결할 수 없으므로 한 인스턴스에서 다른 인스턴스로 연결하는 방법을 알아봅니다.
  4. 방화벽을 추가하여 포트 3128에서 TCP 트래픽을 허용합니다.

    gcloud compute firewall-rules create [FIREWALL_RULE] --network [NETWORK] --allow tcp:3128
    
  5. Squidgateway-instance에 설치하고 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. hidden-instance를 프록시로 사용하도록 gateway-instance를 구성합니다. 다음과 같이 ssh를 사용하여 hidden-instance에 연결하고, 포트 3128의 gateway-instance를 가리키도록 프록시 URL 주소를 정의합니다(기본 Squid 구성).

    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를 업데이트하여 이러한 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. sudo를 종료하고 변수를 로드하고 hidden-instance에서 apt-get을 실행합니다. 이제 게이트웨이를 프록시로 사용해서 작동하게 됩니다. apt-get는 인터넷에 직접 연결되지 않으므로 게이트웨이가 프록시 역할을 하지 않는 경우 hidden-instance이 작동하지 않습니다.

    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 문서를 참조하세요.

다음 단계