Linux MTU(MTU Mismatch) 문제의 원인과 해결 방법

Linux 서버를 운영하다 보면 웹 페이지가 일부만 열리거나 VPN 연결이 불안정하고, SSH는 되지만 파일 전송이 실패하거나 특정 사이트만 접속되지 않는 현상을 경험할 수 있습니다. 이러한 문제의 대표적인 원인 중 하나가 MTU(MTU Mismatch) 입니다.

MTU(Maximum Transmission Unit)는 한 번에 전송할 수 있는 최대 패킷 크기를 의미합니다. 서버와 네트워크 장비의 MTU 값이 서로 다르면 패킷 단편화(Fragmentation)가 발생하거나, 일부 네트워크에서는 패킷이 폐기되어(Packet Drop) 연결 장애가 발생할 수 있습니다.

이번 글에서는 Linux에서 MTU 문제의 원인과 확인 방법, 해결 방법을 실무 중심으로 알아보겠습니다.

MTU란?

MTU는 네트워크 인터페이스가 한 번에 전송할 수 있는 최대 패킷 크기입니다.

일반적인 Ethernet 환경에서는 다음과 같습니다.

Ethernet MTU

↓

1500 Bytes

VPN이나 PPPoE 환경에서는 다음과 같이 더 작은 MTU를 사용하는 경우가 많습니다.

Ethernet : 1500

VPN : 1400

PPPoE : 1492

MTU가 맞지 않으면 패킷이 단편화되거나 손실될 수 있습니다.

MTU 문제가 발생하는 주요 원인

대표적인 원인은 다음과 같습니다.

  • VPN 사용
  • PPPoE 환경
  • Jumbo Frame 설정 오류
  • Docker Overlay Network
  • Kubernetes CNI
  • Cloud Load Balancer
  • IPSec Tunnel
  • GRE Tunnel
  • VXLAN
  • MTU 자동 설정 실패

실무에서는 VPN과 Docker Overlay Network에서 자주 발생합니다.

1. 현재 MTU 확인하기

현재 인터페이스의 MTU를 확인합니다.

ip link show

예시

2: eth0

mtu 1500

또는

ifconfig

에서도 확인할 수 있습니다.

2. Ping으로 MTU 테스트하기

Fragment를 허용하지 않고 테스트합니다.

ping -M do -s 1472 8.8.8.8

정상이라면 응답이 옵니다.

오류가 발생하면

Frag needed

Packet needs to be fragmented

와 같은 메시지가 출력됩니다.

3. MTU 자동 계산하기

MTU를 조금씩 줄여가며 테스트합니다.

예를 들어

ping -M do -s 1464 8.8.8.8
ping -M do -s 1452 8.8.8.8

정상 응답이 오는 최대 크기를 찾으면 적절한 MTU를 계산할 수 있습니다.

4. 인터페이스 MTU 변경하기

일시적으로 변경합니다.

ip link set dev eth0 mtu 1400

확인합니다.

ip link show eth0

재부팅 후에도 유지하려면 NetworkManager 또는 배포판의 네트워크 설정 파일에 반영해야 합니다.

5. TCP MSS 확인하기

MSS(Maximum Segment Size)를 확인합니다.

ss -ti

VPN 환경에서는 MSS Clamping이 필요할 수도 있습니다.

6. Docker MTU 확인하기

Docker 네트워크를 확인합니다.

docker network inspect bridge

Docker 데몬의 MTU 설정도 확인합니다.

{
  "mtu": 1400
}

Overlay Network에서는 MTU 불일치가 빈번하게 발생합니다.

7. Kubernetes MTU 확인하기

노드 상태를 확인합니다.

kubectl get nodes

사용 중인 CNI(Calico, Flannel, Cilium 등)의 MTU 설정이 일치하는지 확인합니다.

8. tcpdump 분석하기

패킷을 확인합니다.

tcpdump -i eth0

다음과 같은 현상이 반복된다면 MTU를 의심할 수 있습니다.

  • Retransmission
  • ICMP Fragmentation Needed
  • TCP Reset

9. ethtool 확인하기

NIC 상태를 확인합니다.

ethtool eth0

Jumbo Frame을 사용하는 경우 스위치와 서버의 MTU가 동일한지 확인해야 합니다.

10. 로그 확인하기

커널 로그를 확인합니다.

journalctl -k

또는

dmesg | grep -i mtu

MTU 관련 메시지가 반복되는지 확인합니다.

MTU 문제 점검 순서

실무에서는 다음 순서대로 점검하는 것이 좋습니다.

  1. 현재 MTU 확인
  2. Ping MTU 테스트
  3. 적절한 MTU 계산
  4. MTU 변경
  5. MSS 확인
  6. Docker MTU 확인
  7. Kubernetes MTU 확인
  8. tcpdump 분석
  9. NIC 확인
  10. 로그 분석

MTU 문제 사용 시 주의사항

다음 사항을 고려해야 합니다.

  • VPN 환경에서는 MTU를 줄여야 하는 경우가 많다.
  • Jumbo Frame은 모든 장비가 동일한 MTU를 사용해야 한다.
  • Docker Overlay Network에서는 MTU 설정이 중요하다.
  • Kubernetes CNI 설정도 함께 확인한다.
  • ICMP Fragmentation Needed 메시지를 무시하지 않는다.
  • MTU 변경 후 반드시 재테스트한다.

MTU는 단순한 네트워크 설정 값이 아니라 네트워크 성능과 안정성에 직접적인 영향을 주는 중요한 요소입니다.

MTU와 MSS의 차이

항목MTUMSS
의미최대 전송 단위TCP 데이터 최대 크기
적용 계층Layer 2/3TCP
기본값1500 Byte1460 Byte
영향전체 패킷 크기TCP Payload 크기

MTU는 전체 패킷 크기를 의미하며, MSS는 TCP 데이터 영역의 최대 크기를 의미합니다.

자주 묻는 질문

기본 MTU는 항상 1500인가요?

일반적인 Ethernet 환경에서는 1500이 기본값입니다. 하지만 VPN, PPPoE, VXLAN, GRE 등의 환경에서는 더 작은 MTU를 사용하는 경우가 많습니다.

Jumbo Frame은 언제 사용하나요?

10GbE 이상의 고속 네트워크나 스토리지 환경에서 CPU 사용률을 줄이고 성능을 높이기 위해 사용합니다. 다만 모든 네트워크 장비가 동일한 Jumbo Frame MTU를 지원해야 합니다.

MTU를 잘못 설정하면 어떤 문제가 발생하나요?

웹 페이지가 일부만 로딩되거나, SSH 파일 전송 실패, VPN 연결 불안정, TCP 재전송 증가, Packet Loss 등의 문제가 발생할 수 있습니다.

마무리

MTU(MTU Mismatch)는 Linux 서버에서 예상보다 자주 발생하는 네트워크 문제이며, VPN과 Docker, Kubernetes 환경에서는 특히 중요합니다. ip link, ping -M do, tcpdump, ethtool 등을 활용하면 MTU 문제를 빠르게 분석할 수 있으며, 네트워크 장비와 서버의 MTU 값을 일관되게 맞추는 것이 안정적인 서비스 운영의 핵심입니다.

댓글 남기기