그 경고는 피어 옵션 사이의 비교를 알릴 뿐, 둘 사이 경로를 측정한 것이 아니다. 사람들은 이를 ‘MTU가 틀렸다’고 읽고 줄이 사라질 때까지 숫자를 바꾼다. 그것은 설정 비교를 네트워크 측정으로 취급하는 것이며, 로그를 조용하게 만드는 동안 터널을 더 나쁘게 만들곤 한다. 쓸모 있는 첫 단계는 두 문제 중 실제로 어느 쪽이 있는지 판단하는 것이다.

세 가지 조건이 답을 결정한다: 피어가 무엇을 비교하는지, 값이 오래된 것인지, 경고 외에 어떤 증상이 있는지.

경고는 패킷이 아니라 옵션을 비교한다

OpenVPN 피어는 핸드셰이크 중에 옵션 문자열을 교환하고 옵션 일관성 검사의 일부로 이를 비교한다. 한쪽이 다른 쪽과 다르게 link-mtu 또는 tun-mtu를 보고하면 불일치가 두 값과 함께 기록된다. 그 교환은 무슨 일이 일어나는지 보려고 큰 패킷을 보낸 적이 없으므로, 경고는 용량이 아니라 설정을 설명한다. 터널은 전체 크기 트래픽을 실어 나르면서도 이 경고를 출력할 수 있고, 큰 패킷에서 실패하고 아무것도 출력하지 않을 수도 있다.

경고 전체를 로컬 값과 원격 값과 함께 보관한다. 증거는 그 쌍이며, 기억하는 단일 숫자가 아니다.

link-mtu가 사용 중단된 이유

OpenVPN 2.6은 가변 헤더와 협상된 암호 때문에 고정 링크 값이 신뢰할 수 없어 link-mtu를 사용 중단으로 지정한다. 이 옵션은 프로토콜이 더 이상 보장하지 않는 패킷 배치를 가정했으므로, link-mtu를 그대로 담은 오래된 프로필은 현재 코드가 지킬 수 없는 의도를 서술한다. 그 숫자를 새 프로필로 복사하면 오래된 가정이 퍼진다. 권장 사항이 아니라 오래된 프로필의 이력 일부로 읽어야 한다.

일관성 검사에는 tun-mtu와 연결된 선택적 OCC 값도 있는데, 이는 네트워크가 나르는 것을 바꾸지 않고 비교 대상을 바꾼다. 이를 설정해도 더 큰 패킷이 들어가지는 않는다.

경로를 시험하기 전에 프로필을 고친다

의도하지 않은 불일치는 프로필을 소유한 쪽을 통해 고치고, 서버 측 변경이 모든 클라이언트에 영향을 준다는 점을 기억한다. 인스턴스가 실제로 불러오는 프로필을 편집하고, 다운로드 폴더에 있는 내보내기를 건드리지 않는다. 그다음 테스트 클라이언트 하나를 다시 연결하고 어떤 경고가 남는지 기록한다. 메시지가 사라지는 대신 모양을 바꾸면, 생각하는 것과 다른 옵션을 비교하고 있는 것이다.

공유 서버는 한 사이트에 맞는 값이 다른 사이트를 망가뜨릴 수 있기 때문에 전역 값을 옮기기 전에 클라이언트 목록을 점검해야 한다.

그다음 실제로 있는 증상을 시험한다

큰 전송이 멈추는데 작은 요청이 성공한다면, 통제된 목적지에 대해 패킷 크기를 측정한다. 단편화 금지 비트를 세우고 페이로드 크기를 키우는 프로브는 단순히 성공하는 ping보다 경로의 사용 가능한 MTU를 훨씬 더 신뢰성 있게 찾는다. 시험에 실패하는 애플리케이션도 포함해야 하는데, ICMP 시간 초과는 필터링을 반영할 수 있고 작은 ping의 성공은 전체 크기 애플리케이션 패킷에 대해 아무것도 말해 주지 않는다.

mssfix는 터널 안의 TCP 세션에 대해 알리는 MSS를 제한하는데, 이는 TCP에는 도움이 되고 내부 UDP 워크로드에는 아무것도 하지 않는다. 단편화와 오프로드 설정에는 자체 호환 조건이 있다. 로그 한 줄을 조용히 만들려고 여러 개를 한꺼번에 바꾸는 대신 입증된 문제에 맞는 메커니즘 하나를 고른다.

유효 값을 결과와 함께 보관한다

실제 전송 결과 옆에 원래 값과 수정된 유효 값을 기록한다. 이 쌍이 오래된 프로필 옵션과 독립적으로 존재하는 경로 MTU 문제를 구분한다. 이것이 없으면 다음 독자는 사라진 경고를 보고 네트워크가 바뀌었다고 가정한다.

일관성 검사를 억제해도 해결되는 것은 없다. 관측을 없애고 두 설정을 그대로 둘 뿐이다.

관련 글