Linux에서 VPN을 시작할 때 실제로 벌어지는 일
Linux에서 VPN을 시작하면 인터페이스가 생기고 경로가 설치되며 리졸버가 바뀝니다. 각 단계를 어느 서비스가 소유하는지 알면 대부분의 설정 실패를 설명할 수 있습니다.
연결을 누르면 Linux 머신에서 인터페이스가 나타나고, 경로가 설치되며, 리졸버가 다르게 응답하기 시작하는 세 가지 변화가 일어납니다. 대부분의 설정 실패는 이 셋 중 하나가 나머지 없이 일어나거나, 두 프로그램이 그것들을 누가 소유하는지에 대해 합의하지 못해서 생깁니다. 순서를 이해하면 클라이언트의 로그 출력을 읽는 것보다 빨리 실패를 설명할 수 있습니다.
무언가 작동하기 전에 인터페이스가 나타난다
터널 클라이언트는 가상 인터페이스를 열고 패킷을 넘깁니다. TUN 장치는 IP 패킷을 전달하며 라우팅 VPN에 필요한 것이 바로 이것이고, TAP 장치는 이더넷 프레임을 전달하며 브리지 설계에 필요한 것이 바로 이것입니다. 커널 모듈이 장치를 제공하고, 세션이 지속되는 동안 클라이언트가 그것을 소유합니다.
인터페이스가 올라오는 것과 터널이 작동하는 것은 다릅니다. 피어에 도달할 수 없어도 주소를 가진 채로 존재할 수 있고, 그래서 인터페이스 목록이 마지막이 아니라 첫 번째 확인입니다. 스스로 올라왔다고 보고하는 장치는 가상 링크에 대한 커널의 관점을 설명할 뿐, 피어가 응답할 의사가 있는지는 말하지 않습니다.
제공된 인터페이스 모드는 그대로 두십시오. TUN 프로필을 TAP으로 바꾼다고 라우팅 서버가 브리지 서버가 되지는 않으며, 보통은 연결이 성립되기만 하고 아무것도 전달하지 않습니다.
경로는 터널을 소유한 쪽이 설치한다
경로는 두 번째 변화이며, 그 소유권이 내용보다 중요합니다. NetworkManager 프로필, systemd 유닛, 손으로 실행한 클라이언트가 모두 경로를 설치할 수 있고, 그중 둘이 동시에 그러면 나중에 아무도 설명할 수 없는 테이블이 생깁니다.
ip -br addr show ip route show ip -6 route show
전체 터널 프로필은 기본 경로를 대체하고, 분할 터널 프로필은 더 구체적인 경로를 추가하며 기본 경로는 그대로 둡니다. 둘 다 정상이며, 후자가 원격으로 관리하는 머신에서 기본 경로를 지우는 것이 나쁜 첫 테스트인 이유입니다. 그것을 제거하는 것은 문제를 고치는 데 쓰는 세션을 잃는 가장 빠른 방법이기도 합니다.
가정하지 말고 테이블을 읽으십시오. 더 구체적인 경로나 정책 규칙이 트래픽을 터널로 보내는 동안 기본 경로는 여전히 물리 인터페이스를 가리킬 수 있고, 이는 테이블 전체를 읽기 전까지 모순처럼 보입니다. 그 조합은 분할 터널에서 정상이며 한 줄이 설계를 설명하리라 기대하는 사람에게는 혼란스럽습니다. 다이어그램에 맞는 경로가 아니라 실제 목적지에 맞는 경로를 찾으십시오.
리졸버가 주인을 바꾼다
DNS는 세 번째 변화이며 보지 않은 곳에서 관리될 가능성이 가장 큽니다. 데스크톱에서는 NetworkManager가 연결마다 리졸버 설정을 밀어 넣을 수 있습니다. systemd-resolved를 쓰는 시스템에서는 설정이 링크마다 적용되며 /etc/resolv.conf은 편집해야 할 파일이 아니라 스텁이나 심볼릭 링크일 수 있습니다.
resolvectl status readlink -f /etc/resolv.conf cat /etc/resolv.conf
리졸버 파일에 대한 수동 편집이 다시 연결한 뒤 사라진다면, 그것은 그 파일을 유지하는 구성 요소를 찾아 대신 프로필을 바꾸라는 신호입니다. 생성된 파일을 편집하는 것은 다시 연결이 지워 버릴 변경입니다.
사설 이름에는 보통 내부 리졸버와 운영자가 제공한 검색 도메인이 필요합니다. 공용 리졸버로 바꾸면 VPN이 존재하는 바로 그 리소스가 깨질 수 있고, 증상은 DNS 실패가 아니라 라우팅 실패처럼 보입니다. 하나는 되고 다른 하나가 실패하면 어디를 봐야 할지 정확히 알려 주기 때문에 이름과 주소를 따로 시험하십시오. 그 한 번의 비교가 한 시간의 경로 디버깅을 아껴 줍니다.
연결마다 관리자 하나
프로필 형식이 어느 프로그램이 그것을 쓸 수 있는지 결정합니다. OpenVPN 프로필에는 OpenVPN이나 호환 플러그인이 필요하고, WireGuard 구성은 피어 키와 허용된 접두사를 가진 자체 형식을 가집니다. 파일 확장자가 무엇을 암시하든 가져오기 대화상자는 하나를 다른 것으로 번역하지 않습니다.
관리자 하나를 골라 그 연결을 소유하게 하십시오. 같은 터널을 두 도구로 올리면 경로 테이블과 재연결 동작이 모호해지고, 보통 나중에 시작한 쪽이 재현하기 어려운 방식으로 이깁니다.
배포판이 지원하는 패키지를 설치하고 운영자에게서 프로필을 받으십시오. 보통 개인 키나 그에 상당하는 자료가 들어 있으므로 자격 증명으로 취급하고 다른 비밀과 같은 곳에 보관하십시오. 다운로드 폴더에 남겨 둔 프로필은 책상 위에 남겨 둔 열쇠입니다.
올라왔지만 작동하지 않을 때 무엇을 확인할까
인터페이스가 올라오고 클라이언트가 성공을 보고하는 상태에서는, 경로 테이블이 목적지에 대해 터널을 선택하는지, 리졸버가 사설 이름에 응답하는지, 반대편에 돌아오는 경로가 있는지 바깥으로 나아가 확인하십시오. 각각 별도의 명령과 별도의 주인이 있습니다.
nmcli connection show --active nmcli device status wg show
nmcli 참조는 전체 세트가 필요할 때 상태와 연결 명령을 문서화합니다. 여기서 중요한 것은 프로필이 활성인 것과 장치가 트래픽을 나르는 것의 구별이며, 둘은 서로 어긋날 수 있습니다.
설정이 끝났다고 말하기 전에 같은 관리자로 한 번 다시 연결하고, 연결을 끊은 뒤에도 DNS가 여전히 작동하는지 확인하십시오. 첫 네트워크 변경까지만 작동하는 구성은 끝난 것이 아니라 그저 지금 작동하는 것뿐입니다.