SSD Nodes Learn Hosting plans →
Hướng dẫn Matt ConnorBởi Matt Connor · Cập nhật ngày 2026-08-22

Chạy Tor bridge obfs4 trên VPS: cấu hình và firewall

Chạy Tor bridge obfs4 trên một VPS giá rẻ: cấu hình torrc, chọn port, mở firewall, đọc log xác nhận hoạt động và cách người dùng lấy bridge.

Tor bridge là gì và vì sao nó tồn tại

Tor bridge là một điểm truy cập vào mạng Tor nhưng địa chỉ của nó không được công bố trong danh sách relay công khai. Danh sách này, gọi là consensus, là một tài liệu được ký mà bất kỳ ai cũng có thể tải xuống, và bên kiểm duyệt cũng tải nó. Chặn Tor dựa trên danh sách này chỉ mất một buổi chiều: tải consensus xuống rồi chặn mọi địa chỉ trong đó tại biên mạng. Bridge tồn tại vì danh sách công khai là điểm yếu. Địa chỉ bridge được phân phối từng ít một, nên không có một request nào trả về toàn bộ danh sách.

Địa chỉ không được liệt kê mới chỉ giải quyết được một nửa vấn đề. Deep packet inspection (DPI), tức cơ chế phân loại traffic dựa trên nội dung thay vì địa chỉ, có thể nhận diện kết nối Tor dựa vào hình dạng của TLS (transport layer security) handshake. Bên kiểm duyệt không cần có danh sách vẫn có thể thấy “kết nối này trông giống Tor” rồi chặn nó. Pluggable transport loại bỏ tín hiệu đó. Nó bọc Tor stream trong một dạng traffic khác ở phía client, sau đó bridge của bạn tháo lớp bọc này.

obfs4 là transport được hầu hết bridge sử dụng. Nó chuyển stream thành các byte không có header và không có handshake cố định, nên DPI không có pattern nào để đối chiếu. Nó cũng xác thực client. Giá trị cert= trong bridge line là một key mà client phải chứng minh mình đang giữ trước khi bridge phản hồi, nhờ đó ngăn active probing: censor kết nối đến địa chỉ của bạn để kiểm tra xem nó có nói Tor hay không sẽ không nhận được phản hồi và không biết thêm thông tin gì.

Bạn nên chạy pluggable transport nào?

  • obfs4 cần một VPS, hai cổng TCP và không cần domain name. Đây là lựa chọn hữu ích dễ triển khai nhất và là nội dung của hướng dẫn này.
  • WebTunnel ẩn kết nối trong lưu lượng HTTPS thông thường đến một website thật. Tor Project liệt kê các yêu cầu gồm địa chỉ IPv4 tĩnh, một domain do bạn kiểm soát, web server đang hoạt động như NGINX hoặc Apache, TLS certificate hợp lệ và ít nhất 1 GB RAM; khuyến nghị 4 GB. Lựa chọn này phù hợp với những network mà lưu lượng có dạng ngẫu nhiên đã bị xem là đáng ngờ, vì một quốc gia hạn chế hầu hết hoạt động ngoài duyệt web vẫn thường cho phép HTTPS.
  • Snowflake là một hình thức đóng góp khác. Tình nguyện viên chạy các WebRTC proxy tồn tại trong thời gian ngắn, nên các entry point liên tục thay đổi và censor không có địa chỉ ổn định để chặn. Bạn không vận hành bridge cho Snowflake. Bạn chạy proxy và proxy này không cần địa chỉ cố định.

Hãy bắt đầu với obfs4. Sau này, bạn có thể thêm một WebTunnel bridge trên địa chỉ thứ hai. Nếu chạy cả hai trên cùng một IP, một địa chỉ bị chặn sẽ làm cả hai ngừng hoạt động.

Chạy bridge tốn gì?

ChartTor Project published minimum bandwidth, August 2026
The data behind this chart
[
  {
    "label": "Bridge, minimum",
    "min_upstream_mbit": 1
  },
  {
    "label": "Guard or middle relay, minimum",
    "min_upstream_mbit": 10
  },
  {
    "label": "Guard or middle relay, recommended",
    "min_upstream_mbit": 16
  }
]

Tính đến tháng 8/2026, Tor Project yêu cầu một bridge có băng thông upstream và downstream tối thiểu 1 Mbit/s. Guard relay hoặc middle relay được yêu cầu 10 Mbit/s, và khuyến nghị 16 Mbit/s. Đây là các yêu cầu được công bố, không phải số đo thực tế. Bridge mới thường thấp hơn nhiều so với mức tối thiểu của chính nó trong vài tuần đầu. Trang yêu cầu tương tự cũng yêu cầu relay có ít nhất 100 GByte traffic outbound mỗi tháng. Các gói nhỏ nhất đã đáp ứng được mức này, vì vậy hãy đọc chi phí thực tế mỗi tháng của một VPS nhỏ trước khi chọn cấu hình lớn hơn.

Bề mặt tấn công và nguy cơ abuse khá nhỏ. Đây là phần nhiều người hiểu sai. Bridge là hop đầu tiên. Traffic rời server của bạn sẽ đi đến một Tor relay khác, không bao giờ đi thẳng đến website do người dùng chọn. Địa chỉ IP của bạn không bao giờ xuất hiện trong web log của người khác dưới dạng nguồn của request. Vì vậy, các email khiếu nại mà operator của exit relay phải xử lý sẽ không đến đây. Tuy vậy, hãy kiểm tra acceptable use policy của provider, vì một số host xem mọi dịch vụ Tor là trường hợp đặc biệt. Bridge và onion service có tính chất ngược nhau ở điểm này: bridge chỉ có ích vì địa chỉ của nó có thể truy cập được và cuối cùng được phân phối cho người dùng, còn v3 onion service trên cùng loại VPS chỉ có ích khi public IP của bạn không bị lộ.

Không được chuyển một public relay hiện có thành bridge tại cùng địa chỉ. Tor Project khuyến nghị trong trường hợp này phải thay đổi “IP address, name and fingerprint”, vì địa chỉ cũ đã nằm trong consensus mà các hệ thống censorship tải xuống. Một bridge từng là public relay vào tuần trước là bridge đã nằm trong blocklist.

Uptime quan trọng hơn tốc độ. Các yêu cầu dành cho relay nêu rằng “nếu relay của bạn không chạy quá 2 giờ mỗi ngày thì mức độ hữu ích sẽ bị hạn chế”. Bridge còn bất lợi hơn relay ở điểm này, vì mỗi client chỉ có một địa chỉ và không có fallback. Mỗi lần restart sẽ ngắt kết nối của toàn bộ user đang dùng bridge. Hãy thiết lập kiểm tra TCP port bằng Uptime Kuma đối với port obfs4 để bạn biết ngay trong ngày nó ngừng phản hồi.

Cài đặt Tor từ repository của Tor Project

Các package do distribution cung cấp thường chậm cập nhật, trong khi bridge là phần mềm bảo mật nên cần được cập nhật. Trước tiên, hãy thêm repository của chính project.

sudo apt update
sudo apt install -y apt-transport-https gnupg wget lsb-release
wget -qO- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --dearmor | sudo tee /usr/share/keyrings/deb.torproject.org-keyring.gpg >/dev/null

Bây giờ tạo source file. Dòng Suites: phải chứa release codename của hệ thống. Vì vậy, hãy đọc giá trị này từ hệ thống thay vì tự nhớ rồi nhập.

sudo tee /etc/apt/sources.list.d/tor.sources >/dev/null <<EOF
Types: deb deb-src
URIs: https://deb.torproject.org/torproject.org/
Suites: $(lsb_release -cs)
Components: main
Signed-By: /usr/share/keyrings/deb.torproject.org-keyring.gpg
EOF
sudo apt update
sudo apt install -y tor deb.torproject.org-keyring obfs4proxy

Nếu apt update báo repository không có file Release cho codename của bạn, Tor Project không hỗ trợ release đó. Xóa /etc/apt/sources.list.d/tor.sources, chạy lại sudo apt update, rồi cài package tor do distribution cung cấp. Các bước bên dưới không thay đổi.

Package obfs4proxy do Debian và Ubuntu cung cấp (version 0.0.14 trên Debian 13, tính đến tháng 8 năm 2026). Hãy xác nhận binary được cài ở đâu, vì đường dẫn của nó sẽ được đưa vào config:

command -v obfs4proxy || command -v lyrebird

Upstream đã đổi tên project thành lyrebird, nên package mới hơn có thể cài /usr/bin/lyrebird thay thế. Dùng đường dẫn mà command đó in ra.

Cấu hình bridge trong /etc/tor/torrc

BridgeRelay 1
ORPort 8443
ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy
ServerTransportListenAddr obfs4 0.0.0.0:9443
ExtORPort auto
ContactInfo you@example.com
Nickname PickANickname
BridgeDistribution any

Mỗi dòng đều có thể gây ra một lỗi riêng, vì vậy hãy kiểm tra từng dòng một.

BridgeRelay 1 yêu cầu tor gửi descriptor đến bridge authority thay vì consensus công khai. Chính dòng này khiến relay không xuất hiện trong danh sách công khai.

ORPort là cổng Tor thực tế. Cổng này phải truy cập được từ Internet, vì tor sẽ kiểm tra cổng và từ chối publish descriptor cho đến khi kiểm tra thành công.

ServerTransportPlugin cung cấp lệnh để tor chạy. tor khởi động obfs4proxy dưới dạng tiến trình con và giao tiếp với tiến trình này qua pipe. Vì vậy, obfs4proxy không có service unit riêng và không bao giờ xuất hiện trong systemctl status.

ServerTransportListenAddr cố định cổng mà obfs4proxy listen. Nếu bỏ dòng này, obfs4proxy sẽ chọn một cổng còn trống khi khởi động và thường chọn cổng khác sau mỗi lần restart. Khi đó, mọi bridge line đã cung cấp trước đó đều trỏ đến một cổng không có tiến trình nào listen. Các client đó sẽ nhận lỗi connection refused và ngừng thử kết nối.

ExtORPort auto mở extended ORPort, là một kênh loopback để obfs4proxy chuyển các connection đã hoàn tất trở lại cho tor cùng với địa chỉ của client. Hướng dẫn thiết lập của Tor Project thêm dòng này vào mọi bridge, vì nếu thiếu nó, transport không thể báo địa chỉ đó cho tor.

ContactInfo và Nickname đều là thông tin public. Hãy dùng một địa chỉ mà bạn thường xuyên đọc, vì Tor Project sẽ dùng địa chỉ này để liên hệ với bạn khi bridge gặp lỗi. Nếu muốn giữ kín danh tính, hãy chọn một nickname không thể nhận diện bạn.

BridgeDistribution chọn distributor cung cấp địa chỉ của bạn cho người dùng. Các giá trị được chấp nhận là https, email, telegram, settings, none và any. Với bridge đầu tiên, hãy dùng any để hệ thống tự quyết định. Với bridge private mà bạn tự cung cấp, hãy dùng none. Cách này giữ địa chỉ hoàn toàn ngoài cơ chế phân phối public.

Vì sao lựa chọn port quan trọng

Không dùng 9001 cho cả hai port. Tor Project nói rõ điều này, vì 9001 là ORPort truyền thống và các bên kiểm duyệt thường quét Internet để tìm port này. Hai port cũng phải khác nhau, vì tor và obfs4proxy mỗi tiến trình bind vào một listener riêng.

Port obfs4 tốt nhất là 443. Lưu lượng đi ra qua 443 được cho phép trên gần như mọi network bị hạn chế, và một kết nối duy trì lâu đến port này trông giống một phiên web thông thường. Bind vào port nhỏ hơn 1024 cần thêm một bước, vì obfs4proxy không chạy dưới root:

sudo setcap cap_net_bind_service=+ep /usr/bin/obfs4proxy
sudo systemctl edit tor@.service tor@default.service

Thêm hai dòng này trong mỗi editor đang mở:

[Service]
NoNewPrivileges=no

Chỉ cấp capability thôi là chưa đủ. NoNewPrivileges của systemd ngăn tiến trình nhận bất kỳ privilege nào mà tiến trình cha không có. File capability đúng là loại privilege đó, nên obfs4proxy sẽ không bind được vào 443 khi thiết lập này vẫn bật.

Nếu muốn bỏ qua bước này, hãy chọn một high port không gây chú ý và ghi lại. Dù chọn port nào, không được đổi port obfs4 về sau. Một bridge line gắn liền address, port, fingerprint và certificate với nhau. Vì vậy, mọi bản sao đã nằm trong browser của người dùng sẽ hỏng ngay khi port thay đổi.

Mở các cổng trên cả hai firewall

sudo ufw allow 8443/tcp
sudo ufw allow 9443/tcp
sudo ufw status

Cả hai cổng đều phải được mở. Hầu hết nhà cung cấp còn chạy thêm một firewall trong control panel, nơi ufw không biết đến. Rule có trên máy chủ nhưng không có trong control panel sẽ tạo ra một bridge không bao giờ truy cập được và không bao giờ publish descriptor. Nếu một trong hai phần này còn mới với bạn, hãy xem các rule ufw cần có trên một VPS mới và port listening thực sự hoạt động như thế nào trên Linux. Trong lúc đó, hãy khóa SSH bằng key và cấu hình sshd được harden. Một bridge không được liệt kê trên máy chủ vẫn là một máy chủ dùng SSH bằng password.

Khởi động rồi đọc log

sudo systemctl enable --now tor.service
sudo systemctl restart tor.service
sudo journalctl -e -u tor@default

Debian và Ubuntu có sẵn 2 unit. tor.service là một wrapper nhỏ, còn tor@default.service là tiến trình thực hiện công việc. Vì vậy, journalctl -u tor gần như trống, trong khi log bạn cần nằm dưới tor@default.

Có 2 dòng cho biết việc này đã thành công:

Self-testing indicates your ORPort is reachable from the outside. Excellent. Publishing server descriptor.
Registered server transport 'obfs4' at '0.0.0.0:9443'

Dòng đầu tiên có nghĩa là kiểm tra khả năng kết nối đã thành công và descriptor đã được gửi đến bridge authority. Nếu dòng này không bao giờ xuất hiện, một thành phần nào đó giữa Internet và server của bạn đang chặn traffic đến ORPort. Dòng thứ hai phải hiển thị cổng bạn đã cấu hình. Nếu cổng ở đó khác với cấu hình, tor chưa áp dụng ServerTransportListenAddr. Nguyên nhân thường gặp là tên transport không khớp: tên này phải là obfs4 trong cả 2 directive.

Xác nhận 2 listener tồn tại:

sudo ss -lntp | grep -E 'tor|obfs4|lyrebird'

Đường bridge của tôi ở đâu?

obfs4proxy ghi một template vào data directory của tor:

sudo cat /var/lib/tor/pt_state/obfs4_bridgeline.txt

Directory này thuộc về user tor và có mode 700, nên nếu không có sudo thì bạn sẽ nhận Permission denied. File chứa một dòng có dạng sau:

Bridge obfs4 <IP ADDRESS>:<PORT> <FINGERPRINT> cert=<CERTIFICATE> iat-mode=0

Thay <IP ADDRESS> bằng địa chỉ public của server, <PORT> bằng cổng obfs4 chứ không phải ORPort, và <FINGERPRINT> bằng identity fingerprint mà tor đã ghi vào data directory:

sudo cat /var/lib/tor/fingerprint
sudo cat /var/lib/tor/hashed-fingerprint

File đầu tiên chứa nickname và identity fingerprint cần dùng trong bridge line. File thứ hai chứa fingerprint đã hash. Đây là giá trị bạn dán vào Relay Search để kiểm tra bridge có đang chạy hay không và ước tính số client đang kết nối đến nó. Hai giá trị này không thể dùng thay thế cho nhau. Bridge line chứa giá trị đã hash không khớp với identity key mà bridge cung cấp, nên client từ chối connection vừa mở.

Làm thế nào bridge thực sự đến được với người dùng?

Bạn không gửi bridge line cho bất kỳ ai. Khi descriptor đến bridge authority, hệ thống phân phối (rdsys, hệ thống kế nhiệm BridgeDB) sẽ gán bridge của bạn cho một distributor. Người dùng sẽ yêu cầu bridge từ distributor đó. Tính đến August 2026, các kênh gồm:

  • Biểu mẫu web tại bridges.torproject.org/options, trả về bridge line sau khi vượt qua captcha.
  • Gửi email đến bridges@torproject.org từ địa chỉ Gmail hoặc Riseup. Hệ thống sẽ trả lời bằng bridge line. Giới hạn nhà cung cấp tồn tại vì các tài khoản miễn phí không giới hạn sẽ cho phép một bên kiểm duyệt liệt kê toàn bộ bridge.
  • Telegram bot @GetBridgesBot. Gửi /start, sau đó gửi /obfs4 hoặc /webtunnel.
  • Trực tiếp trong Tor Browser, tại Settings rồi Connection. Tùy chọn "Request bridges" sẽ lấy bridge qua kênh moat.

Bridge mới sẽ xuất hiện trong Relay Search khoảng ba giờ sau khi thiết lập. Người dùng cần lâu hơn nhiều: theo cách diễn đạt của Tor Project, "Có thể mất vài ngày hoặc vài tuần trước khi bạn thấy một nhóm người dùng ổn định." Hai tuần đầu ít người dùng là bình thường, không phải lỗi.

Thiết lập BridgeDistribution none sẽ từ chối tất cả các kênh này. Khi đó, bạn có thể tự gửi bridge line cho những người cần nó qua một kênh mà bên kiểm duyệt không đọc được.

Khi có thứ không hoạt động

Log không có dòng tự kiểm tra. ORPort không thể truy cập được. Kiểm tra từ một máy khác bằng nc -vz your.ip 8443. Nếu lệnh bị treo, các packet có thể đang bị drop, vì vậy hãy kiểm tra ufw và panel của nhà cung cấp. Nếu kết nối bị từ chối, tor không listen trên cổng, vì vậy hãy kiểm tra ss -lntp và đọc log để tìm lỗi cấu hình.

Transport đã đăng ký hiển thị một cổng mà bạn không chọn. tor đã bỏ qua ServerTransportListenAddr. Tên transport phải khớp chính xác với tên trong ServerTransportPlugin, và cả hai phải là obfs4.

obfs4proxy không bind được cổng 443. Xác nhận capability bằng getcap /usr/bin/obfs4proxy, sau đó xác nhận override đã được áp dụng vào unit bằng systemctl show tor@default -p NoNewPrivileges. Nếu lệnh in ra NoNewPrivileges=yes, drop-in của bạn đã được đặt vào một unit không chạy.

Không có gì bên trong /var/lib/tor/pt_state/. tor chưa khởi động transport, nghĩa là path trong ServerTransportPlugin không đúng. So sánh path đó với output của command -v obfs4proxy.

Client ngừng kết nối sau một thay đổi. Mọi thay đổi đối với địa chỉ hoặc cổng obfs4 đều làm vô hiệu tất cả bridge line đã phân phối trước đó. Kiểm tra xem public IP của server có thay đổi không. Một số nhà cung cấp có thể đổi IP khi rebuild.

tor hoàn toàn không khởi động. Chạy sudo -u debian-tor tor --verify-config -f /etc/tor/torrc. Lệnh này parse file, in ra dòng gây lỗi và không ảnh hưởng đến service đang chạy.

FAQ

Nhà cung cấp VPS có phàn nàn về Tor bridge không?

Bridge là một điểm vào, nên traffic rời máy chủ của bạn sẽ đi đến các Tor relay khác, không đi đến website do người dùng chọn. Địa chỉ IP của bạn không xuất hiện trong web log của bất kỳ ai dưới dạng nguồn của request. Đây mới là nguyên nhân tạo ra các khiếu nại mà operator của exit relay phải xử lý. Quy định hosting vẫn khác nhau giữa các nhà cung cấp. Một số nhà cung cấp xem mọi dịch vụ Tor là trường hợp đặc biệt. Vì vậy, hãy đọc acceptable use policy trước khi bắt đầu và điền địa chỉ bạn đọc được vào ContactInfo.

Tor bridge sử dụng bao nhiêu bandwidth?

Mức tối thiểu được công bố là 1 Mbit/s cho cả chiều lên và chiều xuống. Guard hoặc middle relay cần 10 Mbit/s. Mức sử dụng thực tế ban đầu gần như bằng 0, vì bridge của bạn chỉ chuyển traffic cho những user mà distributor gửi đến. Nếu muốn đặt giới hạn cứng, hãy đặt RelayBandwidthRate và RelayBandwidthBurst trong torrc.

Vì sao chưa có ai kết nối đến bridge mới của tôi?

Một bridge mất khoảng three giờ để xuất hiện trong Relay Search. Hướng dẫn của Tor Project cho biết cần several ngày hoặc weeks để có một nhóm user ổn định. Kiểm tra xem descriptor đã được publish chưa. Đây là dòng tự kiểm tra trong journalctl -u tor@default. Tra hashed fingerprint của bạn trong Relay Search và xác nhận BridgeDistribution không được đặt thành none.

Tôi nên chạy obfs4 hay WebTunnel?

Nếu đây là bridge đầu tiên, hãy chạy obfs4: một VPS, two cổng, không cần domain và không cần certificate. Hãy chạy WebTunnel khi traffic có hình dạng ngẫu nhiên cũng bị chặn. WebTunnel cần một domain do bạn kiểm soát, một web server thật, một TLS certificate hợp lệ và ít nhất 1 GB RAM. Nếu chạy cả hai, hãy đặt chúng trên các địa chỉ riêng biệt. Nếu không, một IP bị chặn sẽ làm mất cả two bridge cùng lúc.

Điều gì xảy ra nếu sau này tôi đổi cổng obfs4?

Mọi bridge line đã được phân phối sẽ ngừng hoạt động. Một bridge line cố định address, port, fingerprint và certificate thành một bộ. Vì vậy, client giữ line cũ sẽ mở kết nối đến một port không có gì listening rồi từ bỏ. Điều tương tự xảy ra khi public IP của server thay đổi. Hãy chọn port trong lúc setup và giữ nguyên port đó.