Cảm nhận về Shadowsocks kết hợp với BBR

Shadowsocks là gì?

Ứng dụng proxy dựa trên mã nguồn mở SOCKS5, Shadowsocks là ứng dụng trung gian được thiết kế chủ yếu để vượt qua sự kiểm duyệt. Nó được phát hành lần đầu tiên vào năm 2012 bởi một lập trình viên người Trung Quốc với bút danh “clowwindy”.

Vào năm 2015, lập trình viên này thông báo rằng họ từ bỏ dự án do bị cảnh sát điều tra. Kể từ đó, Shadowsocks đã được phát triển và duy trì bởi nhiều cộng tác viên.

Shadowsocks khác với VPN như thế nào?

Có một điểm tương đồng chính giữa VPN và Shadowsocks, đó là khả năng kết nối bạn với các trang web thường bị giới hạn do kiểm duyệt của chính phủ, địa giới, hoặc bằng các cách khác.

Với mục đích ban đầu là vượt qua Great Firewall của Trung Quốc, Shadowsocks tập trung vào việc phá vỡ các hạn chế về lưu lượng truy cập. Shadowsocks sử dụng HTTP để ẩn lưu lượng truy cập và có thể vượt qua các biện pháp kiểm duyệt tại chỗ.

Không giống như VPN, Shadowsocks không được thiết kế để bảo mật và ẩn danh. Trong khi VPN mã hóa tất cả lưu lượng truy cập khi được kích hoạt, các gói dữ liệu trong Shadowsocks đều “trống” – có nghĩa là chúng không được mã hóa. Mục đích chính của việc này là làm cho dữ liệu của bạn trông giống như lưu lượng truy cập HTTP, để nó có thể được lan truyền mà không có bất kỳ hạn chế nào.

Do sử dụng proxy SOCKS5, Shadowsocks không gửi tất cả lưu lượng truy cập của bạn qua máy chủ, điều này hoàn toàn ngược lại so với VPN. Và trái ngược với các proxy ssh SOCKS5 truyền thống, Shadowsocks hoạt động với nhiều kết nối TCP. Do đó, tốc độ truy cập mạng sẽ nhanh hơn nhiều so với các lựa chọn khác.

Ưu điểm của Shadowsocks

Ưu điểm lớn nhất của Shadowsocks là việc dễ dàng được thiết lập. Công nghệ này là một proxy đơn giản và hữu ích mà không mất nhiều thời gian để thiết lập và là sự lựa chọn hoàn hảo cho việc truy cập vào các nội dung bị giới hạn.

Một lợi ích khác của Shadowsocks là việc ẩn lưu lượng truy cập có lựa chọn của nó. Bạn có thể chọn phần lưu lượng truy cập của bạn bị ảnh hưởng bởi Shadowsocks – điều này giúp bạn có thể truy cập các nội dung bị hạn chế cả bên trong và bên ngoài vị trí của mình.

Ví dụ: bạn đang ở Trung Quốc và bạn muốn truy cập vào GmailBằng cách sử dụng Shadowsocks, bạn có thể chọn lưu lượng truy cập Gmail là “camouflaged”,để bỏ qua việc chặn của chính phủ Trung Quốc.

Tuy nhiên, bạn vẫn có thể truy cập các trang web chỉ có ở Trung Quốc. Ngược lại, VPN sẽ mã hóa tất cả lưu lượng truy cập đến máy chủ bạn đã chọn, do đó các trang web độc quyền của Trung Quốc không thể được truy cập trên cùng một thiết bị.

Điều cuối cùng nhưng không kém phần quan trọng, Shadowsocks rất khó – nếu không phải là không thể – để phát hiện và chặn. Việc ẩn lưu lượng truy cập để làm cho nó xuất hiện như HTTP là lý do chính cho điều đó.

Mặt khác, phương thức hoạt động và sự phổ biến của VPN đã giúp các chính phủ và các nền tảng dễ dàng ngăn chặn công nghệ hoặc buộc các công ty lớn loại bỏ VPN khỏi các cửa hàng của họ (ví dụ như gỡ bỏ ứng dụng VPN của Apple khỏi App Store của Trung Quốc).

Thật sự nếu bạn là người bình thường, sống ở Việt Nam thì chỉ hay nghe nhiều về proxy, socks, vpn, chứ có lẽ ít nghe về Shadowsocks, vâng và mình cũng thế :]] Mình không biết cái quái gì gọi là Shadowsocks cho tới khi google thông tin về cách biến con VPS thành proxy, khi tìm hiểu thêm thì mình thấy khá là hay ho, đơn giản là khi dùng nó, mình có thể chạy max speed đường truyền nhà mạng thông qua con VPS :]]

TCP BBR là gì

Các kĩ sư tại Google vừa giới thiệu thuật toán mới giúp tăng tốc TCP, đây là một giao thức truyền dữ liệu chủ yếu cho traffic Internet. Nó hoạt động dựa vào phương thức tối ưu hóa tốc độ gửi traffic, và từ đó giúp không gây nghẽn đường truyền.

Phương pháp này được gọi là khoảng thời gian truyền băng thông và đường đi nút thắt cổ chai (Bottleneck Bandwidth & Roundtrip - BBR). Nó giúp tìm ra cách nhanh nhất để gửi dữ liệu qua các đường truyền khác nhau, ngoài ra còn hỗ trợ xử lý traffic hiệu quả hơn khi dữ liệu bị nghẽn.

Google cũng sẵn sàng sử dụng BBR để tăng tốc traffic YouTube và cuối tháng, công ty cũng sẽ đưa BBR lên Google Cloud Platform. Google nói rằng áp dụng BBR sẽ tăng tốc traffic hiện đã được tối ưu hóa cao của YouTube thêm trung bình 4% và nhiếu nhất là 14% ở một số nước.

Nói chung là định nghĩa chung là thế, chứ thực tế mình cũng chẳng hiểu BBR nó hoạt động ra làm sao :]] chỉ biết Google làm ra và mình chạy thấy có hiệu quả thì mình cài vào thôi 😀 thực tế khi mình thử trên VPS Vultr chạy các hệ điều hành mới như Ubuntu 17.10 x64 đã thấy họ có cài sẵn BBR vào rồi 😀

OK, đầu tiên bạn hãy nhìn vào các bài Speedtest, ở mỗi bài test trước đó sẽ trình duyệt sẽ xóa cookies, tắt trình duyệt, bật lại 😀

Đầu tiên là test với đường truyền tại nhà, để chạy trực tiếp

FPT Telecom Ho Chi Minh City (http://www.speedtest.net/result/7209293041)
Speedtest.net Amsterdam (http://www.speedtest.net/result/7209293041)
Speedtest.net Dallas, TX (http://www.speedtest.net/result/7209299729)
Speedtest.net Tokyo (http://www.speedtest.net/result/7209303935)

Tiếp theo là thử khi sử dụng Vultr location Japan làm proxy, sử dụng Shadowsocks kết hợp với thuật toán điều khiển tắc nghẽn TCP, BBR từ Google

FPT Telecom Ho Chi Minh City (http://www.speedtest.net/result/7209310236)
Speedtest.net Amsterdam (http://www.speedtest.net/result/7209315911)
Speedtest.net Dallas, TX (http://www.speedtest.net/result/7209319807)
Speedtest.net Tokyo (http://www.speedtest.net/result/7209322867)

Kết quả là giờ ta có một cái đường truyền gần như max tốc độ nhà mạng, download tại khắp mọi nơi trên thế giới đều kịch kim, bù lại ta có 1 cái speed upload thấp cmnl :]]

Sử dụng Shadowsocks chọ ta một kết nối nhanh hơn và ổn định hơn khá nhiều so với sử dụng VPN, tuy thế nên nhớ Shadowsocks sinh ra không phải để giúp bạn an toàn hơn khi online 😀 đơn giản nó sinh ra là vì Trung Quốc yêu cầu các nhà mạng chặn FB, Google các kiểu tởm wá, chúng nó phải viết ra Shadowsocks  nhằm mục đích vào được các trang đó mà thôi 😀

Thực tế mình test qua lại, không hiểu sao khi dùng VPS làm VPN tốc độ khá là thọt, chạy kiểu Shadowsocks thì khá hơn, dù tốc độ upload ở các bài test thấp tè, nhưng khi mình thử upload file lên Youtube vẫn thấy nó max speed, cũng không hiểu tại làm sao luôn

Sự thật thì mình cũng khá bất ngờ về tốc độ mà Shadowsocks và BBR mang lại, chưa khi nào mình thử VPN hay các proxy mà đạt được max speed khi kết nối tới các server ở Châu Âu cả 😀

Để dễ hình dung về Shadowsocks là bạn sẽ có cảm giác rõ ràng mình dùng proxy, nhưng tốc độ vẫn cứ max speed đường truyền nhà bạn 😛 Kết quả tạm thời là thế, mình sẽ bổ xung thêm các kết quả khác về speed, nếu cách này dùng ổn định 😀

Cài đặt

Nên dùng VPS location Singapore, Hong Kong hoặc Japan cho nhanh 😀

Chọn hệ điều hành thì tùy, sao cũng được, có điều ở bài này mình dùng Ubuntu 16.04, nếu dùng Vultr tạo xong có IP nên check thử xem hiện đúng location không, vì như con của mình location Japan, nhưng check toàn hiện là Hong Kong :]] nếu để sử dụng luôn thì nên cố để IP và location giống nhau, vì dùng Shadowsocks IP và location sai, Google dễ hiểu lầm, nó văng popup hỏi “Bạn có phải là người máy không” khá thường 😀

Bạn có thể check IP VPS qua Domaintools hoặc Whatismyipaddress

Ở bài này làm demo thì mình dùng VPS Vultr, location Japan, mình cũng thử chạy qua Amazon EC2 thì thấy cài đặt cũng bình thường, nhớ vào mở hết các port ra là được

Cài đặt Shadowsocks

Login vào root, đầu tiên chạy lệnh bên dưới để update hệ điều hành

sudo apt-get update && sudo apt-get upgrade -y

Tiếp theo chạy:

wget --no-check-certificate -O shadowsocks.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks.sh
chmod +x shadowsocks.sh
./shadowsocks.sh 2>&1 | tee shadowsocks.log

Chú ý là dòng 1 khá dài, nhớ kéo màn hình copy cho hết link 😛
Mặc định nó sẽ hỏi bạn password sau khi gõ lệnh cuối ở trên

#############################################################
# One click Install Shadowsocks-Python server #
# Intro: https://teddysun.com/342.html #
# Author: Teddysun <[email protected]> #
# Github: https://github.com/shadowsocks/shadowsocks #
#############################################################

Please enter password for shadowsocks-python
(Default password: teddysun.com):

Password mặc định là “teddysun.com” hãy điền vào pass bạn thích, xong rồi ấn Enter 😀

Please enter a port for shadowsocks-python [1-65535]
(Default port: 11387):

Port được tạo ngẫu nhiên, như của mình là 11387, điền port khác nếu thích, không thì cứ ấn Enter 😛

Please select stream cipher for shadowsocks-python:
1) aes-256-gcm
2) aes-192-gcm
3) aes-128-gcm
4) aes-256-ctr
5) aes-192-ctr
6) aes-128-ctr
7) aes-256-cfb
8) aes-192-cfb
9) aes-128-cfb
10) camellia-128-cfb
11) camellia-192-cfb
12) camellia-256-cfb
13) chacha20-ietf-poly1305
14) chacha20-ietf
15) chacha20
16) rc4-md5
Which cipher you'd select(Default: aes-256-gcm):

Chọn option thứ 13 là chacha20-ietf-poly1305 😀 (Họ hỗ trợ 16 cơ chế mã hóa, dùng thử thì mình thấy rc4-md5 thuần túy nhanh nhất )

Enter xong thì ngồi chờ nó chạy 1 rừng code các kiểu

Congratulations, Shadowsocks-python server install completed!
Your Server IP        :  xxx.xxx.xxx.xxx
Your Server Port      :  11387
Your Password         :  bibica
Your Encryption Method: chacha20-ietf-poly1305

Welcome to visit:https://teddysun.com/342.html
Enjoy it!

Xong xuôi nó sẽ hiện ra các thông số để bạn nhìn, copy thoái mái 😛 của mình thì như thế

Ok, tiếp theo download file setup để chạy trên máy tính

Shadowsocks for Windows Shadowsocks for Android Shadowsocks for Mac

Mình dùng bản Shadowsocks v4.0.9 cho Windows ở thời điểm viết bài này

Điền vào các thông số như ở trên, chạy thì phải chuột chọn Enable system proxyMode chọn Global, các thứ khác để mặc định, còn bạn nào thích tìm hiểu thêm các setting thì cứ tự nghịch

Mình dùng thì thấy mặc định trình duyệt từ nhận cả rồi, nếu cái nào không tự nhận thì bạn thêm vào phần proxy cho nó, localhost:1080 như setting trong Shadowsocks là được

Vậy là bạn đã có 1 con proxy chuẩn Shadowsocks để dùng rồi 😛

Họ hỗ trợ tới 16 phương thức mã hóa, dùng thì mình thấy rc4-md5 nhanh và ổn nhất, bạn cử mở file config “shadowsocks.json” sửa từng phương thức, dùng thử xem cái nào ổn với nhu cầu của mình là được

nano /etc/shadowsocks.json

Sửa xong restart lại để có hiệu quả

/etc/init.d/shadowsocks restart

Thử xem loại nào ổn, mình thử rc4-md5 là thấy ổn rồi

Trong trường hợp vì lý do nào đó, bạn không muốn dùng nữa, gỡ bỏ ra thì chạy lệnh:

./shadowsocks.sh uninstall

Mỗi cái tốc độ chưa max,  được khoảng 80% tốc độ nhà mạng Việt Nam thôi, cần tối ưu thêm, về mặt lý thuyết các cụm location của Vultr có thể đạt tốc độ cao nhất lên tới ~50MB/s, là vào khoản 400 Mbps, tiếc là mình cũng chưa có cái mạng nào ở đây để thử xem tới được con số đó không

Cài đặt Google BBR và tối ưu hóa VPS

Bước này thì cứ copy, paste là được, chứ mình cũng ếu hiểu mấy cái dòng đó nghĩa là gì đâu :]]

wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
chmod +x bbr.sh
./bbr.sh

Chạy xong 3 dòng code đó nó sẽ hỏi bạn có muốn reboot không, ấn “y” rồi Enter là được

Info: The system needs to reboot.
Do you want to restart system? [y/n]

Login vào lại VPS với quyền root, chạy 2 dòng lệnh bên dưới

lsmod | grep bbr
nano /etc/sysctl.conf

Thêm vào sau dòng “net.ipv4.tcp_congestion_control = bbr” đoạn code bên dưới

fs.file-max = 51200
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 4096
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_mem = 25600 51200 102400
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1

Ctrl + O -> Enter -> Ctrl + X (để save lại file và thoát ra)

Chạy tiếp 2 dòng lệnh bên dưới

sysctl -p
nano /etc/security/limits.conf

Kéo xuống cuối trang thêm vào đoạn code bên dưới

* soft nofile 51200
* hard nofile 51200

Ctrl + O -> Enter -> Ctrl + X (để save lại file và thoát ra)

Chạy tiếp dòng lệnh bên dưới:

nano /etc/pam.d/common-session

Kéo xuống cuối trang thêm vào đoạn code bên dưới

session required pam_limits.so

Ctrl + O -> Enter -> Ctrl + X (để save lại file và thoát ra)

Chạy tiếp dòng lệnh bên dưới:

nano /etc/profile

Kéo xuống cuối trang thêm vào đoạn code bên dưới

ulimit -n 51200

Ctrl + O -> Enter -> Ctrl + X (để save lại file và thoát ra)

Chạy tiếp dòng lệnh bên dưới:

/etc/init.d/shadowsocks restart

Kiểm tra lại tốc độ từ Speedtest 😀

Ta có những con số download max đường truyền nhà mạng Việt Nam 😀

Mình đã thử lại trên 3-4 con VPS, từ Vultr, Amazon …. thì chạy bình thường cả, duy chỉ có UpCloud không rõ họ config sẵn thế nào nhưng thường vào được tí là bị đá ra, chủ yếu do con UpCloud đang dùng làm web chính rồi nên mình cũng không coi kĩ thêm, đa phần vẫn test bên Vultr, VPS họ khỏe, nhanh, ổn định và giá rẻ nữa

Sử dụng cron cho Shadowsocks

Link chi tiết bài viết thì ở trên, nôm na, thi thoảng, vì lý do a,b,c nào đó, Shadowsocks bị lỗi, tự tắt dịch vụ, thế nên tác giả đã viết thêm một cron nhỏ shadowsocks-crond.sh, để khi xảy ra tình trạng thế nó tự khởi động lại dịch vụ

wget --no-check-certificate -O /opt/shadowsocks-crond.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-crond.sh
chmod 755 /opt/shadowsocks-crond.sh
(crontab -l ; echo "*/1 * * * * /opt/shadowsocks-crond.sh") | crontab -

Chạy lần lượt 3 đoạn code đó là được, dòng 1 là cài shadowsocks-crond.sh vào opt, dòng 2 là chmod file đó thành 755, dòng 3 là set nó vào cron của linux

Bạn có thể kiểm tra lại bằng

ps -ef | grep -v grep | grep cron

Thấy nó có hiện ra tiến trình là được

root       840     1  0 Mar18 ?        00:00:02 /usr/sbin/cron -f
root     23108 23077  0 13:18 ?        00:00:00 crond

Kiểm tra tiếp trong crontab

crontab -e

Thấy nó có dòng bên dưới trong crontab là được

*/1 * * * * /opt/shadowsocks-crond.sh

Để kiểm tra file log các tiến trình của Shadowsocks thì bạn có thể chạy dòng bên dưới

cat /var/log/shadowsocks-crond.log

Nó sẽ hiện ra các thông số kiểu

2019-03-25 15:37:01 Shadowsocks is running with pid 1182
2019-03-25 15:38:01 Shadowsocks is running with pid 1182
2019-03-25 15:39:02 Shadowsocks is running with pid 1182
.........

Đoạn sau nói dài thôi, nói chung bạn chạy 3 đoạn code ở trên cùng là được rồi 😀

Tổng kết thì cũng phải dùng 1 thời gian xem  thế nào, chủ yếu vì không rõ mạng nhà FPT mấy hôm nay ra làm sao, bình thường thì chạy vù vù, mà lâu lâu lại đơ đơ, đi thông qua proxy thì lại bình thường, thế nên mới search ra mấy bài này đó chứ :]] Bài gốc ở link đó, phần nhiều mình chỉ là lược dịch 😀

Update 25/03/2019: Bổ xung thêm cron cho Shadowsocks

Comment policy: We love comments and appreciate the time that readers spend to share ideas and give feedback.
Notes: However, those deemed to be spam or solely promotional will be deleted.

You can create a Gravatar account, add avatar, then use that email to comment here, your account will have a more beautiful Avatar, easier to recognize with other members.

Please use real emails, you can receive notifications when comments are replied