Tự dựng proxy để truy cập web nước ngoài nhanh hơn

Mấy bữa nay, nghe đâu cáp Internet đại dương lại bị đứt, khiến việc truy cập website nước ngoài rất khó khăn. Tuy nhiên đường truyền tại các datacenter trong nước thì vẫn nhanh như lũ về, cho nên nếu đi ké được qua đường truyền này thì ngon. Ta có thể làm việc ấy bằng cách tự dựng proxy, để "bẻ lái" đường truy cập từ nhà đến datacenter rồi từ datacenter ra thế giới.

Trước tiên, phải nhắc nhở rằng bài hướng dẫn này không dành cho tất cả mọi người, mà nó dành cho "nhà có điều kiện". "Điều kiện" ấy là bạn phải có một server trong nước. Bạn có thể tự thuê cá nhân hay xài ké server công ty. Và như thường lệ, bài hướng dẫn này áp dụng cho hệ điều hành Linux, cụ thể là Ubuntu 20.04.

Phía server

Để nói cụ thể hơn thì phần mềm proxy mà ta sẽ dùng thuộc thể loại HTTP proxy, tức là nó chỉ chuyển hướng các truy cập website (giao thức HTTP/HTTPS). Các phần mềm game, chat dùng giao thức riêng thì sẽ phải dùng các loại proxy khác.

Trên server, ta sẽ cài phần mềm Dante.

sudo apt install -y dante-server

Để tránh việc proxy của ta bị người lạ xài ké thì ta sẽ cấu hình sao cho chỉ ai có được mật khẩu mới được quyền xài. Để việc setup ngắn gọn, tôi sẽ tận dụng user của HĐH cho việc xác thực proxy. Ta sẽ tạo một user tên sugia trong Ubuntu:

sudo adduser sugia

Sau đó mở file /etc/danted.conf để cấu hình cho Dante.

Tìm tới dòng

#internal: eth0 port = 1080

ta thay eth0 bằng tên cổng Ethernet của server và xóa dấu comment (#) đi. Ta có thể xem danh sách các cổng mạng bằng lệnh ip -c a. Ví dụ trên máy tôi thì sẽ sửa thành:

internal: ens18 port = 1080

Tìm tới dòng

#external: 192.168.1.1

và thay địa chỉ IP bằng tên cổng mạng phía trên. Ví dụ trên máy tôi thì sửa thành:

external: ens18

Tìm đến dòng:

#socksmethod: pam

và sửa thành:

socksmethod: pam.username

(lí do, file cấu hình mẫu dựa trên phiên bản cũ của Dante. Phiên bản v1.4 trên Ubuntu 20.04 đòi giá trị "pam.username" thay vì "pam". Cụ thể hóa như vầy, biết đâu sau này Dante hỗ trợ phương pháp xác thực bằng vân tay thì sao nhỉ).

Xuống đến cuối file, thêm các dòng sau:

client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    # log: connect error
}

socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    # log: connect error
    socksmethod: pam.username
}

Lưu ý: Vì ta đang tận dụng tài khoản người dùng Linux làm tài khoản sử dụng proxy, ta cần tắt chức năng xác thực SSH bằng mật khẩu (chỉ cho xác thực bằng public key), nếu không, lỡ username & password bị rò rỉ, sẽ có người lợi dụng truy cập vào server qua đường SSH.

Phía người dùng

Không phải website nào cũng cần phải lái qua proxy. Nếu có website nào truy cập trực tiếp vẫn đủ nhanh thì ta vẫn cứ nên truy cập trực tiếp, để đỡ gánh nặng cho proxy. Để có thể cấu hình linh hoạt thì ta sẽ dùng trình duyệt Firefox và add-on FoxyProxy. Các trình duyệt khác, khi ta cấu hình proxy thì nó áp dụng proxy cho tất cả các website, không chọn lọc được.

Sau khi cài add-on FoxyProxy, ta vào trang cấu hình của nó.

FoxyProxy 1

Bấm "Add". Ta sang màn hình thông số.

FoxyProxy 2

Đặt tên cho cấu hình. Tại "Proxy Type", chọn "SOCKS5". Tại "Proxy IP address", điền địa chỉ IP hoặc tên miền của server. Tại "Port", điền "1080", đó là cổng mặc định của Dante. Tiếp đến điền username, password mà ta đã tạo trên server. Bên ô "Pattern Shortcuts", nhớ bật "On" cho cả ba. Sau đó bấm "Save & Edit Patterns".

Tại trang Patterns, ta sẽ chọn lựa những website nào sẽ được lái qua proxy.

FoxyProxy 3

Trong "White Patterns", bấm vào cột "Pattern" để thêm mô tả website. Ví dụ tôi muốn cứ trang web nào mà có chữ "readthedocs", "medium" trong địa chỉ thì áp dụng proxy, tôi sẽ điền các pattern "readthedocs", "medium". Xong bấm "Save".

Sau khi bấm "Save", ta sẽ quay lại trang đầu của FoxyProxy.

FoxyProxy 4

Ở đây, nhớ chọn "Use Enabled Proxies By Patterns".

Bây giờ thử vào website nào trong whitelist phía trên, sẽ thấy tốc độ phà phà. Ngoài ra ta có thể kiểm tra xem website đang xem có được bật proxy hay không bằng cách quan sát trạng thái FoxyProxy trên thanh công cụ:

Foxy Proxy 5

Vậy là tôi đã hướng dẫn xong một giải pháp để các bạn vượt qua thời gian khó khăn này và tiếp tục được công việc một cách trôi chảy. Nếu bạn không thuộc loại "con nhà có điều kiện", không có server riêng thì có thể rủ những người đồng cảnh ngộ, hùn nhau lại thuê một server cỡ nhỏ, VPS thôi, chi phí khoảng 100k/tháng, và dựng proxy lên đó.