Lalu lintas satu arah setelah menonaktifkan SNAT subnet Tailscale
Matikan SNAT pada router subnet Tailscale dan balasan berhenti datang. Alamat sumber asli tetap ada, jadi LAN memerlukan rute balik ke 100.64.0.0/10.
Matikan NAT sumber pada router subnet Tailscale dan terowongan tetap bekerja sementara koneksi yang melaluinya berhenti. Permintaan tiba di tujuan dengan alamat overlay milik klien jarak jauh, yang justru menjadi inti perubahan, dan balasan kini memerlukan jalur yang tidak pernah perlu diketahui LAN. Tanpa jalur itu paket mendarat, balasan keluar melalui gateway biasa, dan kegagalan tampak sebagai masalah firewall yang tidak dijelaskan oleh aturan firewall mana pun. Terowongannya sehat; bagian baliknya hilang.
Apa yang disembunyikan SNAT
Saat SNAT aktif, router menulis ulang alamat sumber menjadi alamat LAN-nya sendiri sebelum meneruskan ke subnet, sehingga tujuan membalas ke host yang sudah diketahuinya cara menjangkau dan tidak ada lagi yang perlu dikonfigurasi. Menonaktifkannya mempertahankan sumber asli, dan tujuan lalu melihat alamat di dalam rentang overlay, bukan tetangga di kabelnya sendiri. Alamat itu nyata dan dapat dirutekan di seluruh tailnet, tetapi tidak dapat dijangkau dari LAN melalui gateway default. Sakelar yang didokumentasikan adalah --snat-subnet-routes=false, diterapkan pada router subnet Linux itu sendiri.
Ini pengaturan tetap, bukan sakelar per paket, jadi jalur balik harus ada untuk setiap jaringan tujuan yang dilayani router tersebut. Itulah yang menjadikan perubahan ini keputusan penerapan, bukan kotak centang. Apa pun yang dilayani router itu mewarisi persyaratan pada saat yang sama.
Di mana jalur balik bisa berada
Tiga penempatan lazim, dan perbedaannya pada jangkauan, bukan pada kebenaran. Rute statis di host tujuan paling langsung dan paling tidak skalabel, karena setiap perangkat memerlukan salinannya sendiri. Tabel rute di VPC atau di router situs mencakup seluruh jaringan sekaligus, dan opsi DHCP yang membawa rute statis tanpa kelas menjangkau klien secara otomatis tetapi gagal diam-diam pada perangkat yang mengabaikannya.
ip route add 100.64.0.0/10 via 192.168.1.10
ip route get 100.64.0.5
Penempatan mana pun yang Anda pilih, lompatan berikutnya adalah alamat LAN router dan tidak pernah alamat tailnet-nya. Host LAN tidak dapat menjangkau overlay sebelum memiliki rute ini, jadi lompatan berikutnya di dalam overlay bersifat sirkular dan tidak mengirim paket ke mana pun. Kesalahan tunggal itu menjelaskan sebagian besar konfigurasi yang tampak benar tetapi tetap gagal, dan kesalahan itu bertahan pada setiap pemeriksaan yang hanya membaca tabel router itu sendiri. Catat penempatan mana yang Anda gunakan, karena jika tidak, orang berikutnya akan menguji yang salah.
Membaca kegagalan sebagai lalu lintas satu arah
Gejalanya lebih mudah dikenali daripada penyebabnya: layanan menjawab di router itu sendiri dan tetap diam dari klien jarak jauh. Tangkapan di tujuan menunjukkan permintaan datang dan balasan pergi, yang tampak seperti keberhasilan sampai Anda menyadari ke mana balasan itu menuju. Balasan itu menuju gateway default, yang berarti bagian masuk berhasil dan bagian balik tidak.
Tangkap di router saja, karena ia melihat kedua arah dari satu pertukaran dan menunjukkan apakah balasan pernah tiba. Jika balasan muncul di tujuan tetapi tidak pernah di router, rutenya hilang atau salah di sisi tujuan. Jika muncul di router dan berhenti di sana, masalahnya lebih jauh dan termasuk penyelidikan lain.
sudo tcpdump -ni any host 100.64.0.5
ip route get 100.64.0.5
Apakah alamat asli layak mendapat rute
Mempertahankan SNAT tetap menjadi jawaban yang lebih sederhana setiap kali jaringan tujuan tidak dapat dikonfigurasi ulang, dan biayanya adalah setiap klien tampak seperti router di log dan kebijakan tujuan. Menonaktifkannya dibenarkan ketika aplikasi memerlukan alamat sumber asli atau ketika kebijakan jaringan harus membedakan klien yang berbagi router. Keduanya alasan sah dan tidak satu pun gratis. Manfaatnya harus sepadan dengan pemeliharaan rute di setiap jaringan tujuan, ditambah tinjauan firewall yang dijelaskan di bawah.
Untuk satu LAN kecil pertukaran itu biasanya menguntungkan, sedangkan untuk perangkat yang berlimpah dan tidak dapat menerima rute statis biasanya tidak. Catat keputusan dan alasannya di samping konfigurasi router, agar administrator berikutnya tahu perilaku mana yang disengaja. Nilai default yang tidak ditulis siapa pun tidak dapat dibedakan dari kelalaian.
Firewall, pencatatan log, dan peran ganda
Setiap aturan yang cocok dengan alamat LAN router kini cocok dengan sumber yang berbeda, termasuk aturan izinkan dan setiap bidang log yang mencatat router sebagai klien. Baca aturan itu sebelum pengujian pertama, bukan setelah kegagalan pertama, karena aturan yang hanya mengizinkan alamat router memblokir sumber baru sepenuhnya. Persempit penggantian ke klien dan port yang memerlukannya, lalu pastikan aturan itu tidak diam-diam mengizinkan seluruh tailnet.
sudo nft list ruleset | grep -n '100\.64'
sudo iptables-save | grep -n '100\.64'
Satu node yang berperan sekaligus sebagai node keluar dan router subnet adalah kombinasi yang didokumentasikan yang dapat menjatuhkan lalu lintas hulu setelah SNAT subnet dinonaktifkan. Memisahkan peran itu ke node yang berbeda menghilangkan peringatan tersebut dan memberi setiap rute dan kebijakan firewall satu pemilik. Jika peran harus tetap bersama, perkirakan perilaku itu dan ujilah sebelum menyalahkan klien. Simpan rute, pengaturan sakelar, dan penetapan peran dalam satu catatan, karena semuanya dibaca bersama saat koneksi berikutnya gagal.