Saya mengalami kecepatan transfer OpenVPN yang sangat lambat antara dua server. Untuk pertanyaan ini, saya akan memanggil server Server A dan Server B.
Server A dan Server B menjalankan CentOS 6.6. Keduanya terletak di pusat data dengan garis 100Mbit dan transfer data antara dua server di luar OpenVPN berjalan hampir ~ 88Mbps.
Namun, ketika saya mencoba mentransfer file apa pun melalui koneksi OpenVPN yang telah saya buat antara Server A dan Server B, saya mendapatkan throughput yang benar sekitar 6,5Mbps.
Hasil tes dari iperf:
[ 4] local 10.0.0.1 port 5001 connected with 10.0.0.2 port 49184
[ 4] 0.0-10.0 sec 7.38 MBytes 6.19 Mbits/sec
[ 4] 0.0-10.5 sec 7.75 MBytes 6.21 Mbits/sec
[ 5] local 10.0.0.1 port 5001 connected with 10.0.0.2 port 49185
[ 5] 0.0-10.0 sec 7.40 MBytes 6.21 Mbits/sec
[ 5] 0.0-10.4 sec 7.75 MBytes 6.26 Mbits/sec
Selain dari tes iperf OpenVPN ini, kedua server ini hampir sepenuhnya kosong tanpa beban.
Server A diberikan IP 10.0.0.1 dan itu adalah server OpenVPN. Server B diberi IP 10.0.0.2 dan itu adalah klien OpenVPN.
Konfigurasi OpenVPN untuk Server A adalah sebagai berikut:
port 1194
proto tcp-server
dev tun0
ifconfig 10.0.0.1 10.0.0.2
secret static.key
comp-lzo
verb 3
Konfigurasi OpenVPN untuk Server B adalah sebagai berikut:
port 1194
proto tcp-client
dev tun0
remote 204.11.60.69
ifconfig 10.0.0.2 10.0.0.1
secret static.key
comp-lzo
verb 3
Apa yang saya perhatikan:
1. Pikiran pertama saya adalah bahwa saya bottlenecking CPU di server. OpenVPN adalah single-threaded dan kedua server ini menjalankan prosesor Intel Xeon L5520 yang bukan yang tercepat. Namun, saya menjalankan top
perintah selama salah satu tes iperf dan menekan 1
untuk melihat pemanfaatan CPU oleh inti dan menemukan bahwa beban CPU sangat rendah pada setiap inti:
top - 14:32:51 up 13:56, 2 users, load average: 0.22, 0.08, 0.06
Tasks: 257 total, 1 running, 256 sleeping, 0 stopped, 0 zombie
Cpu0 : 2.4%us, 1.4%sy, 0.0%ni, 94.8%id, 0.3%wa, 0.0%hi, 1.0%si, 0.0%st
Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 0.0%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.3%st
Cpu3 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu4 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu5 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu6 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu7 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu8 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu9 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu10 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu11 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu12 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu13 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu14 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu15 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 946768k total, 633640k used, 313128k free, 68168k buffers
Swap: 4192188k total, 0k used, 4192188k free, 361572k cached
2. Waktu ping meningkat jauh di atas terowongan OpenVPN saat iperf berjalan. Ketika iperf tidak berjalan, waktu ping di atas terowongan secara konsisten 60ms (normal). Tetapi ketika iperf berjalan dan mendorong lalu lintas yang padat, waktu ping menjadi tidak menentu. Anda dapat melihat di bawah ini bagaimana waktu ping stabil hingga ping ke-4 ketika saya memulai tes iperf:
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=60.1 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=60.1 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=60.2 ms
** iperf test begins **
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=146 ms
64 bytes from 10.0.0.2: icmp_seq=5 ttl=64 time=114 ms
64 bytes from 10.0.0.2: icmp_seq=6 ttl=64 time=85.6 ms
64 bytes from 10.0.0.2: icmp_seq=7 ttl=64 time=176 ms
64 bytes from 10.0.0.2: icmp_seq=8 ttl=64 time=204 ms
64 bytes from 10.0.0.2: icmp_seq=9 ttl=64 time=231 ms
64 bytes from 10.0.0.2: icmp_seq=10 ttl=64 time=197 ms
64 bytes from 10.0.0.2: icmp_seq=11 ttl=64 time=233 ms
64 bytes from 10.0.0.2: icmp_seq=12 ttl=64 time=152 ms
64 bytes from 10.0.0.2: icmp_seq=13 ttl=64 time=216 ms
3. Seperti yang disebutkan di atas, saya menjalankan iperf di luar terowongan OpenVPN dan throughputnya normal - ~ 88Mbps secara konsisten.
Apa yang saya coba:
1. Saya pikir kompresi mungkin mengotori segalanya, jadi saya mematikan kompresi dengan menghapus comp-lzo
dari kedua konfigurasi dan memulai kembali OpenVPN. Tidak ada perbaikan.
2. Meskipun saya sebelumnya menemukan bahwa utilisasi CPU rendah, saya pikir cipher default mungkin sedikit terlalu intensif untuk dapat diikuti oleh sistem. Jadi saya menambahkan cipher RC2-40-CBC
ke kedua konfigurasi (cipher yang sangat ringan) dan memulai kembali OpenVPN. Tidak ada perbaikan.
3. Saya membaca di berbagai forum tentang bagaimana mengubah fragmen, mssfix dan mtu-tun dapat membantu kinerja. Saya bermain dengan beberapa variasi seperti yang dijelaskan dalam artikel ini , tetapi sekali lagi, tidak ada peningkatan.
Adakah ide tentang apa yang dapat menyebabkan kinerja OpenVPN yang buruk?
cipher none
meskipun saya ragu itu akan membantu.Jawaban:
Setelah banyak Googling dan konfigurasi tweak file, saya menemukan solusinya Saya sekarang mendapatkan kecepatan berkelanjutan 60Mbps dan meledak hingga 80Mbps. Ini sedikit lebih lambat daripada kecepatan transfer yang saya terima di luar VPN, tapi saya rasa ini akan sebagus yang didapat.
Langkah pertama adalah mengatur
sndbuf 0
danrcvbuf 0
dalam konfigurasi OpenVPN untuk server dan klien.Saya membuat perubahan itu setelah melihat saran untuk melakukannya pada posting forum publik (yang merupakan terjemahan bahasa Inggris dari posting asli Rusia ) yang akan saya kutip di sini:
Penulis selanjutnya menjelaskan cara mendorong penyesuaian ukuran buffer ke klien jika Anda tidak mengendalikan konfigurasi klien sendiri.
Setelah saya melakukan perubahan itu, laju throughput saya mencapai 20Mbps. Saya kemudian melihat bahwa utilisasi CPU sedikit tinggi pada satu inti jadi saya menghapus
comp-lzo
(kompresi) dari konfigurasi pada klien dan server. Eureka! Kecepatan transfer melonjak hingga 60Mbps berkelanjutan dan 80Mbps meledak.Saya harap ini membantu orang lain menyelesaikan masalah mereka sendiri dengan kelambatan OpenVPN!
sumber
Setelah beberapa kali mencoba, saya telah mencapai solusi yang baik. Dalam kasus saya, jawaban @ Elliot tidak membantu. Googling lebih lanjut, saya menemukan potongan ini untuk menambahkan konfigurasi server yang membuat pekerjaan
Saya memiliki server OpenVPN kecil yang berjalan pada Raspberry PI3 dan sekarang saya mendapatkan 71 Mbps downlink dan 16Mbps uplink . Pengunduhan terbatas karena kekuatan CPU. Saat ini, konfigurasi saya adalah sebagai berikut:
OpenVPN 2.4.0 arm-unknown-linux-gnueabihf dengan OpenSSL 1.0.2l
Rasanya sangat aneh sehingga masalah tentang konfigurasi default buffer masih ada.
[EDIT] File client.ovpn saya terstruktur seperti ini:
sumber
Menurut Config, Anda menggunakan TCP sebagai transportasi untuk Tunnel. Pertimbangkan untuk menggunakan UDP daripada TCP karena koneksi TCP yang ditumpuk membuat masalah dalam situasi packet loss.
Sebagai referensi, lihat Mengapa TCP Lebih dari TCP Adalah Ide Buruk
sumber
We need to ensure that the data packets we transmit arrive as expected.
dan bukankah itu ditangani oleh protokol yang sedang digali? Menurut Anda mengapa terowongan Anda perlu menjadi hal yang menegakkan itu?Kami memiliki dua server antarbenua yang terhubung satu sama lain, kecepatan di antara mereka berkisar sekitar 220 Mbit / s.
Di dalam terowongan OpenVPN (UDP), kecepatan rata-rata 21 Mbit / dtk - sekitar 10x lebih lambat.
(Ada latensi yang signifikan antara server: sekitar 130 ms, dan transfer diukur menggunakan Iperf3 dalam mode TCP.)
Sudah mencoba semua saran jawaban di sini pada tulisan ini, dan tidak ada yang membantu.
Satu hal yang akhirnya membantu adalah sedikit ini:
Menurut manual referensi OpenVPN:
Setelah mengatur parameter ini di server dan klien, saya dapat mencapai kecepatan 'tautan langsung' yang sama (~ 250Mbit / dtk) juga di bawah terowongan OpenVPN.
Saya sudah menggunakan
rcvbuf 0
dansndbuf 0
, tapi setidaknya sendirian , mereka tidak membantu sama sekali.Saya telah menemukan rekomendasi ini di keduanya: halaman ini di forum OpenVPN , dan juga di halaman ini di wiki UDPspeeder .
Pada catatan lain: Saya dapat mencapai kecepatan yang lebih tinggi menggunakan transfer UDP di iperf, tetapi melakukan hal itu juga akan menimbulkan paket-loss yang cukup tinggi.
Jika kebetulan Anda perlu menggunakan VPN untuk menggali dua tempat dengan tautan yang hilang, saya sarankan untuk mempertimbangkan menggunakan semacam terowongan Forward-Error-Correction (FEC) di bawah VPN itu sendiri. Dua yang berhasil saya temukan dan bekerja adalah:
Keduanya dapat banyak membantu dengan packetloss (dengan menghabiskan lebih banyak bandwidth di tempat pertama), dan akhirnya bahkan mengarah ke throughput data yang lebih tinggi, bahkan dengan overhead tambahan, yang benar-benar rapi jika Anda bertanya kepada saya.
(Itu karena packet-loss benar-benar dapat mengacaukan jaringan , khususnya TCP . Lihat halaman 6.)
Saya lebih suka menggunakan OpenVPN pada UDP, untuk semua alasan yang biasa, tetapi saya merasa sulit untuk berurusan dengan UDPspeeder ketika Anda memiliki latensi lebih dari 100 ms &> 10 Mbit / s.
Namun kcptun bekerja dengan sangat baik dengan sedikit penyesuaian, dan sebenarnya benar - benar meningkatkan throughput server kami satu sama lain. =)
Pada catatan yang diperluas, di sini Anda dapat menemukan beberapa penjelasan yang lebih terperinci tentang men-tweak beberapa bagian kinerja OpenVPN.
sumber
Bagi saya, saya memiliki server VPS dengan pengaturan server openvpn di Jepang dan koneksi klien saya menggunakan DDWRT dalam mode klien OpenVPN di NYC. Saya hanya mendapatkan 1-2mbps pada koneksi 100mbit. Yang terbaik yang saya bisa mengoptimalkannya adalah 5mbps yang cukup untuk apa yang saya butuhkan yang dioptimalkan karena saya bisa membuatnya saya percaya.
Pengaturan server OpenVPN saya:
Pengaturan klien DDWRT OpenVPN saya juga terlihat di tangkapan layar saya:
sumber