Mengapa net.ipv4.conf.default.forwarding membiarkan tun0 tidak tersentuh
default.forwarding hanya menyemai antara muka baharu, bukan terowong yang aktif. Bandingkan ip_forward, templat dan antara muka dalam namespace yang memilikinya.
Anda menetapkan net.ipv4.conf.default.forwarding=1, menghidupkan semula VPN, dan terowong masih menggugurkan paket yang sepatutnya dihalakan oleh get laluan. Tetapan itu kelihatan betul dalam fail, dan antara muka masih melaporkan pemajuan dimatikan. Tiada apa yang rosak: anda menukar nilai yang diwarisi antara muka masa depan, bukan nilai yang digunakan oleh terowong aktif.
Telusuri perkara ini pada hos yang memiliki terowong, dalam namespace rangkaian tempat terowong itu benar-benar wujud. Kontena atau namespace rangkaian boleh memegang antara muka sementara hos menunjukkan nombor yang berbeza.
Baca ketiga-tiga nilai bersama-sama
Mulakan dengan membandingkan suis seluruh get laluan, templat untuk antara muka baharu dan antara muka yang anda pedulikan. Gantikan tun0 dengan antara muka masuk yang sebenar, dan baca juga antara muka pulangan, kerana pemajuan dinilai pada titik paket itu tiba.
sysctl net.ipv4.ip_forward
sysctl net.ipv4.conf.default.forwarding
sysctl net.ipv4.conf.tun0.forwardingHasil yang biasa ialah ip_forward = 0, default.forwarding = 1 dan tun0.forwarding = 0. Dua yang pertama tidak bersetuju tentang peranan hos, dan yang ketiga menunjukkan apa yang sebenarnya dilakukan oleh antara muka. Gabungan itu konsisten dengan hos yang tidak pernah dikonfigurasikan sebagai penghala, hanya diberi nilai templat. Ketiga-tiga nombor itu tidak bercanggah; ia menjawab tiga soalan yang berbeza. Menulis nilai templat juga tidak menentukan peranan hos.
Mengapa suis global yang bergerak
net.ipv4.ip_forward ialah kawalan seluruh get laluan. Menukarnya mengemas kini tetapan pemajuan bagi setiap antara muka sebagai sebahagian daripada operasi yang sama, sebab itu satu tulisan boleh membuat terowong sedia ada mula memajukan. default.forwarding hanya menyemai antara muka yang dimulakan selepas itu, jadi terowong yang sudah wujud mengekalkan nilai semasa ia dilahirkan.
Dokumentasi kernel menandakan ip_forward sebagai istimewa atas sebab yang berkaitan: menukarnya menetapkan semula satu set parameter IPv4 lain kepada nilai lalai hos atau penghala. Itu menjadikannya alat tumpul. Menetapkannya sekali sebagai sebahagian daripada penetapan peranan get laluan adalah wajar; menukarnya berulang kali sebagai helah nyahpepijat boleh menulis semula secara senyap konfigurasi yang anda luangkan masa untuk membetulkannya.
Nilai bagi setiap antara muka juga wujud atas sebab tertentu. Get laluan yang diurus dengan sengaja boleh membiarkan pemajuan dimatikan pada antara muka yang tidak sepatutnya pernah menghala, walaupun hos memajukan di tempat lain. Sebab itulah membaca antara muka aktif itu penting dan sebab itulah nilai global semata-mata bukan jawapan penuh. Baca pengecualian seperti itu sebagai keputusan yang disengajakan, dan catat mengapa antara muka itu berbeza. Jika tidak, jurutera seterusnya akan "membetulkannya" dengan baik hati.
Jadikan tetapan itu kekal di tempat yang betul
Satu sysctl -w sekali yang berjaya membuktikan kernel menerima nilai itu. Ia tidak bertahan selepas but semula, dan ia tidak bertahan terhadap pengurus rangkaian yang menggunakan semula tanggapannya sendiri tentang konfigurasi antara muka semasa menyambung semula. Letakkan peranan get laluan dalam fail konfigurasi sysctl atau dalam pengurus rangkaian yang memiliki hos, kemudian mulakan semula perkhidmatan yang menerapkannya.
Urutan penting dengan terowong. Jika pengurus mencipta antara muka semasa but dan menerapkan pemajuan selepasnya, antara muka itu mungkin mewarisi nilai lalai lama. But semula perkhidmatan yang mencipta semula terowong juga merupakan peristiwa penciptaan, dan ia mudah terlepas apabila unit kelihatan sihat. Semak urutan, bukan hanya kandungan akhir fail.
Baca semula ketiga-tiga nilai yang sama selepas VPN menyambung semula dan sekali lagi selepas but semula. Terowong yang baru dicipta ialah antara muka baharu, dan antara muka baharu mengambil nilai lalai yang berkuat kuasa pada masa penciptaan. Jika nombor berubah merentasi peristiwa itu, konfigurasi itu sedang diterapkan oleh sesuatu yang belum anda kenal pasti.
Jangan baiki ini dengan alat yang salah
Apabila pemajuan kelihatan rosak, godaan ialah mengosongkan tembok api atau menambah masquerading. Kedua-duanya tidak menangani suis pemajuan. Keadaan pemajuan, kebenaran untuk memajukan, laluan ke destinasi dan laluan pulangan ialah empat keperluan berasingan, dan hanya yang pertama ialah sysctl.
Uji juga dengan aliran yang betul. Permintaan yang dibuat pada get laluan itu sendiri tidak menggunakan pemajuan sama sekali; ia trafik yang dijana secara setempat. Persoalannya ialah sama ada paket yang tiba dari klien VPN atau hos LAN diterima dan dihalakan ke hadapan, jadi ujian itu mesti bermula dari belakang get laluan.
Asingkan kes IPv6
Di sini semuanya IPv4. Pemajuan IPv6, pengumuman penghala dan tingkah laku accept_ra mempunyai kawalan masing-masing, dan menyalin laluan ipv4 ke dalam tetapan ipv6 menghasilkan fail yang kelihatan munasabah dan tidak melakukan apa-apa yang berguna. Get laluan dua tindanan memerlukan kedua-dua set dikonfigurasikan dengan sengaja.
Satu pemeriksaan terakhir: selepas nilai sepadan, sahkan bahawa laluan terowong dipilih untuk destinasi dan laluan balasan wujud. Pemajuan yang diaktifkan pada antara muka tanpa laluan masih merupakan lubang hitam, dan kegagalan itu kelihatan sama dari sisi klien.