dnsmasq가 53번 포트를 바인드하지 못할 때: 그 포트를 점유한 소켓 찾기
53번 포트의 바인드 실패는 소켓 소유권의 문제입니다. 리스너를 읽고, 와일드카드 범위를 확인한 뒤, 어느 데몬이 VPN 클라이언트에 응답할지 결정하십시오.
dnsmasq는 주소가 이미 사용 중이라는 오류로 종료되고, 로그에는 범인이 아니라 포트가 적힙니다. VPN도 함께 돌리는 머신에서는 밀어 넣은 경로를 의심하기 쉽지만, 바인드 실패는 어떤 클라이언트도 질의를 보내기 전에 일어납니다. 이미 무언가가 소켓을 쥐고 있고, 그 정체를 밝히는 것이 작업입니다. 경로를 바꾼다고 포트가 비지 않습니다.
순서는 다음 다섯 단계입니다. 오류를 재현하고, 리스너를 나열하고, 와일드카드를 이해하고, 담당을 정하고, 마지막으로 검증합니다.
1단계: 오류를 재현하고 읽기
서비스가 쓰는 것과 같은 설정으로 dnsmasq를 포그라운드에서 시작하면, 짐작해야 하는 로그가 아니라 터미널에 오류가 나타납니다. 메시지의 주소 체계와 로컬 주소를 보십시오. 특정 주소에 대한 바인드와 와일드카드에 대한 바인드는 소유자가 다른 서로 다른 실패입니다.
정확한 문구를 남기십시오. 주소 사용 중, 권한 실패, 인터페이스 없음은 모두 시작 실패로 나타나며, 각각 다른 세 가지 수리를 가리킵니다.
2단계: 소유자 나열하기
먼저 소켓을 나열합니다. 출발지 포트 53에 대한 필터는 볼 권한이 있을 때 두 전송 방식과 소유 프로세스를 함께 보여 줍니다:
ss -lntup 'sport = :53'출력은 열로 읽습니다. 전송 방식, 로컬 주소, 포트, 프로세스입니다. TCP 리스너와 UDP 리스너는 별개의 소켓이므로 하나를 멈춰도 다른 하나는 비지 않습니다. 와일드카드 주소는 모든 인터페이스를 덮으므로, 어느 줄도 이름을 대지 않아도 VPN 주소는 이미 잡혀 있습니다. 그리고 프로세스 이름을 보면 배포판이 관리하는 리졸버인지, 컨테이너인지, 이전 실험이 켜 둔 것인지 알 수 있습니다.
3단계: 와일드카드의 함정
bind-interfaces 옵션은 dnsmasq가 와일드카드 소켓을 바인드할지, 설정된 인터페이스마다 하나의 소켓을 바인드할지를 바꿉니다. dnsmasq 참조 문서가 설명하는 대로입니다. 이것이 없으면 dnsmasq는 와일드카드를 바인드한 뒤 요청을 인터페이스별로 거를 수 있는데, 다른 데몬이 와일드카드를 쥐고 있으면 곧바로 실패합니다. Linux는 bind-dynamic을 추가했고, 이는 시작 후에 만들어진 인터페이스를 다룹니다. VPN 인터페이스가 접속할 때만 나타난다면 실제로 문제가 됩니다.
그래서 서로 다른 인터페이스용으로 설정된 것처럼 보이는 두 데몬이 여전히 충돌합니다. 충돌은 의도가 아니라 소켓에서 일어납니다. 바인드 방식을 의도적으로 고르고, 바꾸기 전에 해당 버전의 문서화된 동작을 읽으십시오.
4단계: 담당 정하기
어느 데몬이 VPN 클라이언트에 응답하고 어느 것이 호스트에 응답할지 정합니다. 터널 주소에서 대기하며 상류로 전달하는 리졸버 하나가 흔한 구성입니다. 각자 53번 포트를 소유한다고 가정하는 리졸버 둘은 구성이라고 할 수 없습니다.
그다음 그 결정을 각 서비스의 설정에 표현합니다. 대기 주소, 인터페이스 필터, 전달입니다. 변경은 서비스의 소유자, 즉 배포판 유닛, 네트워크 관리자, 컨테이너 런타임을 통해 해야 재시작 후에도 남습니다.
5단계: 소켓을 검증하고, 다음에 경로
재시작 후 클라이언트를 시험하기 전에 의도한 소켓이 있는지 확인합니다. 한 번도 바인드하지 않은 데몬은 경로로 구제할 수 없고, 올바르게 바인드된 소켓에 대한 클라이언트 실패는 다른 수리가 필요한 다른 문제입니다. 그다음 터널 위의 클라이언트에서 도달성을 확인합니다. 필요한 이름이 해석되는지는 그 뒤에 물어야 할 일입니다.
구분해 두어야 할 세 가지 결과가 있습니다. 소켓이 있는지, 클라이언트가 거기 닿는지, 답이 올바른지입니다.
하지 말아야 할 일
무엇이 의존하는지 모른 채 포트를 비우려고 낯선 리졸버를 멈추지 마십시오. 호스트 자체의 조회가 보통 그것에 의존합니다. 두 번째 데몬을 공용 대기 주소로 옮기는 옛 처방을 베끼지 마십시오. 부작용으로 누가 당신에게 질의할 수 있는지를 정하게 됩니다. 실패가 국소적이었는데 전달을 추가하지도 마십시오.
머신이 관리 대상이라면 소유권 결정을 다음 관리자가 찾을 수 있는 곳에 기록하십시오. 이미지를 다시 빌드할 때마다 포트 충돌은 돌아옵니다.