같은 프로필, 두 세션: 데스크톱에서는 연결되지만 SSH에서는 아무것도 응답할 수 없는 프롬프트에서 멈춥니다. 고장 난 것도 없고 잃어버린 설정도 없습니다. NetworkManager가 시크릿 에이전트에게 자격 증명을 요청하고 있으며, 시크릿 에이전트는 지금 사용하는 세션에 없는 데스크톱 구성 요소입니다.

아래 순서를 실행하면 터널이 GUI 없이 올라오지만, 시크릿을 저장하면 그 프로필을 사용할 수 있는 사람이 달라진다는 점을 유의하세요.

무엇이든 수정하기 전에 진단을 확인하세요

대화형 활성화와 비대화형 활성화의 차이가 곧 진단의 전부입니다. nmcli --ask connection up은 성공하는데 일반 활성화가 멈춘다면 프로필은 올바르고 시크릿의 출처가 빠진 것입니다. 이 한 번의 비교로 동작하는 구성을 다시 쓰지 않아도 됩니다.

nmcli -f NAME,UUID,TYPE connection show
nmcli connection show "Office IPsec" | grep -i flags

플래그를 추측하지 말고 읽으세요. "에이전트에게 물어보라"는 값을 찾는 것이고, 정확한 키 이름은 VPN 플러그인마다 다릅니다. 키가 플러그인 자체의 데이터 사전에 있기 때문입니다. FortiSSL 프로필과 IPsec 프로필이 반드시 같은 이름을 쓰는 것은 아니므로 자신의 프로필 출력에서 작업하세요.

해당 프로토콜의 플러그인 패키지가 설치되어 있는지도 확인하세요. 플러그인이 없으면 알 수 없는 연결 유형이나 비밀번호에 대해 아무 말도 하지 않는 활성화 오류로 나타나며, 그 상태에서 시크릿을 쫓으면 같은 한 시간을 두 번 낭비합니다. 패키지 조회 한 번이 키 파일을 고치는 반나절보다 쌉니다.

시크릿을 키 파일로 옮기세요

연결 파일은 /etc/NetworkManager/system-connections/ 아래에 있습니다. 시크릿은 기본적으로 거기에 보관되지 않으며, 방금 읽은 플래그의 의미가 바로 그것입니다. 플래그를 제로로 바꾸면 NetworkManager에 값이 활성화 시 요청되는 대신 프로필과 함께 저장되어 있다고 알려 줍니다.

[vpn]
password-flags=0

[vpn-secrets]
password=YOUR-VPN-PASSWORD

시크릿이 두 개인 프로필에서는 패턴이 반복됩니다. [vpn] 섹션에 시크릿마다 플래그 하나, 값들은 [vpn-secrets]에 둡니다. IPsec 프로필은 보통 사용자 자격 증명과 함께 미리 공유된 키를 가지며, 플러그인이 그것을 일반 비밀번호 필드와 다르게 이름 붙이므로 키 이름은 다른 플러그인을 쓴 블로그 글이 아니라 vpn.data 출력에서 복사하세요. 키 이름 하나만 틀려도 로드된 뒤 인증에서 실패하는 프로필이 만들어지고, 이는 정확히 잘못된 비밀번호처럼 읽힙니다. 다시 연결하기 전에 같은 플러그인의 동작하는 프로필과 파일을 비교하세요.

공백, 따옴표, 달러 기호가 포함된 값은 따옴표로 감싸세요. $이 들어 있는 따옴표 없는 값은 어디서 파싱되는지에 따라 그대로 읽히거나 확장되며, 그 결과 인증 실패는 잘못된 비밀번호처럼 보입니다.

그다음 파일의 소유자와 모드를 고치세요. 이 키 파일은 권한 있는 서비스가 읽으며, 다른 사용자가 읽을 수 있는 파일은 신뢰할 수 없는 것으로 취급됩니다. 수정한 프로필이 무시되는 것처럼 보이는 흔한 이유입니다. 소유자 root, 모드 600, 예외는 없습니다.

다시 로드한 다음 활성화하세요

파일은 연결이 로드될 때 읽히므로 편집만으로는 충분하지 않습니다. 프로필을 다시 로드한 다음 연결을 명시적으로 올리세요.

sudo nmcli connection reload
sudo nmcli connection up "Office IPsec"

다시 로드해도 변경이 반영되지 않으면 서비스를 완전히 재시작하면 반영되며, 바로 그런 보고도 있습니다. 다른 링크가 중요할 때는 다시 로드를 선호하세요. 서비스를 재시작하면 관리 중인 모든 연결이 끊기고, 원격 호스트에서는 원하는 터널이 올라오기 전에 세션이 끝날 수 있습니다.

이름이 모호할 때는 UUID를 사용하세요. 고객 프로필이 여러 개인 머신에는 거의 중복되는 항목이 쌓이고, 잘못된 것을 활성화하면 자격 증명 문제처럼 보이는 실패가 생깁니다.

저장된 시크릿이 문제가 아닐 때

FortiSSL 프로필은 올바른 자격 증명을 저장했어도 실패할 수 있습니다. 클라이언트가 게이트웨이의 인증서를 결코 신뢰하지 않기 때문입니다. 그 설정은 기본 대화 상자에 없고, VPN의 고급 옵션 뒤에 있으며 거기서 신뢰하는 인증서 다이제스트를 입력합니다. 로그가 비밀번호 대신 인증서를 언급한다면 이 분기이며, [vpn-secrets]을 아무리 편집해도 도움이 되지 않습니다.

여기에 두 가지 확인이 더 있습니다. 프로필이 플러그인이 읽을 수 없는 경로를 아직 가리키는 파일에서 가져오지 않았는지 확인하고, 프로필이 오래된 중복이 아니라 활성 프로필인지 확인하세요. 둘 다 인증 오류처럼 읽히는 활성화 실패를 만듭니다.

저장이 허용되는지 결정하세요

저장된 PSK와 비밀번호는 그 머신에서 root로 실행되는 무엇이든 읽을 수 있습니다. 직접 관리하는 머신이라면 GUI 없는 서비스를 위한 합리적인 맞바꿈입니다. 공유 호스트라면 논의할 가치가 있습니다. 프로필에 이제 예전에는 데스크톱 키링이 보호하던 자격 증명이 들어 있기 때문입니다. 변경을 적용한 뒤가 아니라 결정하기 전에, 그 호스트에서 누가 root에 접근할 수 있는지 물어보세요.

정책이 VPN 시크릿 저장을 금지한다면 cron 작업을 돌리기 위해 프로필을 약화하지 마세요. 에이전트가 있는 세션에서 연결을 실행하거나 자동화에 다른 메커니즘을 사용하세요.

마지막으로 어떤 프로필이 시크릿을 담고 있는지 기록해 두어 아무도 모르게 노트북으로 복사하지 않게 하세요. 시크릿 섹션 위에 날짜와 이유를 적은 주석이면 충분하고, 나중에 누군가 겪을 곤란한 검토를 막아 줍니다.

관련 글