Membawa Paket Dalaman 1,500 Bait Tetap Merentasi VPN
Paket dalaman tetap 1,500 bait tidak muat dalam laluan luaran 1,500 bait. Ukur overhead, kemudian pilih MTU underlay yang lebih besar atau fragmentasi yang disokong.
Anda mempunyai keperluan yang tidak boleh dilenturkan: pihak jauh mesti menerima paket IP 1,500 bait yang sama seperti yang dihantar oleh penghantar, termasuk pengepala. Tunnel tidak boleh membalut paket itu bersama rangkanya sendiri di dalam paket IP 1,500 bait kedua, jadi sesuatu dalam reka bentuk mesti mengalah. Urutan di bawah ialah urutan yang saya gunakan dalam tetingkap perubahan: tulis belanjawan bait, buktikan apa yang benar-benar boleh dibawa oleh underlay, kemudian pilih tepat satu mekanisme pengangkutan dan sahkan paket dalaman di pihak jauh.
Tulis belanjawan bait sebelum mengedit profil
Enkapsulasi menambah bait pada beberapa lapisan, dan jumlahnya ialah sifat profil anda dan bukan pemalar yang boleh dicari. Keluarga alamat, pilihan sifer, protokol pengangkutan dan mana-mana pilihan pemampatan atau rangka semuanya menggerakkan nombor itu, sebab itu penolakan yang disalin daripada pemasangan lain tidak berguna sebagai belanjawan. Mulakan dengan keperluan dalaman, tambah overhead terukur bagi setiap paket daripada konfigurasi anda sendiri, dan tulis saiz luaran yang terhasil pada tiket perubahan sebelum sesiapa mengedit fail.
Dua nombor menentukan reka bentuk: paket luaran terbesar yang dibawa laluan tanpa fragmentasi, dan bait tambahan yang diperlukan oleh enkapsulasi anda. Apabila yang pertama lebih kecil daripada yang kedua campur 1,500, salah satu daripadanya mesti berubah. Pilihan itu kemudian menjadi sempit dan bukan kreatif, sebab itu saya menulis kedua-dua nombor sebelum membincangkan pilihan. Tiada apa-apa pada lapisan tunnel yang memampatkan bait itu, dan tiada satu pun integer MTU yang membuang keperluan yang diberi kepada anda.
Uji underlay dengan ping do-not-fragment
Ukur laluan dan jangan percaya MTU antara muka, kerana pautan terkecil dalam laluan luaran itulah yang penting. Pada Linux, -M do menetapkan bit do-not-fragment dan -s mengambil muatan ICMP, jadi bingkai 1,500 bait menjawab pada 1,472 bait muatan apabila pengepala IP 20 bait dan pengepala ICMP 8 bait ditolak. Naikkan muatan sehingga ujian gagal, kemudian lompat ke saiz jumbo untuk melihat sama ada laluan membawanya sama sekali.
ping -M do -s 1472 -c 2 198.51.100.10 ping -M do -s 8972 -c 2 198.51.100.10 tracepath -n 198.51.100.10
Laluan yang lulus 1,472 dan gagal pada 8,972 tidak boleh membawa paket dalaman 1,500 bait bersama overhead dalam satu paket luaran. Itulah jawapan yang anda perlukan sebelum membuka konfigurasi VPN. Ia juga menentukan bahagian mana antara dua bahagian seterusnya yang terpakai kepada anda, jadi simpan kedua-dua hasil ujian di sebelah tiket. Meneka di sini merugikan satu tetingkap penyelenggaraan, kerana tunnel yang melaporkan dirinya up tidak memberitahu apa-apa tentang paket terbesar yang akan diterima oleh laluan.
Naikkan MTU laluan hanya di tempat setiap hop bersetuju
Bingkai jumbo ialah sifat hujung ke hujung, bukan tetapan yang anda hidupkan pada dua titik akhir yang kebetulan anda kawal. Setiap suis, penghala dan penyerahan penyedia pada laluan luaran mesti bersetuju dengan saiz yang lebih besar, dan satu hop 1,500 bait akan membuang paket yang baru anda besarkan secara senyap. Menaikkan antara muka tempatan sahaja ialah perubahan separuh klasik yang membuatkan tunnel kelihatan rosak sementara underlay menjatuhkannya secara senyap.
ip link set dev eth1 mtu 9000 ip link show dev eth1 ping -M do -s 8972 -c 2 198.51.100.10
Tukar antara muka, kemudian uji semula laluan yang sama sebelum menukar apa-apa lagi. Jika ujian masih gagal, kembalikan dengan ip link set dev eth1 mtu 1500 dan beralih kepada fragmentasi dan bukannya berdebat dengan penyedia tentang pautan yang bukan milik anda.
Gunakan fragmentasi tunnel apabila underlay tidak boleh membesar
Mekanisme fragmentasi yang disokong di bawah paket dalaman membolehkan beberapa paket luaran membawa satu paket dalaman, dan titik akhir tunnel bertentangan memasang semula semuanya sebelum menyerahkan yang asal kepada tindanan. Pilihan fragment UDP Community OpenVPN ialah satu pelaksanaan idea itu, dan ia bukan perkara yang sama seperti fragmentasi IP biasa bagi paket luaran. Kedua-dua rakan mesti menjalankan versi yang menyokong format itu, dan laluan data mesti laluan yang anda fikirkan: klien OpenVPN 3 dan saluran data yang dipercepat kelengkapan mempunyai had berbeza, jadi profil yang berfungsi pada satu klien boleh gagal pada klien lain.
openvpn --config client.ovpn --tun-mtu 1500 --fragment 1400 --verb 4
Fragmentasi luaran biasa ialah pilihan lain, dan ia lebih lemah. Penghala IPv6 tidak memfragmentasikan paket yang diteruskan sama sekali, jadi paket luaran yang terlalu besar terus mati dan penghantar hanya mengetahuinya jika mesej ICMPv6 berkaitan bertahan di laluan. Serpihan juga mengundang penapisan dan penguatan kehilangan, sebab itu saya menganggapnya sebagai sandaran dan bukan pelan.
Pembawa luaran berasaskan strim mengelak persoalan saiz dengan menyegmen strim baitnya sendiri, dan paket dalaman yang dibina semula masih boleh 1,500 bait. Itu keputusan pengangkutan dengan kosnya sendiri, termasuk tingkah laku TCP dalam TCP yang terkenal, jadi buatlah secara sengaja dan bukan sebagai kesan sampingan hujah MTU.
Sahkan paket dalaman tiba tanpa berubah
Pengesahan bukanlah jabat tangan yang berjaya. Tangkap pada antara muka tunnel di kedua-dua hujung dan bandingkan saiz serta kandungan paket yang benar-benar dihantar oleh aplikasi dengan yang diterima oleh pihak jauh.
ip link show dev tun0 ping -M do -s 1472 -c 2 10.8.0.1 tcpdump -ni tun0 -c 5 'icmp and greater 1000'
Jika tangkapan menunjukkan paket dalaman bersaiz penuh di hujung bertentangan, pilihan pembawaan berfungsi dan tugas yang tinggal ialah merekodkannya. Jika ia tidak menunjukkan apa-apa sedangkan tunnel melaporkan dirinya up, paket luaran sedang digugurkan di suatu tempat antara titik akhir, yang menghantar anda kembali kepada ujian dan bukan kepada tetapan sifer.
Rekod tiga perkara dalam tiket perubahan sebelum menutupnya: belanjawan luaran yang diukur, mekanisme yang anda pilih, dan arahan yang membuktikan paket dalaman bertahan. Orang seterusnya yang menyentuh tunnel ini akan memerlukan ketiga-tiganya, dan tiada satu pun daripadanya boleh dibina semula daripada fail konfigurasi sahaja.