터널에 연결하고 ip route를 실행해도 원래 기본 게이트웨이는 여전히 그 자리에 있습니다. 다음 생각은 클라이언트가 경로를 인수하지 못했다는 것이므로 기본 경로를 직접 삭제하면 연결을 완전히 잃습니다. 그 항목은 남아 있어야 합니다. redirect-gateway def1을 사용하면 OpenVPN은 일반 기본 경로를 대체하는 대신 그것보다 우선하는 두 개의 더 구체적인 경로를 설치합니다. 오래된 게이트웨이는 남아 있고 테스트하던 트래픽을 더 이상 전달하지 않습니다.

def1이 실제로 하는 일

이 플래그는 0.0.0.0/1과 128.0.0.0/1을 추가하며 둘 다 터널을 가리킵니다. 0.0.0.0/1은 첫 옥텟이 0에서 127까지인 모든 주소를 포함하고 128.0.0.0/1은 128에서 255까지를 포함하므로 모든 IPv4 목적지에는 이전 기본 경로보다 더 구체적인 일치가 있습니다. 어느 경로가 이길지는 메트릭이 아니라 접두사 길이가 결정합니다.

원래 기본 경로를 그 자리에 두는 것은 의도된 일입니다. 클라이언트는 무엇을 대체했는지 기억할 필요가 없고 VPN 서버로 가는 자체 연결을 전달하는 경로를 다시 쓰지도 않습니다. 연결을 끊을 때 두 개의 절반 경로를 제거하고 테이블은 원래대로 돌아갑니다.

왜 /0이 아니라 /1인가

라우팅은 가장 낮은 메트릭이 아니라 가장 긴 일치 접두사를 선택하므로 기본 경로의 메트릭이 무엇을 말하든 /1이 /0을 이깁니다. 하나의 /1은 공간의 절반만 덮기 때문에 두 절반이 모두 필요하며, 0.0.0.0/1만 있으면 128.0.0.0 이상의 모든 것이 여전히 오래된 기본 경로를 따르고, 일부 사이트는 되고 다른 사이트는 안 되는 혼란스러운 증상이 생깁니다.

오래된 기본 경로의 메트릭을 높이거나 낮춰도 아무것도 바뀌지 않으며, 다른 인터페이스의 더 낮은 메트릭 기본 경로도 트래픽을 훔치지 않습니다. 먼저 접두사 길이가 결정하고, 같은 접두사일 때만 메트릭으로 돌아갑니다.

실제 라우팅 테이블 읽기

연결된 호스트는 세 항목을 한 번에 보여 줄 수 있으며, 터널이 절반을 전달하고 원래 게이트웨이는 여전히 목록에 있습니다. 주소는 복사할 구성이 아니라 예시이며, 인터페이스 이름, 터널 토폴로지, 추가 경로는 플랫폼과 클라이언트에 따라 다릅니다.

default via 192.168.50.1 dev wlan0
0.0.0.0/1 via 10.8.0.1 dev tun0
128.0.0.0/1 via 10.8.0.1 dev tun0

중요한 것은 관계, 즉 하나의 일반적인 기본 경로 위에 두 개의 구체적인 절반이 있다는 점입니다. 오래된 게이트웨이 줄은 아무것도 대체하지 않았기 때문에 남아 있습니다.

패킷이 실제로 타는 경로 확인하기

더 구체적인 경로가 이기기도 하는데, 사설 범위, 로컬 서브넷에 대한 경로나 VPN 서버 자체의 주소가 /1보다 길기 때문입니다. 터널은 서버로 가는 외부 경로가 필요하며, 그 연결을 다시 터널로 보내면 즉시 끊어집니다. Linux에서는 테이블을 눈으로 읽는 대신, 관심 있는 목적지를 지정한 ip route get으로 커널에 물으면 선택된 경로, 인터페이스, 소스가 출력됩니다. 정책 기반 라우팅이 구성되어 있으면, 규칙이 기본 테이블을 보기 전에 다른 테이블을 선택할 수 있으므로 규칙도 확인하십시오.

IPv4의 일부만 잘못 동작한다면 두 절반이 모두 설치되었는지 확인한 다음 실패하는 목적지와 일치하는 예외를 찾으십시오. 오래된 기본 경로를 삭제하는 것은 해결책이 아니며, 클라이언트가 터널을 깨끗하게 해체하는 데 필요한 경로를 없앱니다.

def1이 다루지 않는 것

두 개의 IPv4 항목은 IPv6에 대해 아무것도 말하지 않지만, IPv6 연결이 있는 호스트는 누군가 그 체계를 별도로 리디렉션할 때까지 자체 기본 경로를 계속 사용하므로 이중 스택 네트워크에서 일부 트래픽이 터널을 우회하는 것처럼 보입니다. 다른 클라이언트와 네트워크 관리자는 전체 터널 라우팅을 다르게 구현하며 그들의 테이블은 일치하지 않을 것입니다. 여기서 설명한 def1 동작은 OpenVPN의 문서화된 플래그에 속하며 머신의 모든 VPN에 해당하지는 않습니다.

킬 스위치는 터널이 끊어졌을 때 머신이 무엇을 하는가라는 다른 질문에 답합니다. 경로 우선순위는 터널이 올라와 있는 동안 트래픽이 어디로 가는지 결정하지만, 그 후 방화벽이 무엇을 하는지는 결정하지 않습니다. 작업 순서: 테이블을 읽고, 두 절반이 있는지 확인하고, 실패하는 목적지에 대해 ip route get을 실행하고, 정책 규칙을 확인한 다음 IPv6를 별도로 보십시오. 오래된 기본 경로는 그대로 두십시오.

관련 글