Keluar berasingan: kolam VPN pada usb0, trafik gateway pada eth0
Klien VPN yang dimajukan boleh keluar melalui usb0 sementara gateway mengekalkan laluan lalai eth0-nya. Bina jadual terpilih yang lengkap, kemudian jadikan kegagalan menutup dan bukan membocor.
Klien menyambung dan mengesahkan diri, kemudian trafik mereka keluar melalui pautan atas yang salah, kerana satu-satunya laluan lalai pada mesin itu milik gateway sendiri. Menggantikan laluan lalai itu akan merosakkan kemas kini mesin dan akses pengurusannya, jadi pemilihan mesti lebih sempit daripada «semua trafik». Bentuk yang boleh dilaksanakan ialah peraturan dasar yang berasaskan alamat sumber dalaman kolam klien, menunjuk kepada jadual penghalaan kedua yang memiliki WAN alternatif. Dari situ senarai semak berkisar tentang kelengkapan dan tingkah laku semasa kegagalan, bukan tentang peraturan itu sendiri.
Sahkan alamat sumber bertahan sehingga keputusan penghalaan
Peraturan dasar yang sepadan dengan julat sumber hanya tercetus apabila paket masih membawa sumber itu pada masa carian. Trafik klien yang dimajukan berbuat demikian, selagi tiada apa di hulu menulis semulanya sebelum penghalaan. Trafik yang dijana oleh gateway sendiri tidak, dan itulah sebabnya laluan lalai gateway boleh kekal di tempatnya.
Di sinilah ujian setempat mengelirukan. curl yang dijalankan pada gateway ialah aliran yang dijana setempat dengan alamat gateway, jadi ia mengambil jadual utama dan tidak membuktikan apa-apa tentang laluan klien. Uji dari klien yang bersambung, atau jana trafik dengan sumber yang benar-benar milik kolam itu.
Mulakan dengan menulis nilai sebenar: awalan kolam, antara muka tunnel yang membawanya, alamat dan hop seterusnya WAN kedua, serta nombor jadual yang anda ingin gunakan. Kosongkan peraturan lama daripada mana-mana percubaan terdahulu sebelum menambah yang baharu, kerana peraturan berganda pada keutamaan berbeza menghasilkan kegagalan yang kelihatan rawak.
Bina jadual terpilih yang lengkap
Jadual bukan laluan lalai dengan seorang kawan. Ia memerlukan cukup laluan supaya setiap carian diselesaikan di dalamnya, termasuk laluan bersambung bagi subrangkaian WAN agar hop seterusnya boleh dicapai. Untuk kolam 10.77.0.0/24 pada tun1, alamat WAN 203.0.113.20/24 dengan hop seterusnya 203.0.113.1, dan jadual 600:
ip -4 route replace 203.0.113.0/24 dev usb0 src 203.0.113.20 table 600
ip -4 route replace 10.77.0.0/24 dev tun1 table 600
ip -4 route replace default via 203.0.113.1 dev usb0 table 600
ip -4 rule add priority 1500 from 10.77.0.0/24 lookup 600
Peraturan itu terletak pada keutamaan di bawah mana-mana peraturan tangkap-semua yang sedia ada, jadi klien yang sepadan mencapai jadual 600 dahulu dan segala-galanya jatuh ke jadual utama. Rujukan ip-rule menerangkan model carian tersusun dan sintaks pemilih sepenuhnya.
Kemudian fikirkan apa yang tidak terkandung dalam jadual itu. Destinasi yang mempunyai laluan hanya dalam jadual utama, seperti subrangkaian pengurusan yang boleh dicapai melalui eth0, tidak akan ditemui dalam jadual 600 dan tidak akan kembali ke jadual utama setelah ada laluan lalai di sana. Jika laluan itu penting, tambahkannya secara eksplisit ke jadual terpilih, yang biasanya merupakan jawapan betul untuk jadual keluar VPN.
Jauhkan trafik pendengar itu sendiri daripada dasar
Pendengar OpenVPN mempunyai sambungan luaran sendiri, dibawa melalui pautan atas yang digunakan klien untuk mencapainya. Trafik itu mesti mengekalkan laluan balik semasa ia tiba, dan peraturan luas yang meliputi alamat awam pelayan atau seluruh antara muka tunnel boleh menyeretnya ke jadual alternatif. Hadkan peraturan kepada kolam dalaman dan tiada yang lain.
Penapisan laluan balik wajar diteliti atas sebab yang sama. Apabila balasan kepada klien keluar melalui usb0 sementara permintaan tiba melalui pautan lain, tetapan rp_filter yang ketat boleh menggugurkan paket yang dianggap sah oleh dasar penghalaan. Semak nilai sysctl berkesan pada kedua-dua antara muka sebelum membuat kesimpulan bahawa peraturan itu gagal.
Susunan juga penting berbanding apa-apa lagi pada mesin. Jambatan Docker, VPN kedua dan mana-mana peraturan sedia ada daripada imej penyedia semuanya menambah keutamaan, jadi baca senarai peraturan penuh daripada menganggap keutamaan 100 berdiri sendiri.
Selaraskan pemajuan dan terjemahan dengan laluan
Penghalaan memilih pautan atas; ia tidak memberi kebenaran untuk memajukan. Kernel mesti mempunyai pemajuan IPv4 diaktifkan, dan tembok api mesti menerima arah klien ke WAN serta trafik balasan. Jadual yang betul dengan rantaian FORWARD yang menggugurkan aliran menghasilkan gejala yang sama seperti laluan yang hilang, sebab itu kedua-duanya diperiksa dalam satu pusingan.
Jika WAN kedua tidak akan menghalakan kolam persendirian kembali kepada anda, terjemahkan sumber pada keluar itu. Untuk antara muka beralamat dinamik, pilihan lazim ialah peraturan masquerade sempit yang terhad kepada kolam dan antara muka:
iptables -t nat -A POSTROUTING -s 10.77.0.0/24 -o usb0 -j MASQUERADE
Skop lebih penting daripada sasaran di sini. Peraturan masquerade yang sepadan dengan mana-mana antara muka keluar juga akan menulis semula trafik yang keluar dengan betul melalui eth0, dan itu menyembunyikan kesilapan penghalaan dan bukannya membetulkannya. Terjemahan berjalan selepas keputusan penghalaan, jadi ia tidak pernah boleh membaiki paket yang dihantar ke pautan atas yang salah.
Overhed tunnel juga memerlukan perhatian apabila laluan berbeza. Jika klien merundingkan MSS TCP yang besar dan WAN alternatif mempunyai MTU lebih rendah atau tunnel di dalamnya, segmen besar tersekat sementara yang kecil berfungsi. Mengapit MSS pada laluan pemajuan menjadikannya tingkah laku yang boleh dijangka dan bukan tersekat sekali-sekala.
Tentukan apa yang berlaku apabila usb0 hilang
Jadual kosong bukan keadaan menutup semasa kegagalan. Jika laluan yang sepadan hilang, carian berterusan ke peraturan seterusnya, mencapai jadual utama dan mengambil laluan lalai eth0. Trafik yang sepatutnya keluar melalui WAN kedua keluar secara senyap melalui yang pertama, yang dalam penggunaan berpenghalaan dasar biasanya hasil yang paling anda tidak mahu.
Di mana kemunduran itu tidak boleh diterima, tambah laluan terminal eksplisit dalam jadual 600, seperti laluan lalai blackhole, atau buang kolam itu dalam tembok api selagi antara muka dimatikan. Mana-mana satu daripadanya ialah keputusan yang boleh anda tulis; diam bukan.
Kegigihan ialah perkara terakhir. Sesiapa yang memiliki kedua-dua pautan, sama ada pengurus rangkaian, skrip penghantar atau kitaran hayat sambungan, mesti mencipta semula laluan dan peraturan pada setiap sambungan semula tanpa menambah pendua. Sahkan dengan permintaan daripada klien sebenar dan permintaan berasingan daripada gateway, sahkan keluar yang diperhatikan pada kedua-duanya, kemudian cabut WAN kedua dan lihat hasil mana antara dua hasil yang anda reka benar-benar berlaku. IPv6 memerlukan jadual, peraturan dan terjemahannya sendiri; peraturan IPv4 di atas tidak mengatakan apa-apa mengenainya.