집 VPN 서버에 연결할 수 없음: NAT 사슬을 따라가기
라우터, 통신사 변환기, 서버 리스너는 서로 다른 세 개의 경계입니다. 같은 포워딩 규칙을 다시 쓰기 전에 관리 페이지에서 바깥으로 나아가십시오.
서버는 LAN에서 응답하고 포트 포워딩 규칙도 맞아 보이는데 외부 클라이언트는 여전히 접속할 수 없습니다. 경계를 하나씩 바깥으로 지나가는 편이 규칙을 네 번째로 고치는 것보다 빠른 이유는, 각 경계가 저마다의 증거, 즉 라우터의 WAN 페이지와 통신사의 변환과 호스트의 리스너를 남기기 때문입니다. 이미 열어 둔 관리 페이지에서 시작해 내가 통제하지 않는 네트워크에서의 시험으로 끝내십시오. 순서 자체가 진단이고 기억한 숫자는 증거가 아니므로 결과는 그때그때 적어 두십시오. 바깥으로 나가는 터널만 필요하다면 변환은 문제가 아니며, 막히는 것은 요청되지 않은 인바운드뿐입니다.
라우터의 WAN 페이지에서 시작하십시오
라우터에 로그인해 포트 포워딩 목록이 아니라 상태 페이지를 읽으십시오. WAN 주소, 그것이 속한 인터페이스, 연결 방식이 DHCP인지 PPPoE인지 아니면 통신사가 제공하는 다른 것인지를 적어 두십시오. 그다음 그 주소를 외부 서비스가 보고하는 값과 비교하되, 관측이 같은 라우터를 거쳐 되돌아오지 않도록 모바일 데이터의 휴대전화를 쓰십시오. 두 숫자는 서로 다른 질문에 답하며, 둘을 비교하는 것이 이 단계의 목적 전부입니다.
관측된 공인 주소와 다른 WAN 주소는 라우터 위쪽에 적어도 하나의 변환기가 있다는 뜻입니다. 아직 고장은 아니며, 많은 통신사가 설계상 변환해도 서비스는 그대로 동작합니다. 둘이 일치하면 주소는 라우터의 것이고 문제는 내부 네트워크로 옮겨 간 것입니다. 통신사는 주소를 다시 할당하므로 지난달 메모와의 비교가 무의미하기에, 어느 쪽이든 날짜와 함께 그 쌍을 적어 두십시오.
한 홉 위로 올라가기
라우터 자체에서 traceroute를 실행하고 처음 몇 홉을 읽으십시오. 공인 주소의 반복, 사설 주소로 응답하는 첫 홉, 공유 100.64.0.0/10 범위 안의 주소는 모두 상류의 변환기를 가리킵니다. RFC 6598 은 바로 이런 배포를 위해 그 범위를 정의하며, WAN 항목에서 그것을 보는 것이 호기심이 아니라 강한 신호인 이유입니다. 경로에 변환기가 둘이면 흔적이 덜 분명해지므로 한 줄이 아니라 패턴을 읽으십시오.
일부 통신사는 할당 주소를 고객 포털에서만 보여 주므로, 라우터가 거짓말한다고 결론 내리기 전에 그곳을 보십시오. 포털의 주소가 외부 관측과 일치하는데 라우터가 다른 값을 보고한다면 그것이 상류 변환기의 가장 분명한 증거입니다. 어느 경계가 누구의 것인지에 대한 논의는 날짜가 찍힌 그림 두 장이 있으면 훨씬 빨리 끝나므로, 두 화면을 변경 기록에 남기십시오.
리스너와 포워딩 확인하기
LAN에서의 시험은 서비스가 국지적으로 동작함을 보여 줄 뿐 바깥에서의 도달성에 대해서는 아무것도 보여 주지 않습니다. 많은 라우터가 자기 포워딩 규칙에 안쪽에서 응답하므로, 외부 경로가 아직 닫혀 있어도 헤어핀 시험은 성공합니다. 데몬이 생각하는 주소와 포트에 실제로 묶여 있는지 확인한 다음 바깥에서 시험하십시오. 아래의 모든 작업은 읽기 전용입니다.
ss -lunp | grep -E '1194|51820'
ip -4 addr show | grep -E 'inet '
curl -s --max-time 5 ifconfig.me
traceroute -n -m 5 1.1.1.1
바깥 시험에서 라우터에 패킷이 전혀 도착하지 않는다면 누락은 상류에서 일어난 것이고 어떤 로컬 규칙도 고치지 못합니다. 패킷은 도착하는데 아무 응답이 없다면 다음 경계는 리스너나 호스트의 방화벽입니다. 호스트에서 패킷을 잡으면 둘 중 무엇을 보고 있는지 판정되며, 규칙을 짐작하는 또 한 차례보다 시간이 덜 듭니다. 그러지 않으면 다음 시험이 다른 질문에 답하게 되므로, 비교하는 동안에는 리스너와 그 전송 방식을 바꾸지 마십시오.
같은 규칙이 아니라 토폴로지를 바꾸기
변환기가 통신사의 것이라면 해결책은 또 하나의 포워딩이 아니라 다른 경로입니다. 공인 주소가 있는 작은 VPS를 집 쪽에서 나가는 터널로 연결하면 서비스 앞에 도달 가능한 종단이 생깁니다. 통신사가 제공하는 공인 주소는 있는 곳에서는 더 간단하고 기계를 돌리는 것보다 대개 저렴합니다. IPv6는 변환을 완전히 없애지만, 클라이언트 네트워크와 DNS 레코드, 방화벽 정책이 모두 지원해야 합니다.
동적 DNS 는 이름만 갱신할 뿐 도달성을 만들어 주지 않으며, 공유 주소를 가리키면 클라이언트를 다른 가입자도 쓰는 통신사 게이트웨이로 보내게 됩니다. 그 실패는 죽은 서버와 똑같이 보이므로 앞 단계의 기록이 중요합니다. 시험이 실패했을 때 이름이 어느 주소로 해석되었는지 적어 두고, 그 답을 시험 결과와 함께 보관하십시오.
내가 통제하는 경계, 즉 리스너와 터널과 경로를 중심으로 계획을 다시 쓰십시오. 토폴로지와 더 이상 맞지 않는 규칙은 규칙이 없는 것보다 나쁘므로, 오래된 포워딩은 아직 참인 무언가를 설명하는 동안에만 남겨 두십시오. 실제로 어느 계층이 막고 있었는지, 어떤 증거가 그것을 보여 주었는지 기록하십시오. 그러지 않으면 관리 페이지를 여는 다음 사람이 이 여정의 모든 단계를 처음부터 되풀이합니다.