DD-WRT의 OpenVPN 2.5 리스너가 죽었나요? 생성된 설정을 읽어 보세요
OpenVPN 2.5는 이전 빌드가 받아들이던 설정을 거부합니다. DD-WRT에서는 방화벽을 건드리기 전에 생성된 파일과 데몬 로그를 먼저 읽으세요.
DD-WRT에서 리스너가 죽었다는 것은 보통 데몬이 설정을 분석하다가 종료되었다는 뜻이며, 방화벽 규칙이 포트를 막았다는 뜻이 아닙니다. OpenVPN 2.5는 이전 설정이 의존하던 기본값 몇 가지를 더 엄격하게 만들었고, 이전 빌드에서 동작하던 생성 설정도 소켓이 열리기 전에 거부될 수 있습니다. 이유는 라우터 자체의 로그에 있고, 입력은 생성된 파일에 있습니다. 이 순서로 둘 다 읽는 것이 어떤 패킷 캡처보다 빠릅니다.
데몬은 방화벽이 아니다
이 구분이 중요한 이유는 바깥에서 보면 두 고장이 똑같아 보이기 때문입니다. 클라이언트가 핸드셰이크를 보내고 아무것도 돌아오지 않습니다. 하나는 실행되지 않는 프로세스이고, 다른 하나는 실행되면서 필터링하는 프로세스입니다.
무엇이든 바꾸기 전에 두 가지 확인으로 둘을 분리하세요. 죽은 데몬에 방화벽을 고치는 것은 변수만 하나 더 늘립니다.
DD-WRT가 생성한 설정을 읽어라
DD-WRT는 웹 화면에 입력한 텍스트를 그대로 OpenVPN에 넘기지 않습니다. 생성된 설정을 /tmp/openvpn/openvpn.conf 에 쓰고 그 파일로 데몬을 시작하므로, 화면의 항목과 Additional Config의 텍스트는 OpenVPN이 보기 전에 이미 합쳐집니다. 생성된 파일 대신 폼을 디버그한다면 실제 입력이 아니라 의도를 읽는 셈입니다. 재부팅이 /tmp 를 지우기 전에 그 파일을 영구적인 위치로 복사하세요.
생성된 파일을 의도한 내용과 비교하세요. 특히 화면이 당신이 고른 적 없는 지시문을 쓰는 곳을 보세요. 폐기된 옵션을 내보내는 드롭다운은 폼에서는 보이지 않고 데몬에는 치명적입니다.
생성된 파일이 비어 있거나 없다면 데몬은 시작조차 하지 못한 것이고, 문제는 OpenVPN보다 상류에 있습니다.
OpenVPN 2.5가 받아들이지 않게 된 것
OpenVPN 2.5는 ncp-ciphers 를 data-ciphers 로 바꾸었고, 기본 최소 TLS 버전을 1.2로 올렸습니다. 압축 처리도 바뀌어, 압축을 제안하는 피어는 설정이 명시적으로 허용하지 않는 한 거부됩니다. 또한 ns-cert-type 같은 오래된 옵션 이름을 remote-cert-tls 대신 쓰도록 폐기했습니다. 이런 변경은 각각 이전에 동작하던 설정을 분석 또는 협상 실패로 바꿉니다.
실패 방식은 지시문에 따라 다릅니다. 알 수 없거나 제거된 옵션은 시작 시 데몬을 멈추며, 이것이 죽은 리스너입니다. 협상 불일치는 데몬을 계속 실행하면서 클라이언트를 거부하고, 클라이언트 쪽에서는 방화벽 문제처럼 보입니다.
로그에서는 마지막 오류가 아니라 첫 오류를 읽으세요. 분석은 첫 번째 잘못된 지시문에서 멈추고, 그 뒤의 모든 출력은 종료 과정의 잡음입니다.
Broadcom 전용 사전 조건
Broadcom 빌드에서는 데몬이 쓰기 전에 터널 장치가 있어야 합니다. tun 모듈이 로드되었는지, /dev/net/tun 가 있는지 확인하세요. 장치가 없으면 인증서와 무관한 시작 실패가 생깁니다. DD-WRT가 경로와 DNS를 위해 생성하는 보조 스크립트도 마찬가지입니다. 없거나 실행 가능하지 않으면 데몬은 시작해도 설정을 끝내지 못합니다.
실제 메시지가 필요할 때는 생성된 설정에 대해 더 높은 상세도로 데몬을 포그라운드에서 실행하세요. 포그라운드 실행은 init 스크립트가 삼켜 버린 분석 오류를 출력합니다.
그다음 정상 서비스로 되돌리세요. 포그라운드 데몬과 init 스크립트는 포트를 두고 다툽니다.
클라이언트를 디버그하기 전에 리스너가 있음을 증명하라
프로세스와 소켓을 따로 확인하세요. 하나는 실행 중인 데몬용, 다른 하나는 예상 주소에 바인딩된 UDP 포트용입니다. 소켓 없는 프로세스는 아직 설정 중이거나 잘못된 인터페이스에 바인딩되었다는 뜻입니다. 이 짝이 유용한 이유는 한쪽이 없으면 다른 쪽도 성립할 수 없기 때문입니다.
클라이언트 쪽 디버깅은 리스너가 존재한 뒤에야 의미가 있습니다. 그때 클라이언트의 암호와 TLS 설정이 서버의 data-ciphers 목록과 최소 버전에 맞는지, 포트가 실제로 라우터로 전달되는지 확인하세요.
생성된 설정과 수정을 입증한 로그 줄을 보관하세요. 다음 펌웨어 업데이트가 기본값을 다시 바꿀 수 있고, 그 기록이 재발을 다섯 분 점검으로 바꿔 줍니다.