Terowong VPN bersarang: mengapa yang dalam tersekat pada paket besar
Setiap terowong membelanjakan sebahagian belanjawan paket laluan sebelum yang seterusnya bermula. Jumlahkan pengepala dan sesi dalam gagal pada paket besar.
DNS diselesaikan, sesi SSH kekal, dan kemudian muat naik besar membeku sementara ping ke hos yang sama masih menjawab. Pemisahan itu menunjukkan saiz paket, bukan terowong yang rosak. Terowong bersarang mencapainya pada saiz yang tidak akan dicapai oleh mana-mana terowong secara bersendirian. Sesi dalaman tidak mengapa; ia hanya diberi paket yang tidak lagi muat.
Ke mana MTU laluan sebenarnya pergi
Setiap enkapsulasi membelanjakan bait sebelum lapisan seterusnya mendapat giliran. Laluan Ethernet menawarkan 1500 bait kepada paket luar, dan terowong luar mengambil bahagiannya sebelum apa-apa di dalamnya boleh dialamatkan. Satu nilai overhed yang diagak akan salah tepat sebanyak jumlah yang penting.
Senaraikan lapisan mengikut urutan: laluan akses, pengangkutan luar, terowong luar, pengangkutan dalam, terowong dalam, aplikasi. Kira setiap pengepala sekali, dan asingkan UDP daripada pengepala dan tag terowong itu sendiri.
Dua lapisan WireGuard, dikira sekali
Ambil laluan akses IPv4 dengan satu terowong WireGuard di dalam yang lain. Lapisan luar menelan 20 bait IPv4, 8 bait UDP dan 32 bait untuk pengepala data WireGuard serta tag pengesahannya. Di dalamnya, terowong dalam memerlukan pengepala IPv4 20 bait dan pengepala UDP 8 bait sendiri sebelum 32 bait kedua overhed WireGuard. Apa yang tinggal memuatkan pengepala IPv4, pengepala TCP dan data. Laluan luar IPv6 menelan 40 dan bukan 20 serta meninggalkan 1320.
| Layer | Bytes |
|---|---|
| Path MTU | 1500 |
| Outer IPv4 header | 20 |
| Outer UDP header | 8 |
| Outer WireGuard header and tag | 32 |
| Inner transport IPv4 header | 20 |
| Inner UDP header | 8 |
| Inner WireGuard header and tag | 32 |
| Innermost IPv4 header | 20 |
| TCP header | 20 |
| Payload that fits | 1340 |
Aritmetik berakhir pada 1340 bait. Satu lapisan dengan peraturan yang sama meninggalkan 1400 untuk muatan berguna TCP, iaitu 1500 tolak 20, 8, 32, 20 dan 20, dan perbezaan 60 bait itu ialah tepat enkapsulasi dalam yang ditambah oleh terowong kedua.
Gunakan 1400 pada laluan bersarang dan terowong dalam kurang 60 bait, tidak kelihatan sehingga paket cukup besar untuk memerlukannya. Padding dan pilihan pemecahan protokol itu sendiri menggerakkan angka itu semula, jadi percayalah pada jadual.
MTU, MSS dan pemecahan bertindak di tempat berbeza
MTU antara muka mengehadkan apa yang akan dikeluarkan antara muka, manakala pengapit MSS TCP mengubah apa yang rakan TCP sanggup hantar. Pengapit membaiki sesi TCP dan tidak berbuat apa-apa untuk datagram UDP yang besar, itulah cara pembaikan kelihatan berjaya untuk satu aplikasi dan terlepas yang seterusnya secara senyap. Pilihan pemecahan protokol itu sendiri ialah tuas ketiga dengan kegagalannya sendiri. MTU antara muka ialah langkah pertama yang biasa dan yang paling kasar.
Terowong berjambatan dan berpenghalaan membawa bingkai berbeza, jadi angka daripada penggunaan lain jarang berpindah. Penemuan MTU laluan, yang diterangkan dalam RFC 8201, hanya membantu selagi mesej ICMP yang bergantung padanya dibenarkan lalu.
Mencari lapisan yang kurang
Sahkan setiap terowong secara berasingan sebelum menyarangnya, jika keperluan membenarkan perbandingan. Prob bersaiz tetap menyelesaikannya: ping -M do -s 1472 -c 3 10.8.0.1 menghantar paket IPv4 1500 bait penuh di dalam lapisan itu. Tambah lapisan kedua dan ulang prob yang sama, supaya apa-apa kegagalan tergolong dalam perubahan yang diketahui.
Apabila pemindahan tersekat, ubah satu parameter berdokumen pada satu masa dan catat saiz yang gagal. Periksa juga laluan balik, kerana rekursi laluan bersarang boleh meniru masalah saiz paket cukup hampir untuk menghabiskan satu petang. Balasan ICMP yang ditapis boleh menyembunyikan had sebenar, jadi prob lebih penting daripada penalaran.
Tulis belanjawan di tempat orang seterusnya akan menemuinya
Jadual dengan satu baris setiap lapisan hidup lebih lama daripada peraturan praktis. Simpan di sebelah rajah terowong supaya tiada siapa mengulang aritmetik di bawah tekanan.
Lebih banyak terowong bermakna lebih banyak kebergantungan, jadi pelan rollback berhak mendapat tempatnya di sebelah belanjawan. Jika angkanya masih tidak sepadan, ukur laluan itu daripada meneka semula. Matlamatnya ialah angka yang boleh anda pertahankan, bukan yang anda hafal.