WireGuard 설정을 Interface에서 Peer까지 한 줄씩 읽기
Interface의 키는 이 끝점의 것이고 peer의 키는 반대편의 것입니다. 각 줄을 하나의 방향으로 읽고, 그다음 wg-quick이 프로토콜 주위에 무엇을 더했는지 확인하세요.
망가진 WireGuard 설정은 대개 값이 틀린 것이 아니라 올바른 값을 반대편에 둡니다. 개인 키는 이 기계의 것이고, peer는 다른 기계의 공개 키를 지니며, 주소는 터널이 어디에 사는지를 설명하면서도 interface 블록에 들어갑니다. 파일을 두 방향이 만나는 것으로 읽고, 그다음 보조 스크립트가 위에 무엇을 더했는지 확인하세요. 프로토콜 자체의 필드는 파일보다 적고, 여분의 필드는 따로 아는 값이 있습니다.
interface 키는 이 기계를 설명합니다
interface 블록은 이 끝점 자체의 정체성을 담습니다. PrivateKey 은 그 정체성이며 호스트를 떠나지 않고, 대응하는 공개 키가 여기서 파생되며 다른 peer가 나열하는 것이 바로 그것입니다. ListenPort 은 이쪽이 핸드셰이크를 받는 곳이므로 한 주소 뒤의 두 클라이언트는 서로 다른 포트가 필요합니다.
Address 은 이 호스트가 응답하는 터널 주소이며, 사용할 원본이기도 하므로 접두사 길이와 함께 적힙니다. 여기서 접두사를 틀리면 호스트가 어떤 목적지를 직접 연결로 보는지가 바뀌고, 그러면 설정이 아니라 라우팅처럼 보이는 장애가 생깁니다.
실제 클라이언트를 쓰는 [Interface] 블록에서 나머지는 보통 wg-quick 가 더합니다: DNS, MTU, Table, 그리고 훅 줄입니다. 이들은 프로토콜 필드가 아니며, 맨 wg 설정은 이들을 완전히 무시합니다.
각 peer 항목은 다른 한쪽을 설명합니다
[Peer] 블록은 먼 쪽입니다. PublicKey 은 그쪽의 파생 키이며 절대 그들의 개인 키가 아니고, PresharedKey 은 양쪽이 동일하게 보관해야 하는 선택적 추가 비밀입니다. Endpoint 은 어디로 보낼지이고, PersistentKeepalive 은 다른 것이 나가지 않을 때 간격 후에 이 호스트가 패킷을 보내도록 요청합니다.
여기서의 혼란 대부분은 두 가지 실수로 설명됩니다. 자신의 개인 키를 peer 블록에 복사하면 두 끝이 하나의 정체성을 공유하게 되고 핸드셰이크는 기록이 잘 남지 않는 방식으로 실패합니다. Endpoint 을 클라이언트에서 빼는 것은 서버가 들어오는 핸드셰이크에서 주소를 배우므로 보통 의도적이지만, 시작해야 하는 서버에서 빼는 것은 그렇지 않습니다. keepalive는 NAT 매핑을 열어 둘 뿐 처리량을 높이지도 지연을 줄이지도 않으므로, 트래픽이 이미 흐르는 상황에서 삼십 초의 추가 패킷은 아무것도 사지 못합니다.
AllowedIPs는 라우팅이며 허가 목록이 아닙니다
AllowedIPs 은 WireGuard의 암호 키 라우팅입니다. 바깥으로는 목적지에 따라 어느 peer가 패킷을 받는지 정합니다. 안으로는 그 peer에서 오는 패킷을 원본에 따라 받아들일지 정합니다. 같은 필드가 두 일을 하므로 이것은 접근 제어 목록도 아니고 허용된 웹사이트 목록도 아닙니다.
좁은 AllowedIPs 을 서버에서 클라이언트에 주면 서버는 그 원본을 주장하는 패킷만 받아들이고 그 목적지만 그 클라이언트로 보냅니다. 한쪽만 넓히면 올라오지만 아무것도 통과시키지 않는 터널이 됩니다.
wg-quick이 프로토콜 주위에 더하는 것
wg-quick 은 같은 파일을 읽고 프로토콜이 운영 체제에 맡긴 네트워크 단계를 수행합니다. interface 주소를 할당하고, AllowedIPs 에서 파생된 경로를 더하고, 리졸버 설정을 쓰고, 훅 명령을 순서대로 실행합니다.
그 계층이 고전적인 비대칭을 설명합니다. 0.0.0.0/0 과 DNS 줄이 있는 파일은 클라이언트에 기본 경로와 리졸버를 주지만 서버의 전달이나 NAT 규칙에는 전혀 손대지 않습니다. 그것들은 서버 자체의 설정에 속하며 어떤 클라이언트 파일도 제공할 수 없습니다.
파일의 소유자는 하나로 유지하세요. SaveConfig 이 켜져 있는 동안 손으로 편집하면 다음에 interface가 내려갈 때 편집 내용이 사라집니다, 그리고 interface는 그런 일이 있었다고 알려주지 않습니다.
파일이 아니라 적용된 상태를 확인하세요
파일은 의도입니다. 적용된 상태는 커널이 지니는 것이며, 활성화 후에 보조 도구나 drop-in, 훅이 무언가를 편집할 때마다 둘은 어긋납니다.
살아 있는 상태와 주소 지정을 함께 읽고, 그다음 둘 다 자신이 쓴 것과 비교하세요:
sudo wg show
ip -4 addr show dev wg0
ip -4 route show dev wg0
grep -v "^#" /etc/wireguard/wg0.confpeer 목록이 비어 있다면 interface는 설정이 적용되지 않은 채 만들어졌습니다. 주소와 경로가 있는데 카운터가 영에 머문다면 파일은 로드되었고 핸드셰이크가 실패하는 것이며, 이는 섹션 순서가 아니라 키나 끝점의 문제입니다. 그 차이가 대개 실제 결함이므로 편집 전에 두 보기를 비교하세요.