Server pindah ke alamat baru, klien masih tersambung, dan tidak ada yang mereka kirim sampai ke internet. Pemisahan itulah petunjuknya: soket pendengar dan penerusan port selamat dari perpindahan, jadi terowongan naik, sementara terjemahan sumber yang diterapkan pada paket yang diteruskan masih menyebut alamat yang tidak lagi dimiliki host. Balasan untuk paket yang ditulis ulang itu menuju mesin yang sudah tidak ada.

Koneksi dan penerusan gagal di tempat yang berbeda

Pembentukan bergantung pada titik akhir yang sudah dikenal klien: alamat publik, penerusan port di depannya, dan pendengar di dalam. Lalu lintas yang diteruskan bergantung pada keputusan kedua yang diambil setelah paket masuk ke terowongan, saat host menulis ulang sumbernya agar balasan menemukan jalan kembali.

Perubahan alamat hanya merusak keputusan kedua, dan itulah sebabnya gejalanya terbaca sebagai "tersambung tetapi tidak ada internet". Ini juga menjelaskan mengapa pemeriksaan biasa di sisi klien tampak sehat: jabat tangan selesai, klien menerima alamat, dan bahkan ping ke alamat terowongan server bisa menjawab. Berjam-jam dihabiskan di klien untuk kerusakan yang tinggal di sisi lain, karena itu tabel aturan adalah tempat pertama yang harus dilihat.

Baca aturan dan penghitungnya sebelum mengedit

Daftar aturan terjemahan beserta penghitungnya dan bandingkan sumber yang dikonfigurasi dengan alamat yang benar-benar dipegang host. Aturan yang ditulis ulang ke alamat mati biasanya menunjukkan lalu lintas di jalur masuk, karena paket mencapainya dan diterjemahkan, dan tidak ada apa pun di jalur balik.

sudo iptables -t nat -L POSTROUTING -n -v --line-numbers
ip -4 addr show

Periksa tiga bidang selagi Anda di sana: kumpulan di pencocokan sumber, antarmuka keluar jika aturan menyebutkannya, dan pengecualian yang mencegah lalu lintas antar terowongan ditulis ulang. Pengecualian itu mudah hilang saat pengeditan, dan hilangnya membuat lalu lintas antar rekan tampak bekerja sementara balasannya menempuh jalur aneh.

Jika penghitung tertahan di nol, paket tidak pernah mencapai aturan ini dan alamat bukan masalah saat ini. Cari aturan pesaing yang lebih awal dalam rantai, yang terjadi ketika seseorang menambahkan pengganti alih-alih mengedit aslinya. Bandingkan nomor aturan dengan keluaran yang Anda catat satu menit lalu. Urutan adalah bagian dari konfigurasi, bukan detail kosmetik.

Ganti sumbernya, atau berhenti menyebutkannya

Saat host punya alamat stabil, ganti aturan di tempatnya alih-alih menambahkan yang lain. Penggantian berdasarkan nomor aturan menjaga urutan yang menjadi dasar sisa rantai.

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

Saat alamat diberikan secara dinamis, jangan sebutkan sumber sama sekali dan biarkan kernel memilih yang sekarang dari antarmuka keluar. Varian itu bertahan dari perpindahan berikutnya tanpa pengeditan, dengan harga menyembunyikan alamat mana yang dipakai.

sudo iptables -t nat -R POSTROUTING 1 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -o eth0 -j MASQUERADE

Pastikan penerusan IPv4 masih aktif melalui konfigurasi terkelola, lalu buat aturan itu permanen dengan mekanisme distribusi itu sendiri. Perubahan yang hanya dilakukan di kernel yang berjalan kembali pada reboot berikutnya, biasanya selama jendela pemeliharaan yang tidak dihubungkan siapa pun dengan perubahan itu.

Dua cara salah dalam mengganti

Menerjemahkan kumpulan ke alamat terowongan server alih-alih alamat LAN-nya mengirim balasan langsung kembali ke terowongan, tempat balasan itu dirutekan ke klien yang tidak pernah memintanya. Koneksi macet dengan cara yang tampak seperti lingkaran perutean, karena memang begitu.

Menumpuk terjemahan kedua di atas yang lama adalah kesalahan lainnya. Aturan pertama yang cocok menang, jadi entri usang terus menangani paket sampai dihapus, dan penghitung aturan baru tetap nol sementara semua orang menyalahkan penggantinya. Hapus duplikatnya sebelum menambahkan apa pun yang baru. Lalu baca daftar sekali lagi dan pastikan tepat satu terjemahan cocok dengan kumpulan itu.

Jika terowongan juga membawa IPv6, ulangi seluruh tinjauan pada tumpukan lainnya. Rute default IPv6 tanpa terjemahan dan tanpa prefiks yang dirutekan gagal sama diamnya, dan mudah dilupakan karena semua yang di atasnya tampak identik.

Layanan masuk memerlukan terjemahan yang berlawanan

Layanan pada klien VPN yang harus dapat dijangkau dari luar memerlukan terjemahan tujuan, bukan terjemahan sumber: port publik ditulis ulang ke alamat terowongan klien sebelum masuk. Jalur penerusan lalu memerlukan aturan eksplisit yang mengizinkan lalu lintas itu.

sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.9.8.2:8080

Jangan pernah menerjemahkan port yang membawa terowongan itu sendiri, karena penulisan ulang itu memutus koneksi yang membuat layanan tetap terjangkau. Jauhkan port terowongan sepenuhnya dari aturan tujuan. Verifikasi dari kedua ujung setelahnya: penghitung pada aturan baru, tangkapan singkat pada perangkat terowongan, dan satu permintaan ke alamat di dalam terowongan sebelum mencoba yang publik.

Artikel terkait