Dua kolam klien, satu gateway dan rancangannya kelihatan remeh: satu peraturan menghantar kolam pertama keluar melalui uplink pantas, satu lagi menghantar kolam kedua melalui terowong rakan kongsi. Kemudian peraturan dipasang dan kolam kedua masih keluar melalui laluan lalai. Peraturan itu tidak rosak. Sumber paket bukanlah apa yang dijangka oleh penulis pada saat carian berlaku, kerana penterjemahan dan carian berlaku pada titik berbeza dalam perjalanan paket yang sama, dan susunannya berlawanan dengan gambarajah mental yang dilukis oleh kebanyakan orang.

Carian berlaku sebelum sumber ditulis semula

Untuk paket yang dipindahkan daripada klien VPN, kernel menjalankan urutan tetap. Ia tiba pada antara muka terowong, melalui prerouting tempat conntrack dan DNAT berada, kemudian keputusan penghalaan dibuat, kemudian pemajuan, kemudian postrouting tempat SNAT digunakan terakhir. Peraturan berbentuk from dirujuk semasa keputusan penghalaan itu, bermakna ia melihat alamat asal klien, bukan alamat yang diterjemah.

Jadi menambah peraturan masquerade tidak mengubah dasar mana yang sepadan dengan aliran keluar. Yang berubah ialah apa yang dilihat hujung jauh, dan seterusnya laluan balik mana yang wujud. Ini dua akibat berbeza, dan semakan perubahan sentiasa mengelirukannya. Pisahkan kedua-duanya dan reka bentuk biasanya menjadi jelas dalam satu minit.

Alamat terjemahan muncul dalam peraturan pada arah balasan. Paket yang kembali ke gateway dialamatkan kepada alamat terjemahan, dan jika anda mempunyai peraturan dasar berdasarkan destinasi atau antara muka tempat ia masuk, itulah nilai yang akan anda padankan. Sambungan yang sama, sumber kebenaran berbeza dalam setiap arah.

StageSource the kernel seesWhat it means for your rule
PreroutingClient address, 172.31.7.42Where marks and DNAT are applied
Routing decisionStill 172.31.7.42This is where from rules match
PostroutingBecomes 198.51.100.9What the far end and its return route see

Jadi dua kolam dengan sumber berbeza memang memerlukan jadual berbeza, dan reka bentuknya kukuh. Apa yang jadual di atas kecualikan ialah jalan pintas menyahpepijat dengan melihat apa yang diterima oleh tapak jauh dan menyimpulkan peraturan daripadanya.

Ujian dari gateway bukan ujian kolam

Trafik yang dijana oleh gateway sendiri tidak pernah melalui prerouting, kerana ia tidak tiba pada mana-mana antara muka. Ia dihalakan dalam laluan output, dengan alamat gateway sendiri sebagai sumber, dan peraturan from yang berdasarkan julat klien tidak akan sepadan. Setiap tiket dalam bidang ini yang berkata ia berfungsi dari kotak tetapi tidak dari klien ialah pengulangan fakta itu.

Simulasikan klien dan bukan menganggar. Carian penghalaan boleh ditanya secara terus, dengan sumber dan antara muka masuk diberikan:

ip route get 198.51.100.9 from 172.31.7.42 iif tun0
ip route get 198.51.100.9 from 172.31.8.42 iif tun0
ip route show table 201

Jalankannya sekali bagi setiap kolam. Jika kedua-dua arahan mengembalikan antara muka yang sama, peraturan itu tidak memisahkan kolam, dan puncanya sama ada peraturan yang hilang atau peraturan berkeutamaan lebih tinggi yang sepadan dengan kedua-duanya. Jika ia mengembalikan antara muka berbeza tetapi klien masih gagal, kesalahannya terletak selepas carian dan anda boleh berhenti memeriksa peraturan.

Keutamaan, bukan kedudukan dalam fail

Peraturan dinilai dalam susunan keutamaan menaik, dan nombornya yang penting, bukan susunan anda menaipnya. Jadual local berada pada keutamaan 0, jadual main pada 32766 dan peraturan lalai pada 32767, sebab itu peraturan yang ditambah dengan keutamaan lalai mendarat hampir hujung senarai dan kalah kepada hampir segala-galanya.

ip rule show
ip rule add from 172.31.8.0/24 lookup 201 priority 1000
ip -4 route show table 201

Keutamaan yang jelas menjadikan susunan yang dimaksudkan kelihatan dalam fail dan dalam semakan. Ia juga menghalang penambahan kemudian daripada melompat secara senyap di hadapan peraturan sedia ada, iaitu punca paling biasa dasar yang berfungsi berhenti berfungsi selepas perubahan yang tidak berkaitan.

Peraturan sepadan yang menunjuk ke jadual tidak lengkap ialah perangkap yang lain. Jika jadual 201 mengandungi laluan lalai tetapi tiada laluan ke destinasi, paket digugurkan atau dihantar ke tempat yang salah, dan peraturan itu kelihatan betul sepenuhnya secara berasingan. Baca jadual, bukan hanya peraturan. Peraturan ialah penunjuk, dan jadual kosong ialah penunjuk ke tiada apa.

Laluan balik masih perlu wujud

Dasar sumber memilih jalan keluar. Ia tidak mencipta laluan balik. Jika kolam kedua keluar melalui terowong rakan kongsi, rakan kongsi perlu tahu cara mencapai 172.31.8.0/24, sama ada melalui laluan balik ke gateway atau menerima alamat terjemahan yang sudah dikenalnya.

Memilih antara keduanya ialah keputusan reka bentuk dengan akibat yang kelihatan. Menghalakan julat klien kembali mengekalkan identiti setiap klien pada rakan kongsi dan memerlukan ia menerima awalan anda. Penterjemahan menyembunyikan kolam di sebalik satu alamat dan memerlukan rakan kongsi menerima alamat itu sahaja, dengan kos log anda dan log mereka tidak lagi bersetuju tentang siapa yang bersambung.

Apa pun yang anda pilih, tuliskannya di sebelah takrif kolam. Laluan balik yang wujud hanya dalam ingatan seseorang ialah tepat jenis perkara yang bertahan sehingga rakan kongsi menukar tembok api, dan kemudian mengambil masa sehari untuk dibina semula.

Jangan tangkap terowong gateway sendiri dalam dasar

Peraturan yang anda tulis untuk klien juga terpakai kepada trafik yang dijana oleh gateway, melainkan anda mengecualikannya. Peraturan luas berdasarkan tanda atau antara muka output boleh menangkap sambungan gateway sendiri ke rakan kongsi, dan kemudian terowong yang membawa dasar itu dihalakan oleh dasar itu. Ini menghasilkan gelung atau gangguan yang kelihatan seperti kerosakan penyedia.

Hadkan setiap peraturan sesempit yang dibenarkan oleh reka bentuk: awalan sumber, antara muka masuk dan, jika disokong, tanda yang hanya dibawa oleh paket klien. Kemudian uji sambungan gateway sendiri selepas setiap perubahan peraturan, kerana kegagalan itu merujuk dirinya sendiri dan tidak muncul dalam ujian klien.

Halaman manual ip-rule mendokumentasikan semantik pemilih dan keutamaan. Gabungkannya dengan ujian carian bagi setiap kolam dan reka bentuk menjadi boleh diperiksa, itulah perbezaan antara penghalaan dasar yang bertahan setahun dan yang semua orang takut menyentuhnya.

Artikel berkaitan