줄마다 하나의 OpenVPN 지시문, 그리고 줄바꿈이 거짓말하는 이유
화면의 부드러운 줄바꿈은 파일의 새 줄이 아닙니다. 잘못된 구간을 낯선 사람의 템플릿으로 바꾸기 전에 실제 줄바꿈을 확인하세요.
예전에는 시작되던 프로필이 이제 옵션 오류로 실패하고, 파서가 인용한 줄은 화면에서는 완전히 합리적으로 보입니다. 이것이 함정입니다: 설정 파일은 물리적 줄의 목록이고, 각 줄은 하나의 옵션 키워드와 그 인수를 담고 있으며, 편집기가 감싼 긴 줄은 바이트를 보기 전까지 두 줄과 똑같아 보입니다. 네트워크, 인증서, 터널은 이 실패 유형과 관련이 없습니다. 화면에서 동일해 보이는 두 줄이 단 하나의 바이트만 다를 수 있습니다.
아래 검사를 순서대로 수행하고 처음 실패하는 곳에서 멈추세요. 각 검사는 다음보다 비용이 적고, 각각 다른 설명을 배제합니다.
한 줄, 하나의 지시문
파서는 한 줄을 읽고 첫 단어를 옵션으로 취하며 나머지를 그 옵션의 인수로 취급합니다. 따라서 cert server.crt port 1194 같은 줄은 연속된 두 명령이 아닙니다. 세 개의 인수를 가진 하나의 cert 옵션이며, 세 번째는 그 옵션이 받아들이는 파일 이름이 아닙니다. 오류를 빠진 줄바꿈으로 읽는 것은 맞고, 빠진 지시문으로 읽는 것은 틀립니다.
# malformed: one option, three arguments
cert server.crt port 1194
# intended: two options, one argument each
cert server.crt
port 1194
그 두 개의 고친 줄은 조각이며 설정이 아닙니다. 경계가 어디에 속하는지 보여주기 위해 존재합니다. 프로필의 모든 일반 지시문은 같은 규칙을 따르고, 둘을 이어 붙인 줄은 인수 오류나 옵션이 예상하지 못한 값을 만듭니다.
줄바꿈이 진짜임을 증명하세요
편집기는 표시를 위해 감쌉니다. 일부는 붙여넣을 때 강제 줄바꿈도 넣고 일부는 넣지 않으므로, 같은 시각적 결과가 아주 다른 두 파일에서 나올 수 있습니다. 무엇이든 바꾸기 전에 줄 끝을 보여주고 줄 수를 세세요. 측정은 명령 하나의 비용이고, 추측은 저녁 하나의 비용입니다.
cat -A /etc/openvpn/server/lab.conf | sed -n '10,20p'
awk 'NR>=10 && NR<=20 {printf "%d:%s\n", NR, $0}' /etc/openvpn/server/lab.conf
첫 번째 출력에서는 모든 실제 줄바꿈이 $ 표시로 나타나므로, 감싸였지만 분할되지 않은 줄은 화면이 감싸는 지점에 아무 표시도 보이지 않습니다. 두 번째 명령은 번호가 붙은 줄을 인쇄하며, 파서가 보고하는 것과 파일이 담고 있는 것을 비교하는 가장 빠른 방법입니다.
추가 공백도 지시문을 만들지 않습니다. 들여쓰기는 겉모양일 뿐이고, 공백으로 시작하는 줄도 여전히 같은 단일 옵션입니다. 오류 메시지가 줄 번호를 가리키면, 그 줄이 속한 단락이 아니라 바로 그 줄을 읽으세요.
지시문 목록이 아니라 경로를 인용하세요
따옴표는 공백이 있는 인수를 위한 것이지 옵션을 묶기 위한 것이 아닙니다. 공백이 있는 인증서 경로에는 자체 따옴표가 필요합니다. 따옴표 한 쌍을 공유하는 두 지시문은 여전히 하나의 잘못된 줄입니다.
cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"
옵션 이름을 레이아웃과 동시에 확인하세요. 이어 붙인 줄은 존재한 적 없는 그럴듯한 토큰을 만들 수 있습니다. 포트 지시문은 port입니다. 같은 생각에 다른 것을 쓰는 프로필은 줄 경계를 고친 뒤에도 실패합니다. 이름이 낯설면 포럼 예제가 아니라 실행 중인 버전의 옵션 목록과 비교하세요.
인라인 블록은 블록으로 유지하세요
프로필은 인증서와 키를 인라인으로 담을 수 있고, 그 블록은 설정이 아니라 데이터입니다. 블록 안의 PEM 줄은 평평하게 만들거나 다시 들여쓰거나 이어 붙일 옵션이 아니며, 블록 표시는 각자의 줄에 남아야 합니다.
인라인 블록을 불투명 영역으로 취급하세요. 주변의 옵션 줄을 고치고, 내용은 바이트 하나도 건드리지 말고, 절대 공개 지원 스레드에 붙여넣지 마세요. 서식 도구가 블록을 다시 썼다면 손으로 고치는 대신 PKI에서 복원하세요.
템플릿이 아니라 가장 작은 구간을 고치세요
유혹적인 수리는 전체 파일을 „작동하는” 자습서의 설정으로 바꾸는 것입니다. 그것은 잘못된 줄 하나를 아무도 검토하지 않은 정책 변경 묶음과 맞바꿉니다. 다른 DH 매개변수, 압축 설정, 암호 선택, 중복 리스너입니다. 원래 문제는 작고 국소적이며, 대체물은 둘 다 아닙니다.
프로필을 보호된 작업 파일에 복사하고, 그 사본에서 줄 경계를 고치고, 서비스의 정상 소유자가 그것을 로드하게 하세요. 그런 다음 인스턴스를 시작하고 첫 오류가 있으면 처음부터 읽으세요.
openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log
구문 분석 단계를 통과하면 다음 실패는 어휘가 아니라 파일, 인증서 또는 암호에 관한 것이 되고, 그것이 실제 진전입니다. 작업 사본과 무엇을 이어 붙였는지에 대한 한 줄 메모를 남기세요. 같은 붙여넣기가 같은 팀의 다른 사람에게 다시 일어날 것입니다.