WireGuard 키 쌍을 로컬에서 생성하기: 명령과 주의점
두 개의 명령으로 키 쌍이 만들어지며, 실제 작업은 umask와 파일 위치, 그리고 피어에는 공개 키 절반만 전달된다는 이해에 있다. 로컬 안내.
WireGuard 키 쌍은 두 개의 명령으로 생성되며 둘 다 표준 도구에 포함되어 있으므로, 대신 키를 만들어 주는 웹사이트는 필요 없다. 문제가 되는 것은 곡선 연산이 아니라 권한 비트, 파일이 놓이는 위치, 그리고 그 뒤 상대편으로 보내는 내용이다. 아래 순서는 빈 디렉터리에서 시작해 트래픽을 나르는 피어에서 끝난다. 실행 전에 한 번 읽어 두어야 하는데, 첫 줄은 다음 줄이 같은 셸에서 실행될 때만 의미가 있기 때문이다.
하나의 셸에서 키 쌍 생성하기
문서화된 작업 흐름은 비밀 값이 존재하기 전에 파일 생성을 제한하고, 그다음 그 값에서 공개 값을 유도한다. 세 줄은 하나의 셸 세션에 함께 있어야 한다:
umask 077 # applies to files created next, so keep the next line in this shell
wg genkey | tee privatekey | wg pubkey > publickey
wg pubkey < privatekey # re-derive and compare with publickey
wg genkey 는 32바이트 Curve25519 비밀 키를 base64로 기록하고, wg pubkey 는 그것을 읽어 대응하는 공개 키를 유도하며, tee 는 비밀 값을 파이프로 넘기면서 저장한다. 이 순서 때문에 권한 줄이 먼저 오고, 파이프라인을 두 번째 터미널에 붙여 넣으면 그 줄이 조용히 사라진다. 파일 이름은 예시일 뿐이며 중요한 것은 두 파일이 소유 기기가 통제하는 위치에 놓이는 것이다. 비밀 파일이 이미 기본 권한으로 존재한다면 chmod 600 privatekey 는 현재 파일을 고치지만 이전에 만든 사본에는 아무것도 하지 않는다.
비밀 절반을 한 기기에 두기
비밀 값은 그 아이덴티티를 소유할 머신의, 그 머신이 보호하고 백업이 자격 증명으로 취급하는 디렉터리에 속한다. 공유 폴더나 자신에게 보내는 메시지, 지원 티켓에 첨부한 조각에 둘 것이 아니며, 포함된 사본은 설정 파일을 키만큼 민감하게 만든다. 세 곳을 거친 키는 나중에 따져 볼 수 없고, 한 곳에 두는 실무적 이유가 바로 그것이다.
퇴역한 파일을 의도적으로 파기하는 것도 같은 습관의 일부다. 누군가 알아차릴 때까지 다운로드 폴더에 남겨 두는 것은 아니다.
피어 운영자가 당신에게서 필요한 것
상대편에 필요한 것은 공개 값과 그 운영자가 고른 주소 구성뿐이다. 그 공개 문자열을 운영자가 기대하는 경로로 보내고, 누군가 시험하기 전에 어느 피어 항목에 붙였는지 확인해야 한다. 올바른 키라도 절을 틀리면 키 문제처럼 보이는 방식으로 실패하므로, 줄바꿈 없이 한 줄로 보내야 하며 두 줄로 끊긴 키는 설정 파일에 아무 불평 없이 붙은 뒤 절대 일치하지 않는다.
키를 생성하는 것만으로는 아무것도 허가되지 않는다. 피어가 그것을 받아들이도록 설정해야 하며, 그 설정 단계는 그쪽 끝을 운영하는 사람의 몫이다.
실제 교환으로 키 쌍 확인하기
키 쌍은 터널의 한쪽 끝을 식별할 뿐이며, 경로도, 리졸버 항목도, 포워딩 규칙도, 방화벽 허용도 만들지 않는다. 피어가 준비된 뒤에는 파일이 아니라 교환을 시험한다. wg show 에 나타나는 핸드셰이크, 터널 안에서 응답하는 주소, 경로에 의존하는 애플리케이션 요청, 이 세 가지로 잘못된 키와, 키는 맞지만 경로가 빠진 상태를 가른다.
배포가 허락한다면 기기마다 하나의 아이덴티티를 유지해, 잃어버린 기기만 따로 폐기할 수 있게 한다. 모두에게 키를 다시 만들게 하지 않아도 되며, 그 판단이 아래 교체 절차를 안전하게 실행할 수 있게 하는 이유이기도 하다.
틈 없이 키 교체하기
기기에서 대체 키를 생성하고, 새 공개 키를 추가 피어로 넣고, 트래픽을 나르는지 확인한 다음에야 옛 키를 제거한다. 이 순서로 하면 터널에 유효한 아이덴티티가 없는 순간이 생기지 않고, 되돌리는 일은 방금 추가한 항목을 지우는 것뿐이다.
새 피어가 확인될 때까지 교체 전 비밀 파일을 남겨 두고, 그다음 의도적으로 파기한다. WireGuard 빠른 시작 은 명령 자체의 참고 자료이며, 시작하기 전에 전체를 읽을 수 있을 만큼 짧다.