Linux 서버에서는 Ping은 정상적으로 동작하지만 특정 웹사이트가 열리지 않거나, 대용량 파일 전송이 중간에 끊기거나, VPN 연결이 불안정한 현상이 발생하는 경우가 있습니다. 이러한 문제는 단순한 네트워크 장애가 아니라 MTU(MTU Mismatch) 설정이 서로 맞지 않아 발생하는 경우가 많습니다.
MTU(Maximum Transmission Unit)는 한 번에 전송할 수 있는 최대 패킷 크기를 의미합니다. 네트워크 경로 중 하나라도 MTU가 다르면 패킷 단편화(Fragmentation)나 패킷 손실이 발생하여 통신 품질이 크게 저하될 수 있습니다.
이번 글에서는 Linux에서 MTU 불일치 문제가 발생하는 원인과 확인 방법, 해결 방법을 실무 중심으로 자세히 알아보겠습니다.
MTU란?
MTU는 네트워크 인터페이스가 한 번에 전송할 수 있는 최대 데이터 크기입니다.
일반적인 Ethernet 환경에서는 다음과 같습니다.
Ethernet MTU : 1500 Bytes
Jumbo Frame : 9000 Bytes
만약 서버는 MTU 9000을 사용하고 중간 스위치는 1500만 지원한다면 패킷이 정상적으로 전달되지 않을 수 있습니다.
MTU 불일치가 발생하는 주요 원인
대표적인 원인은 다음과 같습니다.
- Jumbo Frame 설정 불일치
- VPN 터널 사용
- VLAN 환경
- Docker Overlay Network
- Kubernetes CNI
- GRE Tunnel
- VXLAN 환경
- IPSec VPN
- Cloud Network 제한
- Switch MTU 설정 오류
실무에서는 VPN과 Jumbo Frame 설정 오류가 가장 흔한 원인입니다.
1. 현재 MTU 확인하기
현재 인터페이스의 MTU를 확인합니다.
ip link show
또는
ip addr
예시
2: eth0:
mtu 1500
모든 인터페이스의 MTU를 비교합니다.
2. 특정 인터페이스 확인하기
ip link show eth0
출력 예시
eth0 mtu 9000
Bonding, VLAN, Bridge 인터페이스도 함께 확인해야 합니다.
3. Ping으로 MTU 테스트하기
Fragment를 허용하지 않고 테스트합니다.
ping -M do -s 1472 192.168.10.100
1472 Byte는 IP Header와 ICMP Header를 제외한 크기입니다.
정상이라면
64 bytes from ...
실패하면
Frag needed
또는
Message too long
이 출력됩니다.
4. Path MTU 확인하기
경로상의 MTU를 확인합니다.
tracepath google.com
예시
pmtu 1500
Path MTU Discovery(PMTUD)가 정상적으로 동작하는지 확인합니다.
5. MTU 변경하기
임시 변경
ip link set dev eth0 mtu 1500
또는
ip link set dev eth0 mtu 9000
변경 후 다시 Ping 테스트를 수행합니다.
6. NIC 정보 확인하기
NIC 상태를 확인합니다.
ethtool eth0
Jumbo Frame을 지원하는지 확인합니다.
지원하지 않는 NIC에서는 MTU 9000을 사용할 수 없습니다.
7. Switch 설정 확인하기
Switch에서도 동일한 MTU를 사용해야 합니다.
확인 항목입니다.
- Switch MTU
- Port MTU
- LACP MTU
- VLAN MTU
서버만 MTU를 변경해서는 문제가 해결되지 않습니다.
8. Docker 및 Kubernetes 확인하기
Docker
docker network inspect bridge
Kubernetes
kubectl get nodes
Overlay Network(VXLAN)는 일반 Ethernet보다 더 작은 MTU를 사용하는 경우가 많습니다.
9. 로그 확인하기
커널 로그를 확인합니다.
journalctl -k
또는
dmesg | grep -i mtu
MTU 관련 오류가 반복되는지 확인합니다.
10. tcpdump 분석하기
패킷을 확인합니다.
tcpdump -i eth0
Fragment가 과도하게 발생하는지 확인합니다.
또는 Wireshark에서
- Fragmentation
- ICMP Fragment Needed
메시지를 확인하는 것도 좋은 방법입니다.
MTU 문제 점검 순서
실무에서는 다음 순서대로 확인하는 것이 좋습니다.
- MTU 확인
- Ping MTU 테스트
- Path MTU 확인
- MTU 변경 테스트
- NIC 지원 확인
- Switch MTU 확인
- Docker/Kubernetes 확인
- VPN 확인
- 로그 확인
- tcpdump 분석
MTU 문제 사용 시 주의사항
다음 사항을 확인해야 합니다.
- 모든 장비의 MTU를 동일하게 설정한다.
- Jumbo Frame은 모든 구간이 지원해야 한다.
- VPN 환경에서는 MTU를 낮추는 경우가 많다.
- Docker Overlay MTU를 확인한다.
- Kubernetes VXLAN도 함께 확인한다.
- ICMP를 차단하면 Path MTU Discovery가 정상적으로 동작하지 않을 수 있다.
특히 ICMP “Fragmentation Needed” 메시지를 차단하면 PMTUD가 실패하여 웹 접속이나 파일 전송이 비정상적으로 동작할 수 있습니다.
MTU와 MSS의 차이
| 항목 | MTU | MSS |
|---|---|---|
| 의미 | 최대 전송 단위 | TCP 데이터 최대 크기 |
| 적용 계층 | Layer 2 | Layer 4 |
| 기본값 | 1500 Bytes | 1460 Bytes |
| 포함 정보 | IP Header 포함 | TCP Payload만 포함 |
MTU는 전체 패킷 크기를 의미하며, MSS는 TCP 데이터 영역만을 의미합니다.
자주 묻는 질문
MTU를 크게 설정하면 항상 성능이 좋아지나요?
아닙니다. 모든 네트워크 장비가 Jumbo Frame을 지원하는 경우에만 효과가 있습니다. 일부 장비만 지원하면 오히려 통신 문제가 발생할 수 있습니다.
Ping은 되는데 웹사이트만 접속되지 않습니다.
MTU 불일치의 대표적인 증상입니다. 작은 패킷은 정상적으로 전달되지만 큰 패킷은 단편화되거나 손실되어 웹 접속이나 HTTPS 통신에 문제가 발생할 수 있습니다.
VPN을 사용하면 MTU를 변경해야 하나요?
많은 VPN 환경에서는 터널링으로 인해 추가 헤더가 붙기 때문에 MTU를 1400~1450 정도로 낮춰 사용하는 경우가 많습니다.
마무리
MTU 불일치는 Linux 서버에서 원인을 찾기 어려운 네트워크 장애 중 하나입니다. ip link, tracepath, ping -M do, ethtool, tcpdump 등을 활용하면 대부분의 MTU 문제를 빠르게 진단할 수 있으며, 서버와 스위치, VPN 장비까지 포함한 전체 경로의 MTU를 일치시키는 것이 가장 중요한 해결 방법입니다.