Windows L2TP가 일부 사이트만 열림: pfSense에서 DF 비트 지우기
인트라넷은 열리지만 일부 공개 사이트에서 멈추는 L2TP 클라이언트는 MTU 문제가 있습니다. DF 비트를 지우거나 MSS를 제한한 뒤 캡처로 확인하세요.
노트북이 연결되고 인트라넷이 열리지만 일부 공개 사이트가 멈춥니다. 인증과 라우팅은 분명히 동작하므로 남는 설명은 패킷 크기입니다. L2TP/IPsec 터널에서 쓸 수 있는 MTU는 어댑터가 여전히 알리는 값보다 작고, 클라이언트는 «분할 금지» 비트를 켠 채 전체 크기 패킷을 계속 보냅니다. pfSense 게이트웨이에 그 비트를 지우라고 명령할 수 있으며, 제대로 고치기 전에 진단을 확인하는 가장 빠른 방법입니다.
실패하는 페이지부터 시작하세요
어떤 설정도 건드리기 전에 어느 목적지가 실패하고 어느 곳이 성공하는지 적어 두세요. 터널 한계 아래에 머무는 핸드셰이크는 정상적으로 끝나지만, 전체 크기 세그먼트가 필요한 전송은 중간에 멈춥니다. 차단된 목적지는 페이지 중간이 아니라 연결을 맺을 때 실패하기 때문에 이 구분은 필터가 아니라 크기 문제의 특징입니다. 두 관찰 모두 비용이 들지 않고 검색 범위를 즉시 좁혀 줍니다.
비트를 설정하고 페이로드 크기를 조절하는 ping으로 시험하세요. 살아남는 가장 큰 페이로드가 실제 경로 MTU를 알려 주고, 어댑터의 알림 값은 둘이 얼마나 떨어져 있는지 보여 줍니다.
두 숫자를 모두 적어 두세요. 수정은 어느 쪽이 틀렸는지에 달려 있고, 나중에 캡처가 확인하는 것도 그 짝입니다.
나갈 때 DF 비트가 하는 일
숫자가 다른 이유는 캡슐화입니다. IPsec은 ESP를 더하고 L2TP는 헤더를 하나 더하므로 터널은 물리 링크보다 적은 페이로드를 나릅니다. Windows는 어댑터에서 여전히 1500바이트를 보고하고 보내는 것에 «분할 금지»를 설정합니다. 그런 패킷이 들어가지 않을 때 게이트웨이의 올바른 응답은 보낸 쪽에 줄이라고 요청하는 ICMP 메시지입니다. 그래서 작은 ping이 통과하는 터널도 파일 다운로드는 실패할 수 있습니다.
그 메시지는 자주 끝내 도착하지 않습니다. 어느 홉이 ICMP를 거르거나 아무것도 그것을 만들지 않으면, 보낸 쪽은 전송이 포기할 때까지 같은 크기를 반복합니다.
여기서 침묵은 정상적인 모습이라 증상이 선택적 차단으로 읽힙니다. 클라이언트 로그에는 빠진 ICMP 메시지가 기록되지 않습니다.
pfSense 옵션과 그것이 하지 않는 일
이 옵션은 시스템, 고급, 방화벽 및 NAT 페이지에 «패킷을 버리는 대신 잘못된 DF 비트 지우기»라는 이름으로 있습니다. 플래그가 붙은 너무 큰 패킷을 버리는 대신 필터가 플래그를 없애고 패킷이 하류에서 나뉘도록 둡니다. 패킷이 나가는 인터페이스를 한 조각으로 지나갈 수 없을 때 잘못된 것으로 칩니다.
이 옵션은 클라이언트를 건드리지 않고 연결을 되살리므로 인기가 있습니다. 우회책이기도 한데, 분할은 CPU를 쓰고 잃어버린 조각마다 비용을 높입니다.
전달되는 트래픽에만 적용되고 방화벽 자체가 만드는 트래픽에는 적용되지 않습니다. 같은 페이지에는 «방화벽 스크럽 비활성화»가 있는데, 이는 정규화를 완전히 끄므로 이 문제에 필요한 범위를 훨씬 넘는 변경입니다.
TCP를 분할하지 않고 유지하는 더 좁은 수정
멈춘 흐름은 거의 모두 TCP이고, TCP는 분할에 의존하는 대신 더 작은 세그먼트를 협상할 수 있습니다. 터널 인터페이스에서 MSS를 제한하면 핸드셰이크 중에 알림 값이 다시 쓰여 양쪽이 실제로 들어가는 만큼 보냅니다. 그러면 경로가 예측 가능하게 동작하고 어떤 패킷도 나눌 필요가 없습니다.
그래서 UDP는 탐색이나 DF 옵션에 맡겨집니다. 실패하는 사이트가 평범한 웹 페이지라면 제한이 더 선호할 변경입니다.
클라이언트는 netsh interface ipv4 show subinterfaces 명령으로 자신의 어댑터 MTU를 보고할 수 있습니다. 둘이 항상 같지는 않으므로 그 숫자를 서버가 협상했다고 보는 값과 비교하세요. 협상이 무엇을 보고했든 운영 체제가 실제로 쓰는 값은 그 값입니다.
캡처로 확인한 뒤 상태를 초기화하세요
결정하기 전에, 터널이 지나는 쪽과 WAN 인터페이스가 지나는 쪽 양쪽에서 캡처하세요. 전체 크기로 나가고 ICMP가 돌아오지 않는 패킷은 제한이 올바른 계층임을 가리킵니다. 도착한 뒤 돌아오는 길에 죽는 응답은 대신 터널 MTU를 가리킵니다.
기존 흐름은 옛 세그먼트 크기를 유지하므로 다시 시도하기 전에 상태 표를 비우세요. 그다음 실패한 페이지를 열고 한쪽 방향 카운터가 아니라 양방향 트래픽의 상태 보기를 읽으세요. 그래도 멈추면 다른 확인란을 시도하는 대신 다시 캡처하세요.