Tăng tốc OpenVPN với giá 9.99 USD* hoặc tích hợp Orange Pi One vào bộ định tuyến của bạn

Tăng tốc OpenVPN với giá 9.99 USD* hoặc tích hợp Orange Pi One vào bộ định tuyến của bạn

Một số người trong chúng ta không sử dụng Internet mà không có VPN vì lý do này hay lý do khác: ai đó cần một IP chuyên dụng và việc mua VPS có hai IP sẽ dễ dàng và rẻ hơn so với việc mua địa chỉ từ nhà cung cấp, ai đó muốn truy cập tất cả các trang web , và không chỉ những thứ được phép trên lãnh thổ Liên bang Nga, những thứ khác cần IPv6, nhưng nhà cung cấp không cung cấp nó...
Thông thường, kết nối VPN được thiết lập trên chính thiết bị đang được sử dụng tại một thời điểm nhất định, điều này sẽ hợp lý nếu bạn chỉ có một máy tính và một điện thoại và hiếm khi sử dụng chúng cùng một lúc. Nếu có nhiều thiết bị trong mạng gia đình của bạn hoặc chẳng hạn như có một số thiết bị không thể định cấu hình VPN, sẽ thuận tiện hơn nếu tạo một đường hầm trực tiếp trên bộ định tuyến gia đình để không phải nghĩ đến việc thiết lập riêng từng thiết bị .

Nếu bạn đã từng cài đặt OpenVPN trên bộ định tuyến của mình, có lẽ bạn sẽ ngạc nhiên một cách khó chịu về tốc độ hoạt động của nó. SoC của các bộ định tuyến giá rẻ thậm chí có thể vượt qua lưu lượng gigabit mà không gặp vấn đề gì, do việc chuyển các chức năng định tuyến và NAT sang một chip riêng biệt được thiết kế dành riêng cho nhiệm vụ này và bộ xử lý chính của các bộ định tuyến đó khá yếu, bởi vì Thực tế không có tải trọng nào đối với họ. Sự thỏa hiệp này cho phép bạn đạt được tốc độ cao của bộ định tuyến và giảm đáng kể giá của thiết bị hoàn thiện - bộ định tuyến có bộ xử lý mạnh có giá cao hơn nhiều lần và được định vị không chỉ như một hộp phân phối Internet mà còn như một NAS, torrent downloader và hệ thống đa phương tiện gia đình.

Bộ định tuyến của tôi, TP-Link TL-WDR4300, không thể được gọi là mới - model xuất hiện vào giữa năm 2012 và có bộ xử lý kiến ​​​​trúc MIPS560 32Kc 74 MHz, công suất của nó chỉ đủ cho lưu lượng được mã hóa 20-23 Mb/s thông qua OpenVPN, theo tiêu chuẩn. Tốc độ Internet gia đình hiện đại khá thấp.
Làm cách nào chúng ta có thể tăng tốc độ của đường hầm được mã hóa? Bộ định tuyến của tôi hoạt động khá hiệu quả, hỗ trợ 3x3 MIMO và nhìn chung hoạt động tốt, tôi không muốn thay đổi nó.
Vì hiện nay người ta thường tạo các trang Internet 10 megabyte, viết các ứng dụng máy tính để bàn bằng node.js và đóng gói chúng thành một tệp 100 megabyte, tăng sức mạnh tính toán thay vì tối ưu hóa, chúng tôi sẽ làm một điều gì đó khủng khiếp - chúng tôi sẽ chuyển kết nối VPN sang một “máy tính” Orange Pi One một bo mạch hiệu quả mà chúng tôi sẽ cài đặt trong vỏ bộ định tuyến mà không chiếm các cổng mạng và USB hiện có, chỉ với 9.99 USD*!
* + giao hàng, + thuế, + bia, + MicroSD.

OpenVPN

Bộ xử lý của bộ định tuyến không thể được gọi là hoàn toàn yếu - nó có khả năng mã hóa và băm dữ liệu bằng thuật toán AES-128-CBC-SHA1 với tốc độ 50 Mb/s, nhanh hơn đáng kể so với cách OpenVPN hoạt động và luồng CHACHA20 hiện đại mật mã có hàm băm POLY1305 thậm chí còn đạt tới 130 megabit mỗi giây! Tại sao tốc độ của đường hầm VPN lại thấp như vậy? Đó là tất cả về chuyển đổi ngữ cảnh giữa không gian người dùng và không gian hạt nhân: OpenVPN mã hóa lưu lượng và giao tiếp với thế giới bên ngoài trong ngữ cảnh người dùng và quá trình định tuyến tự diễn ra trong ngữ cảnh hạt nhân. Hệ điều hành phải liên tục chuyển đổi qua lại cho mỗi gói được nhận hoặc truyền và thao tác này diễn ra chậm. Vấn đề này cố hữu ở tất cả các ứng dụng VPN chạy qua trình điều khiển TUN/TAP và không thể nói rằng vấn đề tốc độ thấp là do tối ưu hóa OpenVPN kém (mặc dù, tất nhiên, có những chỗ cần phải xử lý lại). Không một máy khách VPN không gian người dùng nào cung cấp dù chỉ một gigabit với tính năng mã hóa bị vô hiệu hóa trên máy tính xách tay của tôi, chứ chưa nói đến các hệ thống có bộ xử lý yếu.

Cam PiOne

Orange Pi One bo mạch đơn của Xunlong là sản phẩm tốt nhất xét về tỷ lệ hiệu suất/giá tại thời điểm hiện tại. Với 9.99 USD*, bạn sẽ có được bộ xử lý lõi tứ ARM Cortex-A7 vững chắc chạy (ổn định) ở tốc độ 1008 MHz và rõ ràng vượt trội so với những người hàng xóm cùng mức giá như Raspberry Pi Zero và Next Thing CHIP. Đây là nơi lợi thế kết thúc. Công ty Xunlong hoàn toàn không chú ý đến phần mềm của bo mạch của mình và vào thời điểm One được tung ra thị trường, họ thậm chí còn không cung cấp tệp cấu hình bo mạch, chưa kể các hình ảnh làm sẵn. Allwinner, một nhà sản xuất SoC, cũng không đặc biệt nhạy cảm trong việc hỗ trợ sản phẩm của mình. Họ chỉ quan tâm đến hiệu suất tối thiểu trong hệ điều hành Android 4.4.4, có nghĩa là chúng tôi buộc phải sử dụng kernel 3.4 với các bản vá Android. May mắn thay, có những người đam mê tập hợp các bản phân phối, chỉnh sửa kernel, viết mã để hỗ trợ các bảng trong kernel chính, tức là. họ thực sự làm việc cho nhà sản xuất, khiến cho công việc tào lao này có thể chấp nhận được. Vì mục đích của mình, tôi đã chọn bản phân phối Armbian; nó được cập nhật thường xuyên và thuận tiện (các hạt nhân mới được cài đặt trực tiếp thông qua trình quản lý gói chứ không phải bằng cách sao chép các tệp vào một phân vùng đặc biệt, như thường thấy với Allwinner), và nó hỗ trợ hầu hết các phiên bản. thiết bị ngoại vi, không giống như những thiết bị khác.

Bộ định tuyến

Để không tải bộ xử lý yếu của bộ định tuyến bằng mã hóa và tăng tốc kết nối VPN, chúng ta có thể chuyển nhiệm vụ này sang vai bộ xử lý Orange Pi mạnh hơn bằng cách kết nối nó với bộ định tuyến theo một cách nào đó. Tôi nghĩ đến việc kết nối qua Ethernet hoặc USB - cả hai tiêu chuẩn này đều được cả hai thiết bị hỗ trợ, nhưng tôi không muốn sử dụng các cổng hiện có. May mắn thay, có một lối thoát.

Chip hub USB GL850G được sử dụng trong bộ định tuyến hỗ trợ 4 cổng USB, trong đó có 4 cổng không có dây. Tôi cho rằng không rõ tại sao nhà sản xuất không hàn chúng lại để ngăn người dùng kết nối XNUMX thiết bị có mức tiêu thụ dòng điện cao (ví dụ: ổ cứng) cùng một lúc. Nguồn điện tiêu chuẩn của bộ định tuyến không được thiết kế cho tải như vậy. Trong mọi trường hợp, đây là lợi thế của chúng tôi.
Tăng tốc OpenVPN với giá 9.99 USD* hoặc tích hợp Orange Pi One vào bộ định tuyến của bạn
Để có được cổng USB khác, bạn chỉ cần hàn hai dây vào chân 8(D-) và 9(D+) hoặc 11(D-) và 12(D+).

Tăng tốc OpenVPN với giá 9.99 USD* hoặc tích hợp Orange Pi One vào bộ định tuyến của bạn

Tuy nhiên, chỉ cắm hai thiết bị USB vào và hy vọng rằng mọi thứ sẽ tự hoạt động như với Ethernet là chưa đủ. Đầu tiên, chúng ta cần làm cho một trong số chúng hoạt động ở chế độ Máy khách USB chứ không phải Máy chủ USB và thứ hai, chúng ta cần quyết định cách các thiết bị sẽ phát hiện lẫn nhau. Có nhiều trình điều khiển cho cái gọi là Tiện ích USB (được đặt tên theo hệ thống con nhân Linux), cho phép bạn mô phỏng nhiều loại thiết bị USB khác nhau: bộ điều hợp mạng, card âm thanh, bàn phím và chuột, ổ đĩa flash, máy ảnh, bảng điều khiển thông qua một cổng nối tiếp. Hải cảng. Vì thiết bị của chúng tôi sẽ hoạt động với mạng nên việc mô phỏng bộ điều hợp Ethernet là tốt nhất cho chúng tôi.

Có ba tiêu chuẩn Ethernet qua USB:

  • NDIS từ xa (RNDIS). Một tiêu chuẩn lỗi thời của Microsoft, được sử dụng chủ yếu trong Windows XP.
  • Mô hình điều khiển Ethernet (ECM). Một tiêu chuẩn đơn giản đóng gói các khung Ethernet trong các gói USB. Rất phù hợp cho các modem có dây có kết nối USB, nơi thuận tiện để truyền khung hình mà không cần xử lý, nhưng do tính đơn giản và những hạn chế của bus USB nên tốc độ không nhanh lắm.
  • Mô hình mô phỏng Ethernet (EEM). Một giao thức thông minh hơn có tính đến các hạn chế của USB và tổng hợp tối ưu nhiều khung thành một, nhờ đó tăng thông lượng.
  • Mô hình điều khiển mạng (NCM). Giao thức mới nhất. Có những lợi ích của EEM và tối ưu hóa hơn nữa trải nghiệm xe buýt.

Như mọi khi, để bất kỳ giao thức nào trong số này hoạt động trên bo mạch của chúng tôi, chúng tôi sẽ phải đối mặt với một số khó khăn. Do Allwinner chỉ quan tâm đến các phần Android của kernel nên chỉ Android Gadget hoạt động bình thường - mã thực hiện giao tiếp với adb, xuất thiết bị qua giao thức MTP và mô phỏng ổ flash trên thiết bị Android. Bản thân Android Gadget cũng hỗ trợ giao thức RNDIS nhưng nó bị hỏng trong nhân Allwinner. Nếu bạn cố gắng biên dịch kernel bằng bất kỳ Tiện ích USB nào khác, thiết bị sẽ không xuất hiện trên hệ thống, bất kể bạn làm gì.
Để giải quyết vấn đề, một cách thân thiện, bạn cần tìm nơi khởi tạo bộ điều khiển USB trong mã của tiện ích Android android.c đã được các nhà phát triển sửa đổi, nhưng cũng có một cách giải quyết là tạo ít nhất mô phỏng Ethernet qua USB hoạt động:

--- sun8i/drivers/usb/sunxi_usb/udc/sunxi_udc.c 2016-04-16 15:01:40.427088792 +0300
+++ sun8i/drivers/usb/sunxi_usb/udc/sunxi_udc.c 2016-04-16 15:01:45.339088792 +0300
@@ -57,7 +57,7 @@
 static sunxi_udc_io_t g_sunxi_udc_io;
 static u32 usb_connect = 0;
 static u32 is_controller_alive = 0;
-static u8 is_udc_enable = 0;   /* is udc enable by gadget? */
+static u8 is_udc_enable = 1;   /* is udc enable by gadget? */
 
 #ifdef CONFIG_USB_SUNXI_USB0_OTG
 static struct platform_device *g_udc_pdev = NULL;

Bản vá này buộc chế độ máy khách USB, cho phép bạn sử dụng các Tiện ích USB thông thường từ Linux.
Bây giờ bạn nên xây dựng lại kernel bằng bản vá này và tiện ích cần thiết. Tôi chọn EEM vì... Theo kết quả thử nghiệm, nó tỏ ra có năng suất cao hơn NCM.
Nhóm Armbian cung cấp hệ thống lắp ráp rất đơn giản và thuận tiện cho tất cả các bảng được hỗ trợ trong bản phân phối. Chỉ cần tải về, cài bản vá của chúng tôi vào userpatches/kernel/sun8i-default/otg.patch, chỉnh sửa một chút compile.sh và chọn tiện ích cần thiết:

Tăng tốc OpenVPN với giá 9.99 USD* hoặc tích hợp Orange Pi One vào bộ định tuyến của bạn

Kernel sẽ được biên dịch thành gói deb, việc cài đặt trên bo mạch sẽ không khó khăn thông qua dpkg.
Tất cả những gì còn lại là kết nối bo mạch qua USB và định cấu hình bộ điều hợp mạng mới của chúng tôi để nhận địa chỉ qua DHCP. Để làm điều này, bạn cần thêm một cái gì đó như sau vào /etc/network/interfaces:

auto usb0
        iface usb0 inet dhcp
        hwaddress ether c2:46:98:49:3e:9d
        pre-up /bin/sh -c 'echo 2 > /sys/bus/platform/devices/sunxi_usb_udc/otg_role'

Tốt hơn là nên đặt địa chỉ MAC theo cách thủ công, vì... nó sẽ ngẫu nhiên mỗi khi khởi động lại thiết bị, điều này bất tiện và rắc rối.
Chúng tôi kết nối cáp MicroUSB với đầu nốiOTG, kết nối nguồn từ bộ định tuyến (nó có thể được cấp cho chân 2 và 3 của lược chứ không chỉ cho đầu nối nguồn).

Tất cả những gì còn lại là cấu hình bộ định tuyến. Chỉ cần cài đặt gói với trình điều khiển EEM và thêm thiết bị mạng USB mới của chúng tôi vào cầu nối của vùng tường lửa cục bộ là đủ:

opkg install kmod-usb-net-cdc-eem

Tăng tốc OpenVPN với giá 9.99 USD* hoặc tích hợp Orange Pi One vào bộ định tuyến của bạn
Để định tuyến tất cả lưu lượng truy cập đến đường hầm VPN, bạn cần thêm quy tắc SNAT vào địa chỉ IP của bo mạch ở phía bộ định tuyến hoặc phân phối địa chỉ của bo mạch dưới dạng địa chỉ cổng thông qua dnsmasq. Việc sau được thực hiện bằng cách thêm dòng sau vào /etc/dnsmasq.conf:

dhcp-option = tag:lan, option:router, 192.168.1.100

đâu 192.168.1.100 - Địa chỉ IP của bảng của bạn. Đừng quên nhập địa chỉ bộ định tuyến vào cài đặt mạng trên bo mạch!

Một miếng bọt biển melamine đã được sử dụng để cách ly các điểm tiếp xúc trên bo mạch khỏi các điểm tiếp xúc của bộ định tuyến. Hóa ra một cái gì đó như thế này:
Tăng tốc OpenVPN với giá 9.99 USD* hoặc tích hợp Orange Pi One vào bộ định tuyến của bạn

Kết luận

Mạng qua USB hoạt động nhanh chóng một cách đáng ngạc nhiên: 100-120 Mb/s, tôi mong đợi ít hơn. OpenVPN truyền khoảng 70 Mb/s lưu lượng được mã hóa, con số này cũng không nhiều lắm nhưng đủ cho nhu cầu của tôi. Nắp bộ định tuyến không đóng chặt, để lại một khe hở nhỏ. Những người có thẩm mỹ có thể loại bỏ các đầu nối Ethernet và USB Host khỏi bo mạch, điều này sẽ cho phép nắp đóng hoàn toàn mà vẫn còn một khoảng trống.
Tốt hơn hết là không nên tham gia vào nội dung khiêu dâm như vậy và mua Turris Omnia.

Nguồn: www.habr.com

Thêm một lời nhận xét