IPsec NAT 트래버설이 ESP를 UDP 안에 감싸는 방식
ESP에는 포트가 없으므로 NAT 트래버설이 4500에서 UDP로 감쌉니다. 제어 교환과 캡슐화된 데이터 경로를 두 개의 별도 단계로 확인하십시오.
같은 라우터 뒤의 두 클라이언트가 하나의 IPsec 게이트웨이와 통신하는데, 한쪽만 계속 끊기고 다른 쪽은 연결을 유지한다. 원래 ESP는 포트가 없는 IP 프로토콜 50이므로, 여러 클라이언트가 하나의 주소를 공유하면 변환 장치는 매핑을 걸 대상이 없다. NAT 트래버설은 ESP를 4500에서 UDP로 감싸 그 틈을 메우며, 그 헤더가 이어지는 대부분의 증상을 설명한다. 변경해야 할 장치도 가리킨다.
데이터 플레인이 4500 포트로 옮겨가는 이유
설정 중에 IKEv2는 각 측이 사용한다고 믿는 주소와 포트를 NAT 검출 알림에서 해시를 교환해 비교한다. 해시가 일치하지 않으면 경로 어딘가에 변환 장치가 있고, 양쪽 피어는 보호된 트래픽을 UDP 캡슐화로 전환한다. 변환 장치를 만난 세션이 그렇지 않은 세션과 달라 보이는 이유다.
감싸는 것은 봉투이지 프로토콜 변경이 아니다: ESP는 헤더, 무결성 검사, 암호화를 그대로 유지한다, UDP는 변환 장치에 필요한 포트만 제공한다. 포트 500은 IKE 교환을 나르고, 4500은 검출 후 캡슐화된 데이터를, 흔히 이후 IKE 메시지도 나른다. 어느 포트도 흐름을 TCP 연결로 만들지 않는다. 캡처를 읽는 대부분의 사람을 오도하는 가정이 바로 이것이다.
두 단계를 순서대로 확인한다
먼저 제어 교환을, 다음으로 데이터 경로를 입증하고, 둘을 메모에서 분리해 둔다. 500에서 트래픽이 보이고 4500에서는 전혀 보이지 않는 캡처는 보통 데이터 경로가 필터링된다는 뜻이므로, 수정은 클라이언트가 아니라 방화벽 규칙에 속한다.
tcpdump -ni any 'udp port 500 or udp port 4500'로 두 포트를 관찰하고, 세션이 살아 있는 동안 라우터의 변환 표를 읽는다. 그 표는 게이트웨이가 실제로 볼 출발 포트를 보여 주며, 노트북의 캡처는 설계상 그것과 다르다. 노트북은 500이라고 믿고 게이트웨이는 변환된 출발 포트와 함께 4500을 보며, 둘 다 옳다. 같은 흐름의 변환 전과 후는 다음과 같다:
client 192.0.2.10:500 -> router 203.0.113.7:62000 -> gateway 198.51.100.9:4500
감싸기가 설명하는 증상, 그리고 설명하지 못하는 두 가지
제어 교환은 허용하지만 캡슐화된 데이터는 차단하는 라우터 는 '터널은 올라갔지만 아무것도 지나가지 않는다'는 보고를 만든다. 매핑 표는 만료되므로 유휴 세션에는 피어가 일부러 보내는 keepalive 트래픽이 필요하며, 그 패킷은 상태 검사가 아니다. 하나의 게이트웨이 뒤 여러 클라이언트가 함께 실패하면 그 게이트웨이의 변환과 구식 패스스루 기능을 조사한다. 감싸기는 터널이 올라간 뒤 모든 클라이언트에서 실패하는 애플리케이션이나 차단 페이지의 인증서 경고를 설명하지 못한다. 둘 다 이 계층 위에 있다.
두 클라이언트에 대해 매핑 표를 한 번에 읽는다. 둘 다 같은 변환 포트를 보여 준다면 장치는 게이트웨이가 요구하는 방식으로 둘을 분리하지 않는 것이다. 원래 ESP를 한 호스트에만 넘기는 패스스루 모드는 여러 변환 클라이언트를 서비스하는 것과 같지 않다. 벤더가 둘 다 IPsec 친화적이라고 설명하더라도 마찬가지다. 이중 NAT는 매핑 계층과 만료 지점을 하나 더 추가하지만, 아웃바운드 연결을 자동으로 끊지는 않는다.
keepalive 트래픽은 운영 매뉴얼에서 별도의 줄을 가질 만하다. 유휴 기간에 응답 경로를 열어 두는 것이 바로 그것이기 때문이다. 벤더가 문서화한 곳에서 활성화하고, 세션이 첫 사용이 아니라 몇 분의 침묵 뒤에 죽을 때 그것을 먼저 확인한다.
매핑의 소유자를 바꾸고, 그다음 다시 테스트한다
포트를 추측하지 말고 양쪽 피어에서 지원되는 NAT 트래버설 설정을 따른다. 한 클라이언트에서 로컬 출발 포트를 편집해도 반대편에서 수신 대기하는 서비스를 바꿀 수 없고, 보통 이미 만들어진 매핑을 깨뜨린다. 클라이언트가 통제하지 않는 장치 뒤에 있다면 변경은 그 소유자의 몫이다.
어떤 변경 뒤에도 두 단계 검사를 반복하고 상태 화면이 초록색이 된 것만이 아니라 데이터 패킷이 통과하는지 확인한다. 튜플, 매핑 표 출력, 규칙 변경을 하나의 메모에 남겨 다음 사람이 제어 교환부터 다시 시작하지 않게 한다. strongSwan의 NAT 트래버설 관련 노트 는 두 단계 뒤에 있는 캡슐화와 keepalive 설정을 다룬다.