OpenVPN hiệu suất thấp. Tôi có vấn đề MTU không? Đổ bên trong


13

Tôi gặp vấn đề với đường hầm OpenVPN không đạt tốc độ đường truyền. Cổng là một máy chủ ảo Debian Jessy được lưu trữ tại OVH. Máy khách là máy chủ gia đình miễn phí 10.2 của tôi (Intel I3 Ivy Bridge) hoặc RaspberryPI2 của tôi. Tôi đã hủy kích hoạt mã hóa và xác thực. Tôi có kết nối FTTH đối xứng 100mbit / s nhưng đường hầm chỉ đạt tốc độ 20-40mbit / s. Kết nối trực tiếp (không có đường hầm) luôn mang lại tốc độ 100mbit / s mà tôi mong đợi. Tôi đã thử nghiệm hiệu suất với iperf3. Lần đầu tiên tôi thử với máy chủ gia đình freebsd của tôi. Tôi đã thử tất cả các cài đặt được đề xuất về mssfix, đoạn, v.v. Không có gì giúp được.

Sau đó tôi nghĩ có lẽ đó là máy freebsd của tôi. Vì vậy, tôi đã cài đặt một Jessy raspbian mới trên RPI2 của mình và thực hiện thêm một số thử nghiệm chuyên sâu:

Trước hết tôi đã xóa tất cả các cài đặt MTU khỏi cấu hình OpenVPN và để đường dẫn MTU xử lý mọi việc (hy vọng). Vì tôi không có tường lửa hoạt động trên cả hai máy nên nó hoạt động. Đây là những cấu hình vpn của tôi:

server 10.8.0.0 255.255.255.0
port 1194
proto udp
dev tun
sndbuf 0
rcvbuf 0

user nobody
group nogroup
persist-key
persist-tun
ifconfig-pool-persist ipp.txt
keepalive 10 120
push "redirect-gateway def1"
status openvpn-status.log
verb 3

ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/vpn.theissen.io.crt
key /etc/openvpn/easy-rsa/keys/vpn.theissen.io.key
dh /etc/openvpn/easy-rsa/keys/dh4096.pem
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
cipher none
auth none
comp-lzo no



client
proto udp
dev tun12
remote xxx.io 1194
resolv-retry infinite
sndbuf 0
rcvbuf 0

nobind
user nobody
group nogroup
persist-key
persist-tun
verb 3

pkcs12 /etc/openvpn/vpn.theissen.io/alex.p12
tls-auth /etc/openvpn/vpn.theissen.io/ta.key 1
ns-cert-type server
cipher none
auth none
comp-lzo no

Trước hết, thử nghiệm không có đường hầm để chỉ ra rằng kết nối đến máy chủ thực sự là gần 100mbit / s:

iperf3 -c vpn.theissen.io
Connecting to host vpn.theissen.io, port 5201
[  4] local 192.168.1.253 port 34512 connected to 149.202.58.183 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec  10.8 MBytes  90.5 Mbits/sec    0    335 KBytes       
[  4]   1.00-2.00   sec  11.4 MBytes  95.7 Mbits/sec    0    335 KBytes       
[  4]   2.00-3.00   sec  11.1 MBytes  93.0 Mbits/sec    0    352 KBytes       
[  4]   3.00-4.00   sec  11.2 MBytes  94.0 Mbits/sec    0    369 KBytes       
[  4]   4.00-5.00   sec  11.5 MBytes  95.9 Mbits/sec    0    390 KBytes       
[  4]   5.00-6.00   sec  11.0 MBytes  92.5 Mbits/sec    0    390 KBytes       
[  4]   6.00-7.00   sec  11.4 MBytes  95.2 Mbits/sec    0    390 KBytes       
[  4]   7.00-8.00   sec  11.2 MBytes  94.3 Mbits/sec    0    390 KBytes       
[  4]   8.00-9.00   sec  11.1 MBytes  93.3 Mbits/sec    0    390 KBytes       
[  4]   9.00-10.00  sec  11.3 MBytes  95.1 Mbits/sec    0    390 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec   112 MBytes  93.9 Mbits/sec    0             sender
[  4]   0.00-10.00  sec   112 MBytes  93.5 Mbits/sec                  receiver

iperf Done.

Các gói của kết nối này tôi đã kết xuất với tcpdump trên máy chủ. Bạn có thể tải chúng xuống đây (bạn phải giải nén để mở chúng bằng wireshark): dumpraw.cap.xz

Vì vậy, đây là cách một bãi chứa "OK" trông như thế nào. Kích thước khung hình tối đa tôi phát hiện là 1514. Đổ iperf3 không có đường hầm

Bây giờ tôi đã chạy thử qua đường hầm:

iperf3 -c 10.8.0.1
Connecting to host 10.8.0.1, port 5201
[  4] local 10.8.0.14 port 36388 connected to 10.8.0.1 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec  5.96 MBytes  50.0 Mbits/sec  127    133 KBytes       
[  4]   1.00-2.00   sec  5.19 MBytes  43.5 Mbits/sec    6    120 KBytes       
[  4]   2.00-3.00   sec  5.80 MBytes  48.7 Mbits/sec    0    151 KBytes       
[  4]   3.00-4.00   sec  4.27 MBytes  35.9 Mbits/sec   23   96.5 KBytes       
[  4]   4.00-5.00   sec  4.89 MBytes  41.0 Mbits/sec    0    129 KBytes       
[  4]   5.00-6.00   sec  6.11 MBytes  51.2 Mbits/sec   26    111 KBytes       
[  4]   6.00-7.00   sec  5.50 MBytes  46.1 Mbits/sec    0    143 KBytes       
[  4]   7.00-8.00   sec  5.25 MBytes  44.1 Mbits/sec   15    126 KBytes       
[  4]   8.00-9.00   sec  5.80 MBytes  48.7 Mbits/sec    0    158 KBytes       
[  4]   9.00-10.00  sec  3.97 MBytes  33.3 Mbits/sec   22    105 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  52.7 MBytes  44.2 Mbits/sec  219             sender
[  4]   0.00-10.00  sec  52.3 MBytes  43.8 Mbits/sec                  receiver

iperf Done.

Rất tiếc. Không còn đẹp nữa. Đặc biệt là cột "Retr" này trông không được tốt lắm. Tôi giả sử đây là truyền lại tcp và sau đó sẽ có một cái gì đó trong bãi chứa. Chúng ta sẽ thấy rằng đó không phải là trường hợp: /. CPU không phải là nút cổ chai ở đây vì tôi đã hủy kích hoạt và xác thực. CPU ở mức 20% tại máy chủ và 50% trên PI trong quá trình thử nghiệm.

Đây là cách lưu lượng OpenVPN của thử nghiệm trông như thế nào: Lưu lượng OpenVPN trên giao diện vật lý

Đối với tôi điều này có vẻ ổn. Nhưng tôi không biết phải tìm gì. Xin hãy xem bãi rác với wireshark: dump_physical.cap.xz

Giao thông trên giao diện đường hầm cũng tốt đối với tôi. Có vẻ như anh ta đã hạ chính xác kích thước khung hình (xuống 1444 như có vẻ): lưu lượng iperf3 trên giao diện đường hầm

Đây là bãi chứa: dump_tunnel.cap.xz

Đối với tôi điều này có vẻ ổn nhưng tôi thực sự không biết phải tìm gì chính xác. Tôi thực sự đã thử nghiệm mọi thứ với cài đặt OpenVPN. Có lẽ ai đó có thể cho tôi biết nếu giao thông có vẻ ổn.

Những gì tôi mong đợi như một câu trả lời

Ít nhất là một lời giải thích những gì đang xảy ra ở đây và tại sao nó dường như độc lập với phần mềm VPN mà tôi sử dụng. Tất cả những gì tôi tìm thấy trên internet là về các vấn đề MTU nhưng điều đó nên được khắc phục dễ dàng bằng cách giảm MTU đường hầm hoặc các tham số khác của OpenVPN. Đối với tôi điều này thay đổi ít. Khi bạn nhìn vào bãi chứa, bạn thấy rằng nó làm giảm kích thước phân đoạn tcp và các gói không bị phân mảnh. Phải có một cái gì đó khác. Tôi thực sự muốn biết những gì .

Cập nhật

Tôi đã thử nghiệm điều này với Strongswan và thậm chí với softether. Đây thực sự là một vấn đề tương tự (tốc độ tương đương, không có nút cổ chai cpu). Tôi thực sự bối rối vấn đề ở đây là gì. Tôi cũng đã thử một cổng khác (RaspberryPi2 trên kết nối nhà 100/100 của bạn bè).

Cập nhật 2

Tôi nhận thấy rằng iperf3 báo cáo tcp truyền lại (lấy) nhưng không có truyền lại trong kết xuất (Wireshark nên làm nổi bật chúng). Chuyện gì đang xảy ra vậy?

Tôi thậm chí đã thử OpenVPN trên Mạng cục bộ của mình (RaspberryPi2 đến FreebsdServer). Ngay cả ở đó tôi cũng có rất nhiều truyền lại (trên mạng LAN?!):

Connecting to host 192.168.222.11, port 5201
[  4] local 192.168.222.10 port 46196 connected to 192.168.222.11 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec  9.19 MBytes  77.0 Mbits/sec    8    141 KBytes       
[  4]   1.00-2.00   sec  8.71 MBytes  73.1 Mbits/sec    3    130 KBytes       
[  4]   2.00-3.00   sec  8.59 MBytes  72.0 Mbits/sec    3    120 KBytes       
[  4]   3.00-4.00   sec  8.65 MBytes  72.5 Mbits/sec    4    108 KBytes       
[  4]   4.00-5.00   sec  8.65 MBytes  72.5 Mbits/sec    4   95.6 KBytes       
[  4]   5.00-6.00   sec  8.52 MBytes  71.5 Mbits/sec    2   80.5 KBytes       
[  4]   6.00-7.00   sec  8.83 MBytes  74.1 Mbits/sec    0    141 KBytes       
[  4]   7.00-8.00   sec  8.59 MBytes  72.0 Mbits/sec    7    106 KBytes       
[  4]   8.00-9.00   sec  8.71 MBytes  73.1 Mbits/sec    3   94.2 KBytes       
[  4]   9.00-10.00  sec  8.59 MBytes  72.0 Mbits/sec    3   79.2 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  87.0 MBytes  73.0 Mbits/sec   37             sender
[  4]   0.00-10.00  sec  86.8 MBytes  72.8 Mbits/sec                  receiver

Ở chế độ đảo ngược, tôi có một cửa sổ tắc nghẽn thực sự kỳ lạ (wtf?):

Accepted connection from 192.168.222.10, port 46197
[  5] local 192.168.222.11 port 5201 connected to 192.168.222.10 port 46198
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  5]   0.00-1.00   sec  8.90 MBytes  74.7 Mbits/sec    3   1.48 GBytes       
[  5]   1.00-2.00   sec  8.45 MBytes  70.9 Mbits/sec    2   1.59 GBytes       
[  5]   2.00-3.00   sec  8.66 MBytes  72.7 Mbits/sec  518    214 MBytes       
[  5]   3.00-4.00   sec  7.96 MBytes  66.8 Mbits/sec   37    703 MBytes       
[  5]   4.00-5.00   sec  8.09 MBytes  67.9 Mbits/sec    0    719 MBytes       
[  5]   5.00-6.00   sec  8.04 MBytes  67.5 Mbits/sec    0    734 MBytes       
[  5]   6.00-7.00   sec  8.07 MBytes  67.7 Mbits/sec    1    703 MBytes       
[  5]   7.00-8.00   sec  8.07 MBytes  67.7 Mbits/sec    1    703 MBytes       
[  5]   8.00-9.00   sec  7.99 MBytes  67.1 Mbits/sec    2    693 MBytes       
[  5]   9.00-10.00  sec  8.06 MBytes  67.6 Mbits/sec    1    693 MBytes       
[  5]  10.00-10.09  sec   684 KBytes  64.5 Mbits/sec    0    695 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  5]   0.00-10.09  sec  83.0 MBytes  69.0 Mbits/sec  565             sender
[  5]   0.00-10.09  sec  0.00 Bytes  0.00 bits/sec                  receiver

Cập nhật 3

Sử dụng iperf với kết quả udp trong việc chặn tạm thời cổng đó (họ gửi cho tôi một email thông báo cho tôi về một cuộc tấn công) và mất gói lớn:

-----------------------------------------------------------
Server listening on 1194
-----------------------------------------------------------
Accepted connection from 185.22.143.160, port 15906
[  5] local 149.202.58.183 port 1194 connected to 185.22.143.160 port 4355
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  5]   0.00-1.00   sec  2.89 MBytes  24.2 Mbits/sec  0.727 ms  1017/1387 (73%)  
iperf3: OUT OF ORDER - incoming packet = 1409 and received packet = 1470 AND SP = 5
iperf3: OUT OF ORDER - incoming packet = 1410 and received packet = 1471 AND SP = 5
iperf3: OUT OF ORDER - incoming packet = 1411 and received packet = 1472 AND SP = 5
iperf3: OUT OF ORDER - incoming packet = 1445 and received packet = 1473 AND SP = 5
iperf3: OUT OF ORDER - incoming packet = 1463 and received packet = 1473 AND SP = 5
[  5]   1.00-2.00   sec  3.29 MBytes  27.6 Mbits/sec  0.716 ms  1110/1526 (73%)  
[  5]   2.00-3.00   sec  3.30 MBytes  27.7 Mbits/sec  0.732 ms  1103/1526 (72%)  
[  5]   3.00-4.00   sec  3.27 MBytes  27.4 Mbits/sec  0.717 ms  1108/1526 (73%)  
[  5]   4.00-5.00   sec  1.56 MBytes  13.1 Mbits/sec  0.837 ms  546/746 (73%)  
[  5]   5.00-6.00   sec  0.00 Bytes  0.00 bits/sec  0.837 ms  0/0 (-nan%)  
[  5]   6.00-7.00   sec  0.00 Bytes  0.00 bits/sec  0.837 ms  0/0 (-nan%)  
[  5]   7.00-8.00   sec  0.00 Bytes  0.00 bits/sec  0.837 ms  0/0 (-nan%)  
[  5]   8.00-9.00   sec  0.00 Bytes  0.00 bits/sec  0.837 ms  0/0 (-nan%)  
[  5]   9.00-10.00  sec  0.00 Bytes  0.00 bits/sec  0.837 ms  0/0 (-nan%)  
[  5]  10.00-10.06  sec  0.00 Bytes  0.00 bits/sec  0.837 ms  0/0 (-nan%)  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  5]   0.00-10.06  sec   118 MBytes  98.5 Mbits/sec  0.837 ms  4884/6711 (73%)  
[SUM]  0.0-10.1 sec  4884 datagrams received out-of-order

1
Nếu bạn chưa làm, tôi có thể thử: tun-mtu 9000 fragment 0 mssfix 0(các tùy chọn cần được thêm vào trong ba dòng khác nhau)
Diamant

Tôi đã thử nghiệm điều đó. Nhưng tôi đã thử nghiệm lại. Điều gì đã xảy ra là nó bắt đầu với cùng tốc độ nhưng sau đó các kết nối bị đình trệ. Nhân tiện, điều này luôn xảy ra khi tôi vô hiệu hóa phân mảnh gói OpenVPN. Hướng dẫn này Community.openvpn.net/openvpn/wiki/Gigabit_Networks khiến bạn nghĩ rằng HĐH nên xử lý nhưng rõ ràng là không.
Alexander Theißen

Tuyệt vời. Tôi đang thấy chính xác hành vi tương tự trên VPN của mình và tôi có phần cứng mạnh mẽ ở cả hai đầu và kết nối internet chậm hơn. Tôi sẽ điều tra thêm; nếu tôi tìm thấy bất cứ điều gì cụ thể tôi sẽ gửi lại ở đây.
Harald

1
Nếu tôi chuyển đổi thử nghiệm của mình sang UDP (iperf3 -u -b 25m), tôi sẽ có được tốc độ đầy đủ cả bên trong và bên ngoài đường hầm openvpn. Tôi đã xác nhận rằng không có sự phân mảnh khi sử dụng TCP - openvpn đang báo cáo chính xác một MSS nhỏ, các gói tcp của tôi bên trong đường hầm là tất cả 1354 byte và các gói UDP không bị phân mảnh. Tôi đang thấy hiện tượng giống như bạn - các giá trị CWND bên trong đường hầm bằng khoảng một nửa so với bên ngoài đường hầm và thông lượng cũng bằng một nửa, nhưng tôi không thể giải thích được tại sao . Hấp dẫn.
Harald

1
Được rồi, lời xin lỗi của tôi đã tạo ra hy vọng sai lầm. Cố gắng loại bỏ toàn bộ các biến, tôi thiết lập OpenVPN với cùng tham số cấu hình, chạy trên mạng LAN cục bộ của mình. Bên ngoài đường hầm, 750Mbps. Bên trong đường hầm, 117Mbps. Nhưng - openvpn đã tiêu thụ 100% lõi CPU trên cả hai điểm cuối. Vì vậy, sau đó tôi đã chuyển điểm cuối tại nhà của đường hầm Internet của mình sang máy chủ "thực" và thấy tốc độ 25Mb / giây dự kiến ​​thông qua đường hầm của tôi. OpenVPN trên cả hai điểm cuối đã tiêu tốn khoảng 20% ​​CPU. Câu chuyện dài - trong trường hợp của tôi, vấn đề là điểm cuối đường hầm nhà của tôi bị ràng buộc CPU. Lấy làm tiếc!
Harald

Câu trả lời:


2

Đối với người mới bắt đầu, đường chạy iperf bên ngoài đường hầm 'bình thường' của bạn phải là UDP / 1194 là luồng mà bạn gặp sự cố và không phải là TCP / 5201. Trước tiên hãy thử với -b 100M nhưng hãy nhớ rằng điều này sẽ tạo ra các datagram có kích thước tối đa không đại diện cho lưu lượng VPN của bạn (kích thước datagram nên được sắp xếp ngẫu nhiên). Điều chỉnh với tùy chọn -l cho kích thước datagram và kiểm tra kết quả. Nếu kết quả không tốt (tôi muốn mất> 15 hoặc 20%), bạn có thể nghi ngờ bộ định tuyến Internet bị quá tải đang làm rơi các gói (có thể là nỗ lực tốt nhất) của bạn.

Ngoài ra, thật thú vị khi xem hiệu suất bạn nhận được nếu bạn chuyển đường hầm VPN của mình sang cổng UDP của Lớp EF (Tôi muốn nói là 5061 vì RTP, nhưng không thực sự chắc chắn rằng tất cả các bộ định tuyến internet đã cấu hình đúng QoS) hoặc bất kỳ Cổng TCP.

Đối với tôi, không có gì sai với thiết lập của bạn và chẩn đoán của bạn không hiển thị bất cứ điều gì lạ. Ngoài ra, hãy thử phiên bản khác của OpenVPN hoặc phần mềm VPN khác.


Đã làm điều đó. Nhìn vào update3. Chờ cho ovh bỏ chặn cổng để tiến hành kiểm tra thêm.
Alexander Theißen

À, xin lỗi, đã không thấy bản cập nhật cuối cùng đó. Trong khi chờ OVH thử gắn VPN của bạn qua TCP; kết quả là gì Cũng về chỉnh sửa thứ hai của bạn và truyền lại từ * BSD sang PI; bạn đã chơi với bộ đệm máy chủ của iperf chưa? Đó là mặc định 8kb, không biết stack được tạo ra như thế nào trên ARM và Linux nhưng tôi cho rằng việc tăng nó có thể giúp ích.
30gd4n

Tôi có nghĩa là tôi đã thêm nó sau khi bạn nói với tôi :). Kết quả trên tcp là tồi tệ hơn. Tcp 443 không tạo ra sự khác biệt. Điều buồn cười là khi tôi sử dụng github.com/seels/speedtest-cli này để kiểm tra, nó báo cáo xuống 95m và tăng 75m. Tôi tin tưởng iperf hơn nhưng nó thực sự phụ thuộc vào loại lưu lượng truy cập. Playstation4 cũng mất nhiều thời gian hơn để tải xuống các trò chơi hoặc các bản vá trên đường hầm. Khi về nhà tôi sẽ làm một đường hầm trực tiếp giữa hai Rbps ở các vị trí khác nhau nhưng sử dụng cùng một isp. Tôi đã làm điều đó trước đây và kết quả gần như giống nhau. Nhưng tôi cố gắng làm thêm xét nghiệm.
Alexander Theißen 7/03/2016
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.