가정용 라우터 두 대, 포워딩된 포트는 없음, 그래도 때때로 연결되는 VPN. UDP가 이를 허용하는 이유는 방화벽이 머신이 이미 시작한 흐름과 대조할 수 있는 패킷을 받아들이기 때문입니다. 이것은 기능이 아니라 조건부 요령이며, 방화벽이 무엇을 비교하는지 알면 조건을 말하기 쉽습니다. 동일한 프로필이 네트워크마다 다르게 동작하는 이유도 여기에 있습니다.

방화벽이 하는 비교

나가는 데이터그램마다 짧게 사는 항목이 생깁니다. 출발지 주소, 출발지 포트, 목적지 주소, 목적지 포트입니다. 이 항목과 일치하는 것은 응답으로 취급되어 통과됩니다. 인바운드 규칙은 여기에 관여하지 않습니다.

따라서 질문은 방화벽이 상대를 들여보내느냐가 아닙니다. 상대의 패킷이 그 항목이 기다리는 응답처럼 보이느냐입니다. 그 네 부분 튜플의 필드 하나만 바꾸면 패킷은 낯선 것이 됩니다. 그래서 포트 번호만 바뀌어도 동작하던 설정이 깨질 수 있고, 같은 포트가 한 라우터에서는 되고 다음 라우터에서는 안 되는 것입니다.

로컬 출발지 포트를 고정하면 같은 번호가 교환의 양쪽에 나타납니다. 이것이 전부이고, 요령이 신비롭지 않고 취약한 이유도 여기에 있습니다.

양 끝에서 포트 하나 고정하기

OpenVPN의 기본 UDP 포트는 1194이고, lport는 보내는 출발지 포트를 설정합니다. 양쪽 피어를 고정하면 각자의 나가는 튜플이 상대가 듣고 있는 포트를 가리킵니다.

# peer A
lport 1194
remote 198.51.100.20 1194
# peer B
lport 1194
remote 203.0.113.10 1194

이것은 두 지점 사이의 어떤 라우터도 출발지 포트를 다시 쓰지 않는 동안에만 동작합니다. 캡처에 패킷이 보이는데 터널이 올라오지 않으면 재작성이 첫 번째 용의자입니다.

튜플이 일치를 멈추는 곳

목적지별로 매핑하는 NAT는 피어마다 다른 외부 포트를 줍니다. 피어에게 쓰라고 알려준 주소가 실제로 도달하는 주소가 아니므로, 들어오는 패킷은 아무것도 일치하지 않아 조용히 버려집니다.

통신사급 변환, 중첩 NAT, 포트 무작위화는 모두 같은 결말을 맞습니다. 주소는 그대로 두고 포트만 다시 쓰는 중간 상자도 마찬가지입니다.

스트림 전송은 더 불리합니다. TCP 핸드셰이크는 단계별로 추적되므로 TCP 기반 VPN은 이 방법으로 전혀 뚫을 수 없고 경로 어딘가에 리스너가 필요합니다.

보통 한쪽이 먼저 실패합니다

실제로 두 네트워크가 같게 동작하는 경우는 드뭅니다. 한 라우터는 예측 가능한 매핑을 주고 다른 하나는 목적지별 포트를 주면, 두 가정 사이에서는 되고 모바일 네트워크에서는 실패하는 설정이 됩니다. 서로 모순되는 보고는 보통 서로 다른 두 쌍의 라우터를 설명합니다. 어느 쪽 글쓴이도 틀리지 않고, 어느 결과도 일반화되지 않습니다.

프로필을 건드리기 전에 어느 쪽이 패킷을 버렸는지 알아내세요. 양 끝의 캡처가 한 번에 판정합니다. A를 떠나 B에 닿지 않는 데이터그램은 흐름이 도중에 다시 쓰였다는 뜻이고, B에 닿았는데 응답이 돌아오지 않는 데이터그램은 방화벽이 이를 관련된 것으로 받아들이지 않았다는 뜻입니다.

공인 IPv6 주소를 가진 두 피어는 문제 자체를 피해갑니다. 변환이 없으면 대조할 것이 없으므로 피어를 지목한 방화벽 규칙이면 충분하고 설계는 라우터 동작에 의존하지 않게 됩니다.

언제 시도를 멈출까

공인 주소를 가진 호스트가 확실한 답입니다. 양쪽 피어를 위해 터널을 종료할 수도 있고, 서로의 현재 외부 주소를 찾도록 도울 수도 있으며, NAT가 무엇을 하든 두 방식 모두 동작합니다. 정책이 허용한다면 관리형 오버레이가 같은 조정을 제공합니다.

이 중 어느 것도 방화벽을 꺼야 하지 않습니다. 직접 연결을 얻으려고 보호를 끄는 것은 직접 시도가 매력적이었던 이유를 버리는 일이며, 테스트가 끝날 때까지 머신을 열어 둡니다.

먼저 직접 구성을 시도하고, 본 것을 기록하세요. NAT 동작과 그것을 보여준 캡처는 결국 사용한 포트 쌍보다 값집니다. 다음 네트워크는 다를 것이기 때문입니다.OpenVPN 2.6 매뉴얼은 lport와 이것이 의존하는 remote 옵션을 문서화합니다.

관련 글