Saat ini saya tinggal di negara yang memblokir banyak situs web dan memiliki koneksi jaringan yang tidak dapat diandalkan ke dunia luar. Saya memiliki dua titik akhir OpenVPN (katakan: vpn1 dan vpn2) di server Linux yang saya gunakan untuk menghindari firewall. Saya memiliki akses penuh ke server ini. Ini bekerja cukup baik, kecuali untuk paket tinggi kehilangan koneksi VPN saya. Kehilangan paket ini bervariasi antara 1% dan 30% tergantung pada waktu dan tampaknya memiliki korelasi yang rendah, sebagian besar waktu tampaknya acak.
Saya berpikir untuk menyiapkan router rumah (juga di Linux) yang memelihara koneksi OpenVPN untuk kedua titik akhir dan mengirim semua paket dua kali, ke kedua titik akhir. vpn2 akan mengirim semua paket dari rumah ke vpn1. Return trafic akan dikirim baik langsung dari vpn1 ke rumah, dan juga melalui vpn2.
+------------+
| home |
+------------+
| |
| OpenVPN |
| links |
| |
~~~~~~~~~~~~~~~~~~ unreliable connection
| |
+----------+ +----------+
| vpn1 |---| vpn2 |
+----------+ +----------+
|
+------------+
| HTTP proxy |
+------------+
|
(internet)
Untuk kejelasan: semua paket antara rumah dan proksi HTTP akan digandakan dan dikirim melalui jalur yang berbeda, untuk meningkatkan kemungkinan salah satu dari mereka akan tiba. Jika keduanya tiba, yang kedua pertama dapat secara diam-diam dibuang.
Penggunaan bandwidth tidak menjadi masalah, baik di sisi rumah maupun sisi titik akhir. vpn1 dan vpn2 dekat satu sama lain (ping 3ms) dan memiliki koneksi yang dapat diandalkan.
Adakah petunjuk tentang bagaimana hal ini dapat dicapai dengan menggunakan kebijakan perutean lanjutan yang tersedia di Linux?
sumber
Saya menggunakan jawaban yang diberikan oleh @ user48116 dan berfungsi seperti pesona. Penyiapannya sebenarnya cukup mudah!
CATATAN : Saya menerapkan ini dengan dua koneksi ke hanya satu server tunggal, karena ini sudah memecahkan masalah bagi saya. Jika Anda ingin mencoba pengaturan dengan dua server, cara termudah mungkin adalah menggunakan penerusan port untuk meneruskan port UDP dari server kedua ke yang pertama, dan menggunakan resep yang sama seperti dijelaskan di sini. Saya belum menguji ini sendiri.
Pertama, pastikan Anda memiliki kernel 2.6 dengan dukungan bonding (default di semua distribusi modern) dan Anda telah menginstal ifenslave.
Selanjutnya, masukkan ini ke /etc/rc.local atau tempat lain yang Anda suka, tetapi pastikan itu dijalankan sebelum openvpn dimulai (karena akan mencoba mengikat ke bond0):
Klien:
Anda dapat menambahkan beberapa perutean jika diperlukan di sini, pastikan Anda melakukan semua perutean yang tepat dari sisi lain juga.
Server:
Buat skrip /etc/openvpn/tap-up.sh (dan jangan lupa menandainya dapat dijalankan dengan chmod a + x tap-up.sh):
Selanjutnya, tambahkan bridge0a.conf dan bridge0b.conf ke / etc / openvpn / bersama dengan kunci bersama. File-file tersebut sama untuk a dan b, kecuali untuk port yang berbeda (misalnya, gunakan 3002 untuk b). Ganti 11.22.33.44 dengan IP publik server Anda.
Klien:
Server:
Jangan lupa mengedit / etc / defaults / openvpn untuk memastikan konfigurasi VPN baru Anda dimulai. Mulai ulang komputer Anda, atau muat rc.local dan mulai ulang openvpn secara manual.
Sekarang Anda siap untuk menguji pengaturan Anda:
Jika semuanya berjalan dengan baik dan salurannya bagus, Anda akan melihat empat balasan untuk setiap paket ICMP: paket Anda digandakan di sisi lokal, dan balasan untuk dua paket ini digandakan lagi di sisi yang jauh. Ini tidak akan menjadi masalah untuk koneksi TCP, karena TCP hanya akan mengabaikan semua duplikat.
Ini merupakan masalah untuk paket UDP, karena tergantung pada perangkat lunak untuk menangani duplikat. Misalnya, kueri DNS akan menghasilkan empat balasan alih-alih dua yang diharapkan (dan menggunakan empat kali bandwidth normal untuk respons, bukan dua kali):
Semoga berhasil!
sumber