터널을 올렸고 재키 타이머는 줄어들고 있는데 두 방향 모두 여전히 제로 패킷을 가리킵니다. 이 두 숫자는 피어가 터널을 거부했다는 뜻이 아닙니다. 카운터가 유휴인 설치된 CHILD SA는 아직 아무것도 일치하지 않은 연결의 정상 상태입니다. 할 일은 패킷이 마땅히 일치했어야 함을 입증하고, 그다음 선택자가 설명하는 경로를 벗어난 지점을 찾는 것입니다. 한 번만 순서대로 하십시오. 그리고 실행 사이에 요청을 동일하게 유지하십시오.

제로 카운터가 실제로 증명하는 것

CHILD SA는 선택자 쌍에 그 범위로 들어오는 트래픽을 암호화하는 키와 SPI를 더한 것입니다. 설치했다는 것은 두 피어가 그 범위와 파생 키에 합의했다는 뜻일 뿐이며, 커널은 패킷이 하나도 도착하지 않아도 몇 시간 동안 유지합니다. 따라서 질문은 터널의 존재 여부가 아니라, 테스트가 보낸 패킷이 두 피어가 협상한 범위에 들어갔는가입니다. 들어가지 않았다면 카운터는 제로로 남고 연결은 수명이 끝날 때 사용되지 않은 채 만료됩니다.

이 구분은 무엇을 먼저 살필지를 바꿉니다. 거부된 제안, 인증 실패, 죽어가는 IKE SA는 모두 로그나 SA 목록에 나타나며 조용한 제로로 나타나지 않습니다. 깔끔하게 협상한 뒤 유휴로 남는 터널은 오히려 일치, 라우팅, 테스트 트래픽의 발생 지점을 가리킵니다.

보내기 전에 설명할 수 있는 흐름을 보내십시오

보호된 서브넷 안의 목적지를 골라 새 연결을 여십시오. 한 시간 전에 읽은 페이지는 캐시에서 제공될 수 있고, 캐시된 응답은 터널을 전혀 건드리지 않습니다. 그런 다음 요청이 아직 가설일 때 네 가지 값을 적으십시오. 애플리케이션이 바인딩할 출발지 주소, 목적지, 주소 체계, 그리고 관찰 중인 자식의 이름이나 선택자 쌍입니다. 그 기록이 평평한 카운터를 검증 가능한 주장으로 바꿉니다.

출발지 주소는 사람들이 건너뛰는 값이며, 테스트를 가장 자주 깨뜨리는 값입니다. 유선 주소, Wi-Fi 주소, 터널 주소를 가진 노트북은 경로 조회에 따라 그중 아무거나 바인딩할 수 있고, 협상된 범위에 들어가는 것은 하나뿐일 수 있습니다. ping -I 10.1.0.5 10.2.0.9이나 curl --interface 10.1.0.5처럼 출발지를 고정할 수 있는 도구를 써서 패킷이 조용히 다른 주소를 고르지 못하게 하십시오. 고정한 실행에서 카운터가 움직이고 고정하지 않은 실행에서 움직이지 않는다면, 찾은 것은 IPsec 문제가 아니라 라우팅 문제입니다.

어떤 숫자를 읽고, 그것이 어디에 사는가

Linux에서는 ip -s xfrm state가 각 연결을 바이트 합계와 패킷 합계가 그 SA에만 속하는 lifetime current: 줄과 함께 출력하고, 이어서 재전송과 오류 카운터용 stats: 줄이 나옵니다. strongSwan 피어에서는 swanctl --list-sas가 설치된 자식마다 in 줄 하나와 out 줄 하나를 보여 주고, 각각 바이트 수와 패킷 수로 끝납니다. 오래된 stroke 도구는 같은 쌍을 bytes_i과 bytes_o이라고 부릅니다. 두 방향을 따로 읽으십시오. 평평하게 남은 방향이 바로 발견입니다. 둘을 더하면 찾고 있는 비대칭이 정확히 가려집니다.

두 보기 모두 연결 단위이므로 재키는 새 SPI 쌍을 설치하고 아무것도 깨지지 않은 채 기준선이 제로로 돌아갑니다. 재키 타이머가 발동하기 전에 관찰 중인 SPI를 적어 두십시오. 그렇지 않으면 새 SA를 오래된 숫자와 비교하게 됩니다. 나가는 쪽이 늘고 들어오는 쪽이 평평하면 선택자가 일치했고 응답이 돌아오지 않은 것이므로, 조사는 피어의 전달과 자체 정책으로 옮겨 갑니다. strongSwan의 IKEv2 구성 문서는 자식 SA의 수명 주기와 이 숫자 뒤에 있는 재키 시점을 다룹니다.

관측 지점은 패킷의 발생 지점과 별개의 변수입니다. 하드웨어 오프로드는 연결 카운터를 올릴 수 있지만 인터페이스의 소프트웨어 캡처에는 아무것도 보이지 않습니다. 오프로드된 패킷이 캡처가 앉은 훅을 건너뛰기 때문이며, 들어오는 쪽도 같은 방식으로 어긋날 수 있습니다. 둘이 일치하지 않으면 무엇이 일치했는지는 카운터로, 패킷이 어떤 모습이었는지는 캡처로 답하십시오.

경로, 선택자, 그리고 패킷이 태어난 곳

세 가지를 나란히 비교하십시오. 커널이 목적지에 대해 고르는 경로, 트래픽을 터널로 보내는 정책, 자식이 협상한 선택자 쌍입니다. ip route get 10.2.0.9 from 10.1.0.5은 커널이 사용할 인터페이스와 출발지를 지목하며, 그것은 흔히 여러분이 가정한 쌍이 아닙니다. ip xfrm policy는 로컬에 설치된 템플릿과 선택자를 보여 주고, swanctl --list-sas은 피어가 무엇에 합의했는지 보여 줍니다. 패킷을 물리 인터페이스로 내보내는 조회는 정책에 아예 닿지 않으므로 카운터는 움직일 수 없습니다.

불일치는 여러 형태로 오지만 카운터에서는 똑같아 보입니다. IPv4 선택자 밖의 IPv6 목적지, 잘못된 서브넷의 출발지 주소, 자식보다 좁은 정책은 모두 같은 제로를 만듭니다. 가장 좁은 원인을 먼저 고치십시오. 숫자를 옮기려고 선택자를 넓히면 터널이 보호하는 대상이 달라집니다.

다음은 패킷의 발생 지점입니다. 게이트웨이가 자기 운영자에게 놓는 함정입니다. 게이트웨이가 스스로 만든 트래픽은 출력 정책과 대조되고, 클라이언트를 위해 전달하는 패킷은 전달 정책과 대조되므로, 그 장비에서 보낸 ping은 어떤 클라이언트도 지나지 않는 경로에서 성공할 수 있습니다.

되돌릴 수 있는 변경 하나와 검토를 견디는 보고서

요소를 하나만 바꾸고 동일한 요청을 반복하며 같은 카운터를 읽으십시오. 방화벽 규칙을 모두 지우거나 선택자를 한꺼번에 바꾸면 숫자는 움직이지만 왜 그런지 알려 준 증거가 파괴됩니다. 두 번째 실행에서도 제로이면 오후를 낭비하는 대신 가설 하나를 제거한 것입니다.

발견은 다른 사람이 재현할 수 있는 형태로 쓰십시오. 자식 이름, 승인된 범위, 고정한 출발지, 시험한 목적지, 제로로 남은 방향, 읽고 있던 SPI입니다. 그 문장이 아무도 쓰지 않은 연결과 트래픽을 받고 거부한 원격 애플리케이션을 구분합니다. 카운터를 움직이지 않았다면 변경을 되돌리고 기록은 남기십시오. 다음 사람은 여러분이 멈춘 지점에서 시작합니다. 이 모든 일에 터널을 다시 지을 필요는 없었고, 구성에 손대기 전에 일치를 확인하는 의미가 바로 거기에 있습니다.

관련 글