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 문제 점검 순서
실무에서는 다음 순서대로 점검하는 것이 좋습니다.
- 현재 MTU 확인
- Ping MTU 테스트
- 적절한 MTU 계산
- MTU 변경
- MSS 확인
- Docker MTU 확인
- Kubernetes MTU 확인
- tcpdump 분석
- NIC 확인
- 로그 분석
MTU 문제 사용 시 주의사항
다음 사항을 고려해야 합니다.
- VPN 환경에서는 MTU를 줄여야 하는 경우가 많다.
- Jumbo Frame은 모든 장비가 동일한 MTU를 사용해야 한다.
- Docker Overlay Network에서는 MTU 설정이 중요하다.
- Kubernetes CNI 설정도 함께 확인한다.
- ICMP Fragmentation Needed 메시지를 무시하지 않는다.
- MTU 변경 후 반드시 재테스트한다.
MTU는 단순한 네트워크 설정 값이 아니라 네트워크 성능과 안정성에 직접적인 영향을 주는 중요한 요소입니다.
MTU와 MSS의 차이
| 항목 | MTU | MSS |
|---|---|---|
| 의미 | 최대 전송 단위 | TCP 데이터 최대 크기 |
| 적용 계층 | Layer 2/3 | TCP |
| 기본값 | 1500 Byte | 1460 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 값을 일관되게 맞추는 것이 안정적인 서비스 운영의 핵심입니다.