Selepas IP pelayan berubah, peraturan SNAT masih menamakan yang lama
Terowong boleh bersambung sementara setiap paket yang dimajukan tersekat, kerana peraturan terjemahan masih menulis semula ke alamat yang tidak lagi dimiliki hos.
Pelayan berpindah ke alamat baharu, klien masih bersambung, dan tiada apa yang mereka hantar sampai ke internet. Pemisahan itulah petunjuknya: soket mendengar dan pemajuan port terselamat daripada perpindahan, jadi terowong naik, sementara terjemahan sumber yang digunakan pada paket yang dimajukan masih menamakan alamat yang tidak lagi dimiliki hos. Balasan kepada paket yang ditulis semula itu pergi ke mesin yang sudah tiada.
Sambungan dan pemajuan gagal di tempat yang berbeza
Pembentukan bergantung pada titik akhir yang sudah diketahui klien: alamat awam, pemajuan port di hadapannya dan pendengar di dalam. Trafik yang dimajukan bergantung pada keputusan kedua yang dibuat selepas paket memasuki terowong, apabila hos menulis semula sumbernya supaya balasan menemui jalan pulang.
Perubahan alamat hanya merosakkan keputusan kedua, dan sebab itulah gejalanya dibaca sebagai "bersambung tetapi tiada internet". Ini juga menjelaskan mengapa pemeriksaan biasa di sisi klien kelihatan sihat: jabat tangan selesai, klien menerima alamat, dan ping ke alamat terowong pelayan pun boleh menjawab. Berjam-jam dihabiskan pada klien untuk kerosakan yang tinggal di sebelah sana, jadi jadual peraturan ialah tempat pertama untuk dilihat.
Baca peraturan dan pembilangnya sebelum mengedit
Senaraikan peraturan terjemahan dengan pembilang dan bandingkan sumber yang dikonfigurasikan dengan alamat yang benar-benar dipegang hos. Peraturan yang ditulis semula ke alamat mati biasanya menunjukkan trafik di laluan masuk, kerana paket sampai kepadanya dan diterjemahkan, dan tiada apa di laluan balik.
sudo iptables -t nat -L POSTROUTING -n -v --line-numbers
ip -4 addr show
Periksa tiga medan semasa anda di sana: kumpulan dalam padanan sumber, antara muka keluar jika peraturan menamakan satu, dan pengecualian yang menghalang trafik antara terowong daripada ditulis semula. Pengecualian itu mudah hilang semasa pengeditan, dan kehilangannya membuat trafik antara rakan kelihatan berfungsi sedangkan balasannya melalui laluan pelik.
Jika pembilang terhenti pada sifar, paket tidak pernah sampai ke peraturan ini dan alamat bukan masalah semasa. Cari peraturan pesaing lebih awal dalam rantaian, yang berlaku apabila seseorang menambah pengganti dan bukannya mengedit yang asal. Bandingkan nombor peraturan dengan output yang anda catat seminit lalu. Susunan ialah sebahagian daripada konfigurasi, bukan butiran kosmetik.
Ganti sumbernya, atau berhenti menamakannya
Apabila hos mempunyai alamat stabil, ganti peraturan di tempatnya dan bukannya menambah satu lagi. Penggantian mengikut nombor peraturan mengekalkan susunan yang menjadi asas kepada seluruh rantaian.
sudo iptables -t nat -R POSTROUTING 1 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to-source 10.151.0.40
Apabila alamat diberikan secara dinamik, jangan namakan sebarang sumber dan biarkan kernel memilih yang semasa daripada antara muka keluar. Varian itu bertahan perpindahan seterusnya tanpa pengeditan, dengan harga menyembunyikan alamat mana yang digunakan.
sudo iptables -t nat -R POSTROUTING 1 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -o eth0 -j MASQUERADE
Sahkan pemajuan IPv4 masih diaktifkan melalui konfigurasi terurus, kemudian jadikan peraturan itu kekal dengan mekanisme pengedaran itu sendiri. Perubahan yang dibuat hanya dalam kernel yang berjalan kembali pada but semula seterusnya, biasanya dalam tetingkap penyelenggaraan yang tiada siapa mengaitkannya dengan perubahan itu.
Dua cara untuk melakukan penggantian dengan salah
Menterjemah kumpulan ke alamat terowong pelayan dan bukannya alamat LAN-nya menghantar balasan terus kembali ke terowong, di mana ia dihalakan ke klien yang tidak pernah memintanya. Sambungan tersekat dengan cara yang kelihatan seperti gelung penghalaan, kerana memang begitu.
Menimbun terjemahan kedua di atas yang lama ialah kesilapan yang lain. Peraturan pertama yang sepadan menang, jadi entri usang terus mengendalikan paket sehingga ia dipadamkan, dan pembilang peraturan baharu kekal pada sifar sementara semua orang menyalahkan pengganti. Padamkan pendua sebelum menambah apa-apa yang baharu. Kemudian baca senarai sekali lagi dan sahkan bahawa tepat satu terjemahan sepadan dengan kumpulan itu.
Jika terowong juga membawa IPv6, ulangi seluruh semakan pada tindanan yang lain. Laluan lalai IPv6 tanpa terjemahan dan tanpa awalan berhalakan gagal sama senyapnya, dan mudah dilupakan kerana semua di atasnya kelihatan sama.
Perkhidmatan masuk memerlukan terjemahan yang bertentangan
Perkhidmatan pada klien VPN yang mesti boleh dicapai dari luar memerlukan terjemahan destinasi, bukan terjemahan sumber: port awam ditulis semula ke alamat terowong klien sebelum ia masuk. Laluan pemajuan kemudian memerlukan peraturan jelas yang membenarkan trafik itu.
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.9.8.2:8080
Jangan sekali-kali menterjemah port yang membawa terowong itu sendiri, kerana penulisan semula itu memutuskan sambungan yang mengekalkan perkhidmatan boleh dicapai. Jauhkan port terowong sepenuhnya daripada peraturan destinasi. Sahkan dari kedua-dua hujung selepas itu: pembilang pada peraturan baharu, tangkapan pendek pada peranti terowong, dan satu permintaan ke alamat di dalam terowong sebelum mencuba yang awam.