Adakah Nama Hos Gateway Pi Mengemas Kini Laluan Statik Secara Sendiri?
Nama DNS untuk gateway Pi anda tidak pernah menulis semula hop seterusnya yang telah dipasang. Lihat apa yang disimpan kernel dan siapa yang perlu mengemas kini laluan.
Menghalakan laluan statik ke nama gateway terasa seolah-olah ia patut bertahan apabila alamat berubah, dan ia tidak. Nama itu hidup dalam DNS, manakala laluan duduk dalam jadual penghalaan klien sebagai hop seterusnya yang berangka. Apabila Pi berpindah ke alamat lain, setiap pengguna yang sudah memasang hop lama terus menghantar trafik ke nombor yang sama. Tiada penyelesai yang bersambung ke jadual penghantaran, jadi tiada apa yang menulis semula entri itu untuk anda.
Jawapan DNS dan laluan ialah objek yang berbeza
Katakan Pi anda menjawab vpn-gw.lan dan menghantar 10.44.0.0/16 ke dalam terowong. Klien pada 192.168.30.0/24 mencapainya melalui laluan statik. Apabila alamat Pi berpindah dari 192.168.30.4 ke 192.168.30.11, rekod itu mengikut dalam TTLnya dan laluan tidak.
Kedua-dua pandangan tidak bersetuju dengan cara yang mudah terlepas pandang, kerana kedua-duanya kelihatan wajar apabila anda bertanya secara berasingan:
$ ip route get 10.44.0.1
10.44.0.1 via 192.168.30.4 dev eth0 src 192.168.30.20
$ dig +short vpn-gw.lan
192.168.30.11
Hanya baris pertama menentukan ke mana paket pergi. Baris kedua menjawab soalan yang tidak pernah ditanya oleh kernel. Rekod dengan beberapa rekod A juga tidak menjadi dasar kegagalan alih, kerana setiap alamat masih perlu menjadi hop seterusnya yang boleh digunakan pada segmen itu.
Apa yang kekal dalam jadual selepas arahan tamat
Laluan Linux merekodkan dua perkara yang penting di sini: hop seterusnya sebagai alamat protokol, dan antara muka keluar sebagai nombor indeks. Atribut laluan rtnetlink menamakan medan pertama itu RTA_GATEWAY, dan ia menyimpan bait. Setelah entri berada di tempatnya, tiada TTL dilampirkan padanya dan tiada carian latar belakang menyegarkannya.
Itulah sebabnya ip route add 10.44.0.0/16 via vpn-gw.lan boleh kelihatan berfungsi. Alat itu menyelesaikan nama semasa arahan berjalan, menulis alamat yang terhasil, dan melupakan nama itu sepenuhnya. Jalankan ip route show 10.44.0.0/16 selepas itu dan anda mendapat alamat literal semula.
Tingkah laku itu wajar diketahui sebelum anda menyalahkan terowong.
Alat yang menyelesaikan nama untuk anda, dan bila
Sesetengah penghala dan tembok api memang menerima nama hos dalam medan laluan atau gateway. Yang penting ialah bila penyelesaian berlaku. Jika peranti hanya menyelesaikan nama semasa anda menggunakan konfigurasi, entri yang disimpan sama statiknya dengan alamat yang ditaip, dan perubahan alamat kemudian memerlukan satu lagi penggunaan. Fakta bahawa medan menerima nama tidak memberitahu apa-apa tentang penyegaran.
Persediaan terurus cenderung membahagikan kerja. Tempahan DHCP atau pajakan statik mengekalkan Pi pada satu alamat, dan rekod DNS hanya mengikut pajakan itu. Tiada apa yang perlu menjejaki sasaran bergerak kerana sasaran tidak bergerak.
Pengemas kini yang dipantau ialah corak sah yang lain, dan ia memerlukan pemilik.
Pakukan alamat itu atau jalankan sendiri pengemas kini
Untuk LAN kecil, tempahan pada pelayan DHCP ialah pembaikan termurah. Pilih alamat di luar kolam dinamik, ikatkannya pada alamat MAC Pi, dan sahkan dengan ip -4 addr show dev eth0 selepas pembaharuan pajakan seterusnya. Kemudian halakan hop seterusnya klien ke alamat itu sekali sahaja. Sekarang anda mempunyai gateway yang stabil dan rekod yang menerangkannya, dan itulah urutan hubungan ini benar-benar berfungsi.
Jika Pi benar-benar perlu berpindah, simpan pembaikan laluan di satu tempat daripada mengedit setiap klien dengan tangan. Skrip pendek yang menyelesaikan, membandingkan dan menggantikan sudah cukup untuk menjadikan langkah itu boleh diulang:
new=$(dig +short vpn-gw.lan | head -n1)
cur=$(ip route get 10.44.0.1 | awk '{print $3}')
if [ "$new" != "$cur" ]; then
ip route replace 10.44.0.0/16 via "$new"
fi
ip route get 10.44.0.1
Arahan terakhir ialah ujian penerimaan, kerana ia mencetak gateway yang sebenarnya akan digunakan oleh kernel. Jika alamat yang dicetak masih yang lama, skrip berjalan dalam ruang nama rangkaian yang salah atau tiada kebenaran, dan bahagian DNS tidak relevan.
Periksa juga laluan pulang. Pi perlu tahu cara mencapai subnset klien, dan tembok apinya perlu membenarkan trafik terowong. Laluan lalai yang ditambah untuk menutup ketidakpadanan biasanya menyembunyikan jurang sebenar dan merosakkan sesuatu yang lain seminggu kemudian.