소비자용 라우터나 NAS의 펌웨어는 종종 시작할 때마다 OpenVPN 구성을 다시 만들어서, 추가한 지시문은 정확히 다음 부팅까지만 유지됩니다. 웹 양식에 입력한 키도 마찬가지여서, 저장 후 저장된 값이 손상되어 돌아올 수 있습니다. 이 증상 중 어느 것도 변경이 거부되었다는 뜻은 아닙니다. 편집이 펌웨어가 출력으로 취급하는 파일에 들어갔고, 영구적인 위치는 부팅 순서에서 한 단계 앞이라는 뜻입니다.

편집한 파일이 다시 생성되는 이유

시작 스크립트가 템플릿에서 서버 구성을 조립한 다음 데몬을 실행하므로, 렌더링된 파일은 소스가 아니라 빌드 산출물이 됩니다. 시작 후에 추가된 것은 그 스크립트의 다음 실행에 보이지 않습니다. 두 번째 패턴은 더 미묘한데, 웹 인터페이스의 키와 인증서 입력은 이스케이프된 형태로 저장되며 양식을 저장하면 그 이스케이프된 텍스트가 데몬이 읽는 파일로 밀려 들어갈 수 있습니다. 어느 쪽이든 렌더링된 구성은 영구 변경을 하기에 잘못된 장소입니다.

부팅 순서가 무엇을 언제 쓰는지 보세요. 답은 거의 항상 펌웨어의 init 또는 자동 실행 디렉터리에 있는 스크립트입니다.

스크립트가 파일을 만드는 곳에 지시문을 삽입하세요

QTS 장치는 데몬을 시작하는 init 스크립트 안에서 OpenVPN 서버 구성을 다시 생성하므로, 편집은 거기서 이루어져야 합니다. 생성된 파일을 편집하는 대신 시작 명령 바로 앞에 추가 구문을 넣으세요.

sed -i '/daemon_mgr/i echo client-config-dir clientconfig >>/etc/openvpn/server.conf' /etc/init.d/vpn_openvpn.sh
grep -c client-config-dir /etc/openvpn/server.conf

줄 번호가 빌드마다 바뀌므로 움직이지 않는 명령에 삽입을 고정하세요. init 스크립트 자체가 부팅 중에 교체되므로, 시스템이 시작될 때마다 펌웨어 자동 실행 훅에서 변경을 다시 내보내야 합니다. 재부팅 후 생성된 파일에서 발생 횟수를 세어, 한 줄이면 패치가 작동한 것이고 두 줄이면 훅이 한 번 이상 실행되는 것입니다. 두 번 실행되는 문제는 사라진 변경과 같은 결함이 아니므로 별도로 조사하세요.

이스케이프된 키를 저장한 양식을 복구하세요

Asus 스타일 페이지에서 인증서와 키 입력란은 이스케이프된 텍스트를 표시하며, 관계없는 조정 후 저장하면 그 엔터티가 디스크에 다시 기록될 수 있습니다. 디코딩된 사본에서 작업하고 모든 편집이 준비된 후 한 번만 저장하세요.

openssl dhparam -out dh2048.pem 2048
grep -n "BEGIN DH PARAMETERS" dh2048.pem

새 매개변수 집합으로 바꿀 때 레이블이 키 본문을 요구하면 base64 페이로드만 붙여 넣고, 필드가 전체 PEM 블록을 기대할 때만 아머 줄을 유지하세요. 이미 이스케이프된 형태로 저장된 페이지를 복구하려면 보통 영향을 받은 입력란을 비우고 적용해야 하며, 그러면 펌웨어가 그것들을 다시 만들 수 있습니다. 2048비트를 넘는 것은 라우터의 엔트로피 공급으로는 작업이 느리고 때로 불안정해지기 때문에 워크스테이션에서 생성하세요. 매개변수 파일은 공장 초기화 후에도 접근할 수 있는 곳에 보관하세요.

업그레이드 후 다시 확인하세요

펌웨어 업데이트는 init 스크립트를 교체하고 자동 실행 디렉터리를 지울 수 있으므로 패치를 다시 설치하고 다시 테스트해야 합니다. 다시 생성된 파일을 보관한 사본과 비교하고 지시문이 정확히 한 번 있는지 확인하세요. 웹 인터페이스에 보이는 값은 페이지가 저장된 필드를 읽기 때문에 데몬이 받았다는 증거가 아닙니다. 패치 명령과 펌웨어 버전을 유지보수 노트에 적어 두면 다음 업데이트가 그것들을 이어받습니다.

그런 다음 클라이언트를 연결하고 푸시된 옵션에 대해 서버 로그를 읽으세요. 양식에만 존재했던 설정은 아무도 검증하지 않은 설정입니다.

관련 글