계획은 깔끔하게 적용되고 터널은 올라오며 콘솔은 이를 정책 기반이라고 부릅니다. 트래픽은 여전히 통과하지 않고, Terraform 리소스에서 경로 기반 토글을 찾는 일은 그런 필드가 없으므로 허탕입니다. Classic VPN에서 경로 기반 동작은 선택하는 모드가 아닙니다. 이것은 로컬 트래픽 셀렉터가 0.0.0.0/0 이고, 원격 셀렉터가 실제로 원하는 네트워크를 나열하며, 경로가 터널을 가리킬 때 얻어지는 것입니다. 세 가지가 갖춰지면 레이블도 따라옵니다.

오해: 터널 모드 필드

콘솔 레이블은 API가 셀렉터에서 보는 내용을 반영할 뿐입니다. 리소스에는 경로 기반이라고 쓰인 곳이 없으므로 참으로 설정할 것이 없습니다.

그 필드를 찾는 데 문제의 첫 한 시간을 쓰고, 셀렉터 값을 읽는 데 마지막 오 분을 씁니다.

여기서 경로 기반이란

Google은 Classic VPN의 경로 기반 터널을 로컬 셀렉터가 0.0.0.0/0 인 정책 기반 터널로 문서화합니다. 이름이 붙는 것은 원격 범위뿐이고 로컬 쪽은 임의의 주소로 취급됩니다. 그래서 설정에서 표시가 되는 것은 모드가 아니라 값입니다. 두 셀렉터를 명시적으로 쓰고 계획 출력에서 확인하십시오:

local_traffic_selector  = ["0.0.0.0/0"]
remote_traffic_selector = ["10.20.0.0/16"]

그 발췌의 피어 접두사는 예시일 뿐이고 중요한 것은 형태입니다.

경로는 별도의 객체입니다

터널 객체는 경로를 설치하지 않습니다. 패킷이 터널 정책에 맞더라도 갈 곳이 없을 수 있습니다. 다음 홉은 VPC 라우팅 테이블이 결정하기 때문입니다. 경로에는 목적지 범위, 네트워크, 다음 홉으로서의 터널, 그리고 더 넓은 무엇이든 이기는 우선순위가 필요하며, 이를 잊으면 연결됨을 보고하는 터널과 VPC를 절대 벗어나지 않는 점검이 남습니다.

resource "google_compute_route" "office" {
  name                = "office-via-vpn"
  dest_range          = "10.20.0.0/16"
  network             = google_compute_network.vpc.name
  next_hop_vpn_tunnel = google_compute_vpn_tunnel.to_office.id
  priority            = 1000
}

경로를 터널과 같은 모듈에 만들어 검토할 때 둘이 어긋나지 않게 하십시오.

피어에서 셀렉터를 그대로 비추십시오

원격 장치는 거울 이미지로 구성해야 하며, 로컬 범위가 여러분의 원격 셀렉터이고, 원격 범위는 사용하려는 GCP 서브넷을 덮어야 합니다. 어느 한쪽이 좁아지면 1단계가 성공해도 2단계는 실패합니다. 콘솔에서는 옳아 보이지만 트래픽을 나르지 않는 설정의 가장 흔한 형태입니다.

변경 검토 중에 양쪽 셀렉터를 나란히 인쇄하십시오.

고정 주소를 두 번의 적용으로 나누십시오

예약 주소와 이를 참조하는 터널을 한 번의 적용으로 만드는 것은, 전달 규칙이 쓰기 전에 주소가 존재해야 하므로 잘 알려진 불안정 원인입니다. 먼저 주소 리소스만 적용하고, 다음에 게이트웨이, 전달 규칙, 터널을 추가해 다시 적용하십시오. Terraform은 두 번째 실행에서 상태로부터 기존 주소를 읽고 재사용합니다. 이것을 건너뛰면 적용할 때마다 터널이 새 공인 주소를 받을 수 있고, 그때마다 피어 설정이 깨집니다.

지금 두 번 적용하는 편이 릴리스마다 피어를 바꾸는 것보다 쌉니다.

레이블이 아니라 협상을 검증하십시오

적용 후에는 터널이 연결됨을 보고하는지, 경로가 의도한 다음 홉으로 존재하는지, 피어가 1단계와 2단계 모두 올라와 있다고 보고하는지를 따로 확인하십시오.

터널은 올라와 있는데 2단계가 내려가 있다면 양쪽이 셀렉터에 대해 합의하지 못한 것입니다:

  • 한쪽은 다른 쪽이 나열하지 않은 서브넷을 나열합니다.
  • 한쪽은 다른 쪽이 좁힌 집계를 사용합니다.
  • 경로는 있지만 다른 터널을 가리킵니다.

Classic VPN은 HA VPN보다 SLA가 낮은 단일 터널이고, HA VPN은 두 개의 인터페이스, 두 개의 터널, 그리고 다른 리소스 유형의 BGP를 사용합니다. 클래식 예제를 HA 구성에 복사하고 셀렉터 필드가 같은 방식으로 동작하기를 기대하는 것은 피해야 할 별개의 실수입니다. 터널 필드 자체는 google_compute_vpn_tunnel 참조에 문서화되어 있습니다.

관련 글