가정용 라우터의 IPsec 패스스루: 실제로 하는 일
스위치는 하나의 프로토콜을 주소 변환 너머로 통과시킬 뿐, 라우터를 클라이언트로 등록하지 않는다. 교환을 기록하고 연결을 읽은 뒤 결정하라.
라우터의 패스스루 스위치는 그 뒤에 있는 장치를 위한 전달 양보이지 VPN 서비스가 아니다. 라우터를 클라이언트로 등록하지 않고, 자격 증명을 보관하지 않으며, 집 안의 모든 기기를 원격 출구로 밀어내지도 않는다. 하는 일은 하나의 프로토콜이 주소 변환과 필터를 어떻게 넘는지를 형성하는 것이다. 그것이 분명해지면 스위치는 시험하기도 쉽고 꺼 두기도 쉽다.
라우터가 실제로 하는 일
라우터는 클라이언트와 IPsec 피어 사이에 앉아, 이해하도록 설계된 적 없는 패킷을 전달한다. 제조사는 이 기능을 적어도 세 가지로 구현한다: 상태를 추적하거나 다시 쓰는 프로토콜 도우미, ESP 폐기를 멈추는 필터 예외, 또는 구형 클라이언트를 겨냥한 호환 모드다. 웹 인터페이스의 라벨은 셋 중 무엇인지 거의 말해 주지 않는다. 펌웨어 노트나 패킷 캡처만이 그것을 알려 준다.
도우미가 상황을 더 나쁘게 만들 수도 있다. 구형 흐름을 위해 작성된 지원은 이미 변환을 올바르게 처리하는 클라이언트와 충돌하기도 한다. 최신 클라이언트가 옵션을 끈 상태로 동작한다면, 끈 채로 두는 편이 더 나은 구성이다.
패스스루는 라우터에 피어의 키를 결코 주지 않는다. 라우터는 여전히 바깥 주소와 포트를 보고, 여전히 그것에 자기 전달 정책을 적용한다.
NAT와 NAT-T가 경로를 결정한다
IPsec은 주소 변환을 견디도록 만들어진 것이 아니므로 표준이 래퍼를 더했다. NAT 트래버설은 ESP를 UDP 안에 캡슐화해 일반 NAT 테이블이 흐름을 나르게 하고, 협상은 IKE 중에 그 전환에 합의한다(RFC 3948). IKE 자체는 UDP 500을 쓰고, 캡슐화된 경로는 보통 UDP 4500을 쓴다.
그래서 프로토콜 50만 허용하는 방화벽 규칙은 변환된 경로에서 충분하지 않다. 4500을 막으면 래퍼가 존재하는 이유인 경우가 깨지고, 500을 막으면 어떤 터널도 생기기 전에 협상이 멈춘다. 양방향이 모두 중요하다, 상태를 추적하는 라우터는 보통 요청을 본 뒤에야 응답을 허용하기 때문이다. 포트에 닿는 것은 인증을 마치는 것과 같지 않고, 보호된 트래픽을 전달하는 것과도 같지 않다.
구형 구성은 충분히 달라서 그것을 위해 쓰인 안내서가 오도할 수 있다. 클라이언트가 두 모드를 모두 제시하면 검색 결과가 더 많은 쪽이 아니라 피어가 문서화한 쪽을 시험하라.
실패하는 단계를 찾아라
문제를 협상, 인증, 자식 보호, 내부 전달로 나누고 한 번에 한 단계의 증거를 모아라. 결과를 일시적으로 바꾸는 재부팅은 어떤 상태가 관여했다는 것만 증명한다.
sudo tcpdump -ni any 'udp port 500 or udp port 4500'
ip xfrm state list
ip xfrm policy list
캡처는 교환이 피어에 닿는지, 응답이 돌아오는지를 보여 주어 필터 문제와 자격 증명 문제를 가른다. 상태 목록은 수립된 보안 연결을 보여 주므로, 시도 뒤의 빈 목록은 라우팅이 아니라 협상을 가리킨다. 정책 목록은 어떤 선택자가 설치되었는지를 보여 주며, 서브넷 밖 목적지가 배제되는 곳이 바로 거기다. 라우터를 만지기 전에, 라우터가 무엇을 허용하는지가 아니라 호스트가 무엇을 믿는지를 서술하는 xfrm의 두 출력을 읽어라.
패킷이 나가고 아무것도 돌아오지 않으면 캡처를 라우터의 WAN 쪽으로 옮겨라. 두 캡처를 비교하면 추측 없이 폐기 지점을 찾을 수 있다.
필요 없는 것은 꺼라
노트북 한 대가 동작한다고 해서 라우터가 여러 클라이언트를 동시에 처리한다는 증거는 아니다. 각 클라이언트는 자기 변환 상태와 자기 협상을 만들고, 일부 도우미는 하나의 흐름만 추적한다. 실제로 쓰는 네트워크에서 실제로 필요한 동시 세션 수를 시험하라. 두 번째 클라이언트가 실패하고 첫 번째가 잘 돌아간다면 그것이 발견된 사실이며, 불안정한 터널이 아니다.
캡처가 필요하다고 보여 줄 때만 옵션을 켜 두어라. 이런 동작은 릴리스 사이에 바뀌므로 펌웨어 버전을 결과 옆에 기록하라. 목표는 검증한 클라이언트 터널이지, 기대를 걸고 켠 스위치가 아니다.