Ubuntu 부팅 시 OpenVPN: NetworkManager와 systemd 중 무엇을 쓸까
노트북과 화면 없는 서버는 서로 다른 부팅 경로가 필요합니다. NetworkManager의 보조 연결을 openvpn-client@ 및 그 자격 증명 파일과 비교합니다.
대부분의 안내서는 이 선택을 NetworkManager가 터널을 올리게 하거나 systemd 인스턴스를 활성화하고 끝내면 된다는 겉모습의 문제로 제시합니다. 두 경로는 화면 없는 머신에서 결과를 좌우하는 한 가지에서 다르며, 어느 도구가 더 새로운지와는 아무 관련이 없습니다. NetworkManager는 세션을 통해 비밀을 잠금 해제하지만, systemd 인스턴스에는 잠금을 해제할 세션이 없습니다. 눈앞의 머신에 맞는 비밀 처리 방식을 가진 쪽을 고르십시오.
경로 설치부터 재연결 동작까지 나머지 모든 것은 그 첫 결정에서 따라옵니다.
아무도 말하지 않는 차이는 바로 키링입니다
NetworkManager가 VPN 프로필을 소유하면 비밀번호는 로그인 키링에 있을 수 있고, 이 키링은 사용자가 로그인할 때 잠금 해제됩니다. 노트북에서는 사람이 있고 키링이 열리며 터널이 올라오므로 잘 동작합니다. 감독 없이 부팅하는 서버에는 무언가를 잠금 해제할 사람이 없으므로, 프로필은 결코 오지 않을 비밀을 기다립니다. 연결은 구성된 것처럼 보이지만 결코 활성화되지 않습니다.
systemd 인스턴스는 디스크에서 자격 증명 파일을 읽어 그 문제를 피하며, 그 결과 보호해야 할 대상은 파일 자체가 됩니다. chmod 400 와 root 소유가 최소 조건이며, 파일은 통제할 수 없는 백업과 이미지 템플릿 밖에 두어야 합니다.
VPN을 연결에 붙이는 것은 부팅 보장이 아닙니다
nm-connection-editor 에서 VPN 대신 유선 또는 무선 연결을 선택하고, General 탭을 열어 자동으로 VPN에 연결하는 옵션을 표시하고 프로필 이름을 지정하십시오. 그러면 기본 연결이 연결된 상태에 도달할 때 NetworkManager가 VPN을 보조 연결로 활성화합니다. 이는 의존성일 뿐 방화벽 규칙이 아닙니다. 터널이 올라오기 전 몇 초 동안 패킷은 여전히 나갈 수 있고, 저장된 비밀의 잠금 해제가 실패하면 머신은 터널 없이 온라인에 남습니다.
터널 없이는 아무것도 나가지 않아야 한다는 것이 요구 사항이라면, 그렇게 말하고 킬 스위치를 만드십시오. 이 설정만으로는 그것을 제공하지 않으므로, 다시 올라올 때 보조 연결이 재평가되는 점을 염두에 두고 일시 중단과 재개도 시험하십시오.
systemd 인스턴스에는 일치하는 파일 이름이 필요합니다
프로필을 패키지가 기대하는 클라이언트 디렉터리(예: /etc/openvpn/client/office.conf)에 두고, 그 안에서 auth-user-pass office.cred 으로 자격 증명 파일을 참조하십시오. 인스턴스 이름은 확장자를 뺀 파일 이름이므로 openvpn-client@office 는 office.conf 파일을 읽습니다. sudo systemctl enable --now openvpn-client@office 로 활성화하고, 블로그의 예를 믿는 대신 systemctl cat openvpn-client@office 로 대응 관계를 확인하십시오.
프로필 내부의 경로는 프로필 자체가 아니라 유닛의 작업 디렉터리를 기준으로 해석되므로, 상대 경로 ca 또는 auth-user-pass 줄은 손으로 시험할 때는 동작해도 부팅 시 실패할 수 있습니다. 유닛이 찾아야 하는 모든 것에는 절대 경로를 쓰십시오. 그다음 실제 부팅 후 journalctl -u openvpn-client@office -b 를 읽으면, 터널 없이 active라고 보고하는 유닛이 보통 그 로그에서 빠진 파일을 지목합니다.
오래된 패키지는 다른 템플릿 이름을 제공하므로, systemctl list-unit-files 'openvpn*' 로 이 호스트에 어느 것이 있는지 확정할 수 있습니다.
재연결 동작은 별도의 결정입니다
ping-restart 가 있는 프로필은 터널이 끊긴 뒤 다시 만들며, 재시작 지시문이 있는 유닛은 서비스 수준에서 비슷한 일을 합니다. 그것은 당신이 고르는 정책이지 물려받는 기본값이 아닙니다. 연결이 요청 시에만 올라와야 한다면 재시작 동작을 의도적으로 제거하고 이유를 적어 두십시오. 유닛이 네트워크를 쓸 수 있기 전에 시작한다면, 부팅 시의 한 번 실패는 저절로 반복되지 않으므로 재시도 정책이 필요합니다.
중지도 똑같이 문자 그대로이며, sudo systemctl disable --now openvpn-client@office 는 실행 중인 인스턴스를 멈추고 부팅 링크를 제거합니다. 비활성화만 하면 터널은 다음 재부팅까지 계속 실행되므로, 비활성화해서 시험하고 인터페이스가 그대로 올라와 있는 것을 보고 놀라는 사람이 많습니다.
재부팅한 다음 네 가지를 순서대로 확인하십시오
서비스를 다시 시작하는 것은 서비스를 시험하고, 머신을 재부팅하는 것은 부팅 경로를 시험합니다. 재부팅 후 유닛이 올라왔는지, 다음으로 원격 서브넷에 대한 경로가 있는지, 다음으로 머신이 인터넷에 어떤 주소를 내보이는지, 마지막으로 이름이 터널을 통해 해석되는지 확인하십시오. 문제가 있으면 이 네 가지 확인이 바로 그 순서로 실패하므로 첫 실패가 유용합니다.
경로 없이 active인 유닛은 보통 프로필은 연결되었지만 서버가 경로를 밀어 넣지 않았거나, 경로가 나중에 사라진 인터페이스에 설치되었다는 뜻입니다. 이름 조회가 동작하지 않는 경로는 터널 자체가 아니라 DNS 구성을 가리킵니다.
터널이 올라오지 못할 때 어떻게 할지를 미리 정하십시오. 일반 연결로 되돌아가는 것은 정책이며, 먼저 시작한 관리자에게 맡기는 대신 문서로 남겨야 합니다.