Halaman dimuat, ping berhasil, dan penyalinan file macet di titik yang sama setiap kali. Pola itu menunjuk ke ukuran paket, bukan ke bandwidth atau kredensial. Enkapsulasi menambah byte pada setiap paket, sehingga muatan yang muat di jalur asli bisa melewati batas setelah melewati terowongan. Dalam percakapan ini tiga angka berbeda disebut MTU, dan mencampuradukkannya menghasilkan pengaturan yang memperbaiki satu aplikasi dan merusak aplikasi lain.

Tiga angka yang orang sebut MTU

MTU antarmuka adalah batas yang dikonfigurasi untuk paket pada tautan itu. MTU jalur adalah batas terkecil di sepanjang rute, dan ditemukan bukan dikonfigurasi. TCP MSS adalah ukuran muatan yang dinyatakan peer bahwa ia dapat menerimanya, dan diturunkan dari dua angka lain, bukan batas fisik terpisah.

Terowongan punya pandangan dalam dan pandangan luar. Paket luar membawa paket yang dienkapsulasi ditambah header yang dibutuhkan protokol, jadi ukuran dalam yang bisa dipakai lebih kecil daripada yang diizinkan jalur luar. Jalur ke server VPN juga berbeda dari jalur server ke tujuan.

Penemuan MTU jalur memungkinkan pengirim mengetahui ukuran yang bekerja, tetapi bergantung pada tibanya umpan balik. Ketika perangkat perantara memfilter pesan ICMP yang relevan, pengirim terus mengirim paket yang tidak pernah selesai, dan itulah lubang hitam klasik. Gejalanya khas begitu Anda mengenalnya: jabat tangan berhasil, muatan berukuran penuh pertama menghilang, dan koneksi akhirnya direset atau macet. Tidak ada apa pun di log aplikasi yang terlihat seperti masalah jaringan.

Uji jalur dengan muatan yang Anda kendalikan

Uji coba adalah bukti tentang satu rute dan satu ukuran, bukan pengaturan yang disarankan. Gunakan host yang menjawab, dan ubah hanya ukuran muatan.

ping -M do -s 1372 -c 2 203.0.113.20
ping -4 -f -l 1372 vpn.example

Perintah pertama mengirim uji Linux dengan fragmentasi dimatikan dan muatan 1372 byte, dan yang kedua melakukan hal yang sama di Windows tempat muatan diatur dengan -l. Balasan berarti ukuran itu bertahan melewati jalur. Pesan bahwa fragmentasi diperlukan bersifat informatif, sedangkan timeout ambigu karena host atau perangkat perantara bisa saja membuang ICMP.

Turunkan ukuran dalam beberapa langkah, bukan pencarian biner sampai tingkat byte. Anda berusaha memastikan apakah ada plafon ukuran, bukan menerbitkan angka untuk setiap jaringan. Angka yang Anda temukan berlaku untuk jalur ini, protokol ini, dan keluarga alamat ini.

IPv4 dan IPv6 terfragmentasi secara berbeda, jadi hasil uji dari satu keluarga tidak mengatakan apa pun tentang yang lain. Uji keluarga yang benar-benar dipakai aplikasi.

Clamping MSS hanya membantu TCP

Pada TCP muatan efektif dinegosiasikan selama jabat tangan, dan router di jalur dapat menulis ulang nilai itu ke bawah agar kedua ujung mengirim segmen lebih kecil. Itulah yang dilakukan clamping MSS, dan itu bekerja tanpa menyentuh klien sama sekali.

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
ip link show tun0

Aturan pertama mengunci MSS yang diumumkan ke MTU jalur untuk jabat tangan TCP yang diteruskan, dan yang kedua menampilkan MTU antarmuka terowongan itu sendiri agar Anda bisa membandingkannya dengan yang diizinkan jalur. Clamping adalah perbaikan paling tidak invasif untuk aplikasi TCP yang macet setelah jabat tangan.

Untuk UDP itu tidak melakukan apa pun. Klien suara atau gim yang mengirim datagram besar akan mengabaikan pengaturan MSS sepenuhnya, karena tidak ada jabat tangan untuk ditulis ulang. Jika aplikasi yang gagal adalah UDP, lihat opsi ukuran paket milik klien itu sendiri. Kedua protokol gagal dengan cara berbeda dan diperbaiki dengan alat berbeda, itulah sebabnya protokol masuk ke kalimat pertama tiket.

OpenVPN mengekspos opsi seperti tun-mtu, mssfix dan pengaturan terkait fragmentasi, dan perilakunya bergantung pada versi dan pada apakah kanal data bersifat AEAD. Baca manual untuk versi yang dipakai, dan ubah satu opsi setiap kali.

Ubah satu pengaturan yang didukung dan ulangi kedua percobaan

Simpan profil asli, ubah satu nilai yang didukung, dan ulangi baik permintaan kecil yang berhasil maupun transfer besar yang gagal. Jika hanya yang besar berubah, Anda sedang mengejar ukuran. Jika keduanya berubah, ada hal lain yang ikut bergeser.

Nilai yang lebih rendah dapat mengurangi gejala sambil menambah overhead, jadi angka terkecil yang mungkin bukan tujuannya. Tujuannya adalah ukuran yang dibawa jalur dengan andal dan pemborosan paling sedikit. Catat nilai, jalur, dan versi klien di tiket, karena angka yang sama yang diterapkan di tempat lain adalah tebakan.

Jika profil yang sama berfungsi dari jaringan tepercaya lain, pertahankan perbedaan itu dalam diagnosis alih-alih menyatakan klien sudah diperbaiki. Variabel yang berubah adalah jalur, dan jalur itulah yang diukur oleh uji coba.

Artikel terkait