wg set으로 추가한 피어는 오후 내내 ping에 응답하고 재부팅 후에는 사라집니다. 아무것도 손상되지 않았습니다: 커널은 그 피어를 살아 있는 인터페이스 외에는 어디에도 저장하지 않았고, 부팅 시 인터페이스를 다시 만드는 무언가가 당신이 건드리지 않은 파일에서 그것을 다시 구성한 것입니다. 해결책은 wg set을 한 번 더 치는 것이 아닙니다. 어떤 구성 요소가 인터페이스를 소유하는지 밝혀내고, 그 구성 요소의 상태를 편집하고, 그런 다음 피어가 그것을 제거한 바로 그 수명 주기 이벤트를 견딘다는 것을 증명하는 것입니다.

일부러 한 번 재현하라

재시작 문제는 직접 지켜보기 전에는 고치지 마세요. 콘솔 또는 대역 외 접근이 가능하면 피어 목록을 적어 두고, 인터페이스를 소유한 서비스를 통해 재시작한 다음 비교하세요. 피어가 여전히 있다면 당신의 변경은 이미 영구 상태에 도달한 것이고, 당신은 잘못된 이벤트를 디버깅하고 있는 것입니다.

그렇게 하는 동안 세 가지 사실을 기록하세요: 인터페이스 이름, 그것을 시작한 유닛 또는 프로필, 그리고 살아남은 피어의 핸드셰이크 카운터가 초기화되었는지 여부입니다. 카운터가 초기화되었다면 인터페이스가 파괴되었다가 다시 만들어졌다는 뜻이고, 카운터는 그대로인데 피어가 없다면 무언가가 당신 발밑에서 설정을 편집했다는 뜻입니다.

인터페이스의 소유자는 누구인가?

WireGuard 자체에는 데몬도 설정 파일도 없습니다. 그 위의 무언가가 부팅 시 wg을 호출하며, 그 무언가가 진실의 원천입니다. 흔한 후보는 [email protected], NetworkManager 연결 프로필, 배포판별 네트워크 유닛, 또는 자체 데이터베이스를 쓰는 관리 패널입니다.

배포판 문서가 아니라 시스템에 물으세요. systemctl status wg-quick@wg0과 nmcli connection show이면 보통 각각 한 번의 명령으로 정리됩니다. 둘 다 인터페이스를 주장한다면 무언가를 편집하기 전에 이미 버그를 찾은 것입니다: 두 소유자가 매 시작마다 같은 장치를 다시 쓰고, 마지막에 실행된 쪽이 이깁니다.

systemctl status wg-quick@wg0 --no-pager
grep -R "Address\|SaveConfig\|PostUp" /etc/wireguard/wg0.conf
nmcli -g NAME,TYPE connection show
wg show wg0 peers

런타임 상태와 시작 상태는 같은 파일이 아니다

wg set은 netlink를 통해 살아 있는 장치를 조작합니다. /etc/wireguard/wg0.conf, NetworkManager 프로필 또는 패널의 데이터베이스를 쓰지는 않습니다. 그 후의 성공적인 wg show은 커널이 피어를 받아들였다는 것만 증명하고, 무언가가 그것을 복원한다는 것은 아닙니다.

반대 방향의 두 번째 함정도 있습니다. wg-quick의 SaveConfig 옵션은 인터페이스를 내릴 때 현재 인터페이스 상태를 설정 파일에 다시 씁니다. 이 옵션이 켜져 있으면 인터페이스가 올라와 있는 동안 파일에 한 편집이 이어지는 종료로 덮여버릴 수 있고, 당신은 그 줄이 분명히 있었다고 맹세하게 될 것입니다. 피어가 계속 되살아난다면 파일을 중지 후에 읽으세요, 중지 전이 아니라.

NetworkManager는 또 다르게 동작합니다: 프로필을 소유하고 활성화 시 적용하므로, 활성 NetworkManager 연결 옆에 손으로 편집한 .conf은 장식일 뿐입니다. 인터페이스의 소유자를 하나로 정하고 다른 관리자가 그것을 건드리지 않게 하세요.

편집이 두 곳 모두에 적용되게 하라

먼저 영구 상태를 편집하고, 그다음 소유자가 그것을 적용하게 하고, 마지막으로 살아 있는 상태를 확인하세요. 이 순서라면 어느 단계에서 실패해도 세 가지가 아니라 한 가지를 가리킵니다.

# 1. persistent state (wg-quick owner)
sudo vi /etc/wireguard/wg0.conf

# 2. apply through the owner, not by hand
sudo systemctl restart wg-quick@wg0

# 3. verify runtime matches the file
sudo wg show wg0
sudo wg showconf wg0

wg showconf은 살아 있는 설정을 파일이 쓰는 것과 같은 구문으로 출력하므로 둘을 직접 비교할 수 있습니다. 그 출력은 비밀로 취급하세요: 개인 키가 들어 있으니 티켓이나 채팅 채널에 붙여넣지 마세요. 피어의 공개 키와 허용된 IP를 비교하고, 일부러 제거한 피어가 돌아오지 않았는지 확인하세요.

수명 주기 이벤트를 견딘다는 것을 증명하라

소유자를 통해 다시 한 번 재시작한 다음, 세 가지를 따로 확인하세요: 피어가 wg show에 나타나고, 트래픽 후 핸드셰이크 카운터가 증가하며, 터널에 의존하는 애플리케이션이 실제로 응답합니다. 오래된 핸드셰이크로 목록에 뜬 피어는 라우팅이나 키 문제이지 지속성 문제가 아니며, 이 구분이 무의미한 설정 편집을 막아줍니다.

마지막으로 재시작이 무엇을 복원했는지 확인하세요. 일부러 제거한 피어를 되살리는 재시작은 부호만 반대인 같은 버그이며, 보통 설정의 오래된 사본이 어딘가에서 여전히 로드되고 있다는 뜻입니다. 소유자, 파일 경로, 피어의 공개 키, 검증 명령을 설정 옆에 기록해 두면 다음 사람이 프로덕션 호스트를 재시작해 같은 발견을 반복하지 않습니다.

관련 글