Các bộ điều hành Rơ-le

  • Không sử dụng các gói package trong các kho lưu trữ của Ubuntu. Chúng không được cập nhật một cách đáng tin cậy. Nếu như bạn sử dụng chúng, bạn sẽ thiếu sót các bản vá sửa chữa sự ổn định và bảo mật quan trọng.
  • Xác định phiên bản Ubuntu của bạn bằng cách chạy lệnh command sau đây:
     ‪$ lsb_release -c
    
  • Dưới tư cách root, thêm vào các dòng sau đây vào /etc/apt/sources.list. Thay thế 'version' với phiên bản mà bạn đã tìm thấy ở trong bước trước đó:
     deb https://deb.torproject.org/torproject.org version main
     deb-src https://deb.torproject.org/torproject.org version main
    
  • Thêm vào một khoá key gpg được sử dụng để ký các gói package bằng cách chạy các lệnh command sau đây:
     ‪$ curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | sudo apt-key add -
    
  • Chạy các lệnh command sau đây để cài đặt tor và kiểm tra các chữ ký của nó:
     ‪$ sudo apt-get update
     ‪$ sudo apt-get install tor deb.torproject.org-keyring
    

Tor có thể xử lý các rơ-le với các địa chỉ IP động (dynamic IP address) một cách ổn thoả. Hãy cứ để trống dòng "Địa chỉ" trong torrc của bạn, và Tor sẽ tự đoán ra.

Không. Nếu các bên thực thi luật pháp trở nên quan tâm tới lưu lượng traffic từ rơ-le đầu ra exit của bạn, rất có khả năng rằng các sĩ quan sẽ thu giữ máy tính của bạn. Vì lý do đó, điều tốt nhất đó là không chạy rơ-le đầu ra exit của bạn tại nhà bạn hoặc sử dụng kết nối Internet nhà của bạn.

Thay vào đó, hãy xem xét chạy rơ-le đầu ra exit của bạn trong một cơ sở thương mại có thể hỗ trợ Tor. Hãy sử dụng một địa chỉ IP riêng biệt cho rơ-le đầu ra exit của bạn, và không định tuyến lưu lượng traffic của chính bạn thông qua nó. Tất nhiên, bạn nên tránh giữ bất kỳ thông tin nhạy cảm hoặc cá nhân nào trên máy tính đang host lưu trữ rơ-le đầu ra exit của bạn.

Nếu rơ-le Tor của bạn đang sử dụng nhiều bộ nhớ hơn mà bạn muốn, đây là một số lời khuyên dành cho việc giảm thiểu dấu vết footprint của nó:

  • Nếu bạn ở trên Linux, bạn có thể đang gặp phải các lỗi bug phân mảnh bộ nhớ (memory fragmentation bugs) trong việc thiết lập áp dụng malloc của glibc. Điều đó nghĩa là, khi Tor gửi trở lại bộ nhớ cho hệ thống, các mẩu bộ nhớ bị phân mảnh đến mức chúng khó có thể được sử dụng lại. Tarball của Tor gửi đi với Thiết lập malloc của OpenBSD, mà chúng không có nhiều các lỗi bug phân mảnh (nhưng điểm bù lại là tải CPU sẽ cao hơn). Thay vào đó, bạn có thể yêu cầu Tor sử dụng triển khai malloc này:./configure --enable-openbsd-malloc.
  • Nếu bạn đang chạy một rơ-le nhanh, điều đó có nghĩa là bạn có nhiều các kết nối TLS mở, bạn có thể đang mất đi nhiều bộ nhớ cho các Buffer nội bộ của OpenSSL (38KB + trên mỗi socket). Chúng tôi vừa vá OpenSSL vào việc phát hành một cách mạnh mẽ tích cực bộ nhớ buffer không được sử dụng. Nếu bạn cập nhật lên OpenSSL 1.0.0 hoặc mới hơn, quá trình xử lý phiên bản của Tor sẽ tự động nhận diện và sử dụng tính năng này.
  • Nếu bạn vẫn không thể xử lý tải của bộ nhớ, hãy xem xét việc giảm thiểu số lượng băng thông mà rơ-le của bạn quảng bá. Việc quảng bá băng thông ít hơn có nghĩa là bạn sẽ thu hút ít người dùng hơn, để rơ-le của bạn không nên phát triển lớn như vậy. Hãy xem tuỳ chọn MaxAdvertisedBandwidth trong trang sổ tay "man".

Mặc dù đã nói tất cả những điều này, các rơ-le Tor nhanh thật sự là sử dụng rất nhiều ram. Không phải là điều hiếm thấy khi một rơ-le đầu ra exit nhanh phải sử dụng 500-1000MB bộ nhớ.

Nếu như bạn cho phép các kết nối ngõ ra exit connection, một số dịch vụ mà mọi người kết nối từ rơ-le chuyển tiếp của bạn sẽ kết nối lại để thu thập thêm thông tin về bạn. Ví dụ, một số máy chủ IRC kết nối lại với cổng nhận dạng identity port của bạn để ghi lại rằng, người dùng nào đã thực hiện kết nối. (Điều này không thực sự hiệu quả đối với họ, vì Tor không hề biết đến thông tin này, nhưng dù vậy họ vẫn làm thử.) Ngoài ra, những người dùng lấy bạn làm ngõ ra exit có thể sẽ thu hút sự chú ý của những người dùng khác trên máy chủ IRC, trang web, v.v., những người muốn biết thêm về máy chủ host mà họ đang chuyển tiếp qua.

Một lý do khác đó là các nhóm mà quét scan các proxy mở (open proxies) trên Internet đã biết được rằng thỉnh thoảng các rơ-le Tor để lộ cổng port socks của chúng ra thế giới. Chúng tôi khuyến nghị bạn hãy trói buộc cổng port socks (socksport) của bạn chỉ vào các mạng lưới cục bộ mà thôi.

Trong mọi trường hợp, bạn cần phải cập nhật thông tin bảo mật của mình. Xem bài viết này về bảo mật cho các rơ-le Tor để biết thêm về các đề xuất.

Tuyệt vời. Đó chính xác là lý do tại sao chúng tôi đã triển khai các chính sách quy định đầu ra exit.

Mỗi một rơ-le Tor có một chính sách quy định đầu ra exit để cụ thể hoá những loại kết nối hướng ngoại nào được cho phép hoặc bị từ chối khỏi rơ-le đó. Các chính sách quy định đầu ra exit được lan truyền ra cho các ứng dụng/máy khách Tor thông qua thư mục, do đó các ứng dụng/máy khách sẽ tránh được một cách tự động việc lựa chọn các rơ-le đầu ra exit mà sẽ từ chối đầu ra exit tới điểm đến được định trước của họ. Theo cách này, mỗi một rơ-le có thể quyết định các dịch vụ, các máy chủ host, và các mạng lưới mà nó muốn cho phép các kết nối tới, dựa trên tiềm năng lạm dụng và tình huống của chính nó. Hãy đọc mục nhập entry Hỗ trợ về các vấn đề mà bạn có thể gặp phải nếu như bạn sử dụng quy tắc quy định đầu ra exit mặc định, và sau đó đọc các lời khuyên cho việc chạy một nút giao đầu ra exit với tối thiểu những sự quấy rối của Mike Perry.

Theo mặc định, quy tắc quy định đầu ra exit cho phép quyền truy cập tới nhiều những dịch vụ phổ biến (ví dụ như việc duyệt web), nhưng giới hạn một số bởi tiềm năng lạm dụng (ví dụ như thư mail) và một số bởi mạng lưới Tor Network không thể xử lý được tải load (ví dụ như các cổng port chia sẻ tập tin mặc định). Bạn có thể thay đổi chính sách quy định đầu ra exit của bạn bằng cách chỉnh sửa tập tin torrc của bạn. Nếu như bạn muốn phòng tránh hầu hết, nếu như không phải tất cả các sự lạm dụng tiềm năng, hãy thiết đặt nó thành "reject *:*". Cài đặt này có nghĩa là, rơ-le của bạn sẽ được sử dụng cho việc chuyển tiếp lưu lượng traffic ngay bên trong mạng lưới Tor Network, nhưng không phải cho các kết nối tới các trang web ngoại vi hoặc các dịch vụ khác.

Nếu như bạn có cho phép bất kỳ các kết nối đầu ra exit nào, xin hãy bảo đảm chắc chắn rằng, phân giải tên (name resolution) hoạt động (rằng, máy tính của bạn có thể xử lý các địa chỉ Internet một cách chính xác). Nếu có bất kỳ tài nguyên nào mà máy tính của bạn không thể tiếp cận (ví dụ, bạn đang ở đằng sau một tường lửa firewall hạn chế hoặc bộ lọc nội dung), xin vui lòng hãy từ chối chúng một cách rõ ràng trong chính sách quy định ngõ ra exit policy của bạn, nếu không thì người dùng Tor cũng sẽ bị ảnh hưởng.

Chúng tôi đang tìm kiếm những người với các kết nối Internet đáng tin cậy một cách hợp lý, có ít nhất 10 Mbit/s (Mbps) băng thông khả dụng mỗi đường. Nếu đó chính là bạn, xin vui lòng xem xét việc chạy một rơ-le Tor.

Kể cả nếu như bạn không có ít nhất 10 Mbit/s băng thông khả dụng bạn vẫn có thể giúp đỡ được mạng lưới Tor Network bằng việc chạy một cầu Bridge Tor với hỗ trợ obfs4. Trong trường hợp đó bạn nên có ít nhất 1 MBit/s băng thông khả dụng.

Tor phỏng đoán địa chỉ IP của nó bằng cách hỏi máy tính về tên máy chủ hostname của nó, sau đó giải quyết tên máy chủ hostname đó. Thông thường, mọi người có các mục nhập entry cũ trong file tệp tin /etc/hosts của họ trỏ đến các địa chỉ IP cũ.

If that doesn't fix it, you should use the "Address" config option to specify the IP address you want it to pick. If your computer is behind a NAT and it only has an internal IP address, see the following Support entry on dynamic IP addresses.

Đồng thời, nếu bạn có nhiều các địa chỉ, bạn có thể cũng muốn đặt "OutboundBindAddress" làm sao cho các kết nối hướng ngoại tới từ địa chỉ IP được bạn dự định sẽ trình ra cho thế giới.

Tor có hỗ trợ một phần cho IPv6 và chúng tôi khuyến khích mọi điều hành viên rơ-le chuyển tiếp bật kích hoạt chức năng IPv6 trong các file tệp tin cấu hình torrc của họ khi kết nối IPv6 là khả dụng. Hiện tại, Tor sẽ yêu cầu địa chỉ IPv4 trên rơ-le, bạn không thể chạy rơ-le Tor trên máy chủ host chỉ có địa chỉ IPv6.

Nếu rơ-le của bạn khá là mới thì hãy cho nó thêm ít thời gian. Tor quyết định việc rơ-le nào nó sử dụng theo kinh nghiệm dựa trên các bản báo cáo từ Bộ quản lý Băng thông (Bandwidth Authorities). Các bộ quản lý này lấy các thông số khả năng dung tích rơ-le của bạn và, theo thời gian, định tuyến nhiều lưu lượng traffic hơn tới đó cho tới khi nó đạt đến một lượng tải tối ưu. Vòng đời của một rơ-le mới được giải thích sâu hơn trong bài viết blog này. Nếu bạn đang chạy một rơ-le được một thời gian và vẫn gặp phải các vấn đề thì hãy thử hỏi trên danh sách các rơ-le tor-relays.

If you're using Debian or Ubuntu especially, please use the Tor Project's repository, so you can easily receive updates. In addition, using the package provides other conveniences:

  • Your ulimit -n gets set to a high number, so Tor can keep open all the connections it needs.
  • The package creates and uses a separate user, so you don't need to run Tor as your own user.
  • The package includes an init script so Tor runs at boot.
  • Tor can bind to low-numbered ports, then drop privileges.

Bạn có thể chạy một rơ-le trong Windows theo sự trợ giúp từ hướng dẫn này:

Bạn nên chỉ chạy một rơ-le Windows nếu như bạn có thể chạy nó 24/7. Nếu bạn không thể đảm bảo điều đó, Snowflake là cách tốt hơn để đóng góp tài nguyên của bạn cho mạng lưới Tor Network.

Trong phần tìm kiếm rơ-le, chúng tôi hiển thị một nút chấm màu vàng hổ phách ngay bên cạnh biệt danh nickname của rơ-le khi nó bị quá tải. Điều này có nghĩa là một trong nhiều những chỉ số tải (load metrics) sau đây đã được kích hoạt:

Hãy lưu ý rằng nếu một rơ-le đạt tới một trạng thái quá tải, chúng tôi sẽ hiển thị nó trong vòng 72 tiếng đồng hồ sau khi rơ-le đã được phục hồi.

Nếu bạn để ý thấy rằng rơ-le của bạn bị quá tải vui lòng hãy:

  1. Hãy kiểm tra https://status.torproject.org/ để tìm hiểu về bất kỳ những vấn đề đã biết nào trong danh mục "mạng lưới Tor Network".

  2. Hãy xem xét tinh chỉnh sysctl cho hệ thống của bạn cho sức tải mạng, bộ nhớ và CPU.

  3. Hãy xem xét bật kích hoạt MetricsPort để hiểu được điều gì đang diễn ra.

Tinh chỉnh sysctl cho mạng lưới, bộ nhớ và tải CPU

Cạn kiệt cổng port TCP

Nếu bạn đang trải nghiệm sự tắc nghẽn cổng TCP, hãy xem xét mở rộng miền cổng port cục bộ của bạn. Bạn có thể thực hiện điều đó với

# sysctl -w net.ipv4.ip_local_port_range="15000 64000"

hoặc

# echo 15000 64000 > /proc/sys/net/ipv4/ip_local_port_range

Hãy luôn nhớ rằng, việc tinh chỉnh sysctl như được mô tả là không hề bền vững, vĩnh viễn và sẽ bị mất đi khi khởi động lại. Bạn cần phải thêm cấu hình vào /etc/sysctl.conf hoặc vào một tập tin trong /etc/sysctl.d/ để làm cho nó được bền vững, vĩnh viễn.

Về MetricsPort

Để hiểu rõ tình trạng hoạt động của các rơ-le Tor và mạng lưới Tor Network, điều quan trọng là phải cung cấp và có quyền truy cập đối với các chỉ số rơ-le (relay metrics). Thông tin quá tải rơ-le đã được thêm vào các bộ mô tả rơ-le (relay descriptors) từ 0.4.6+ nhưng chỉ cho tới khi Tor >= 0.4.7.1-alpha nó mới có một giao diện khả dụng cho các chỉ số rơ-le cơ bản (underlying relay metrics): cổng port các chỉ số cơ bản (metrics port).

Việc bật kích hoạt MetricsPort

Tor cung cấp quyền truy cập tới các cổng port các chỉ số metric thông qua một tuỳ chọn cấu hình torrc được gọi là MetricsPort.

Quan trọng là để hiểu được rằng việc để lộ ra MetricsPort tor một cách công khai là điều nguy hiểm cho người sử dụng mạng lưới Tor Network, đó là lý do tại sao cổng port không được bật kích hoạt theo mặc định và quyền truy cập của nó phải được kèm cặp quản lý bởi một điều lệ chính sách truy cập. Xin hãy thực hiện các biện pháp đề phòng bổ sung và cực kỳ cẩn thận khi mở cổng port này, và đóng nó lại khi bạn đã xử lý xong lỗi bug.

Hãy giả sử rằng bạn là người dùng duy nhất trên một máy chủ đang chạy một rơ-le Tor. Bạn có thể bật kích hoạt Metrics-Port bằng cách thêm cái này vào trong tập tin torrc của bạn:

MetricsPort 127.0.0.1:9035
MetricsPortPolicy accept 127.0.0.1

Và rồi bạn sẽ có khả năng dễ dàng truy xuất các số liệu với:

# curl https://127.0.0.1:9035/metrics

theo mặc định thì là ở định dạng Prometheus.

Lưu ý: mọi người dùng trên máy chủ đó sẽ có thể truy cập các thông số rơ-le chuyển tiếp đó trong ví dụ trên. Một cách tổng quan, hãy đặt một chính sách truy cập nghiêm ngặt với MetricsPortPolicy và xem xét việc sử dụng các tính năng tường lửa của hệ điều hành của bạn để phòng thủ chuyên sâu.

Để được giải thích chi tiết hơn về MetricsPortMetricsPortPolicy xin vui lòng xem trang "man" của Tor.

Đầu ra output MetricsPort

Đây là một ví dụ về những đầu ra output gì cho phép MetricsPort sẽ tạo ra (chúng tôi đã bỏ qua bất kỳ số liệu liên quan đến kiểm soát tắc nghẽn nào vì chúng tôi vẫn cần phải ổn định giao diện đó):

# HELP tor_relay_connections Total number of opened connections
# TYPE tor_relay_connections gauge
tor_relay_connections{type="OR listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="OR listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="OR listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="OR listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="OR",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="OR",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="OR",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="OR",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Exit",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Exit",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Exit",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Exit",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Socks listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Socks listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Socks listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Socks listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Socks",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Socks",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Socks",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Socks",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Directory listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Directory listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Directory listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Directory listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Directory",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Directory",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Directory",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Directory",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Control listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Control listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Control listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Control listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Control",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Control",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Control",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Control",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Transparent pf/netfilter listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Transparent pf/netfilter listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Transparent pf/netfilter listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Transparent pf/netfilter listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Transparent natd listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Transparent natd listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Transparent natd listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Transparent natd listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="DNS listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="DNS listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="DNS listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="DNS listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Extended OR",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Extended OR",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Extended OR",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Extended OR",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Extended OR listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Extended OR listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Extended OR listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Extended OR listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="HTTP tunnel listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="HTTP tunnel listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="HTTP tunnel listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="HTTP tunnel listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Metrics listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Metrics listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Metrics listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Metrics listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Metrics",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Metrics",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Metrics",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Metrics",direction="received",state="opened",family="ipv6"} 0
# HELP tor_relay_connections_total Total number of created/rejected connections
# TYPE tor_relay_connections_total counter
tor_relay_connections_total{type="OR listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="OR listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="OR listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="OR listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="OR listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="OR listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="OR",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="OR",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="OR",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="OR",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="OR",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="OR",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Exit",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Exit",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Exit",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Exit",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Exit",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Exit",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Socks listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Socks listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Socks listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Socks listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Socks listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Socks listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Socks",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Socks",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Socks",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Socks",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Socks",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Socks",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Directory listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Directory listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Directory listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Directory listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Directory listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Directory listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Directory",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Directory",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Directory",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Directory",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Directory",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Directory",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Control listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Control listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Control listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Control listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Control listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Control listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Control",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Control",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Control",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Control",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Control",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Control",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="DNS listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="DNS listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="DNS listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="DNS listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="DNS listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="DNS listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Metrics listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Metrics listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Metrics listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Metrics listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Metrics listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Metrics listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Metrics",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Metrics",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Metrics",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Metrics",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Metrics",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Metrics",direction="received",state="rejected",family="ipv6"} 0
# HELP tor_relay_flag Relay flags from consensus
# TYPE tor_relay_flag gauge
tor_relay_flag{type="Fast"} 0
tor_relay_flag{type="Exit"} 0
tor_relay_flag{type="Authority"} 0
tor_relay_flag{type="Stable"} 0
tor_relay_flag{type="HSDir"} 0
tor_relay_flag{type="Running"} 0
tor_relay_flag{type="V2Dir"} 0
tor_relay_flag{type="Sybil"} 0
tor_relay_flag{type="Guard"} 0
# HELP tor_relay_circuits_total Total number of circuits
# TYPE tor_relay_circuits_total gauge
tor_relay_circuits_total{state="opened"} 0
# HELP tor_relay_streams_total Total number of streams
# TYPE tor_relay_streams_total counter
tor_relay_streams_total{type="BEGIN"} 0
tor_relay_streams_total{type="BEGIN_DIR"} 0
tor_relay_streams_total{type="RESOLVE"} 0
# HELP tor_relay_traffic_bytes Traffic related counters
# TYPE tor_relay_traffic_bytes counter
tor_relay_traffic_bytes{direction="read"} 0
tor_relay_traffic_bytes{direction="written"} 0
# HELP tor_relay_dos_total Denial of Service defenses related counters
# TYPE tor_relay_dos_total counter
tor_relay_dos_total{type="circuit_rejected"} 0
tor_relay_dos_total{type="circuit_killed_max_cell"} 0
tor_relay_dos_total{type="circuit_killed_max_cell_outq"} 0
tor_relay_dos_total{type="marked_address"} 0
tor_relay_dos_total{type="marked_address_maxq"} 0
tor_relay_dos_total{type="conn_rejected"} 0
tor_relay_dos_total{type="concurrent_conn_rejected"} 0
tor_relay_dos_total{type="single_hop_refused"} 0
tor_relay_dos_total{type="introduce2_rejected"} 0
# HELP tor_relay_load_onionskins_total Total number of onionskins handled
# TYPE tor_relay_load_onionskins_total counter
tor_relay_load_onionskins_total{type="tap",action="processed"} 0
tor_relay_load_onionskins_total{type="tap",action="dropped"} 0
tor_relay_load_onionskins_total{type="fast",action="processed"} 0
tor_relay_load_onionskins_total{type="fast",action="dropped"} 0
tor_relay_load_onionskins_total{type="ntor",action="processed"} 0
tor_relay_load_onionskins_total{type="ntor",action="dropped"} 0
tor_relay_load_onionskins_total{type="ntor_v3",action="processed"} 0
tor_relay_load_onionskins_total{type="ntor_v3",action="dropped"} 0
# HELP tor_relay_exit_dns_query_total Total number of DNS queries done by this relay
# TYPE tor_relay_exit_dns_query_total counter
tor_relay_exit_dns_query_total 0
# HELP tor_relay_exit_dns_error_total Total number of DNS errors encountered by this relay
# TYPE tor_relay_exit_dns_error_total counter
tor_relay_exit_dns_error_total{reason="success"} 0
tor_relay_exit_dns_error_total{reason="format"} 0
tor_relay_exit_dns_error_total{reason="serverfailed"} 0
tor_relay_exit_dns_error_total{reason="notexist"} 0
tor_relay_exit_dns_error_total{reason="notimpl"} 0
tor_relay_exit_dns_error_total{reason="refused"} 0
tor_relay_exit_dns_error_total{reason="truncated"} 0
tor_relay_exit_dns_error_total{reason="unknown"} 0
tor_relay_exit_dns_error_total{reason="tor_timeout"} 0
tor_relay_exit_dns_error_total{reason="shutdown"} 0
tor_relay_exit_dns_error_total{reason="cancel"} 0
tor_relay_exit_dns_error_total{reason="nodata"} 0
# HELP tor_relay_load_oom_bytes_total Total number of bytes the OOM has freed by subsystem
# TYPE tor_relay_load_oom_bytes_total counter
tor_relay_load_oom_bytes_total{subsys="cell"} 0
tor_relay_load_oom_bytes_total{subsys="dns"} 0
tor_relay_load_oom_bytes_total{subsys="geoip"} 0
tor_relay_load_oom_bytes_total{subsys="hsdir"} 0
# HELP tor_relay_load_socket_total Total number of sockets
# TYPE tor_relay_load_socket_total gauge
tor_relay_load_socket_total{state="opened"} 0
tor_relay_load_socket_total 0
# HELP tor_relay_load_tcp_exhaustion_total Total number of times we ran out of TCP ports
# TYPE tor_relay_load_tcp_exhaustion_total counter
tor_relay_load_tcp_exhaustion_total 0
# HELP tor_relay_load_global_rate_limit_reached_total Total number of global connection bucket limit reached
# TYPE tor_relay_load_global_rate_limit_reached_total counter
tor_relay_load_global_rate_limit_reached_total{side="read"} 0
tor_relay_load_global_rate_limit_reached_total{side="write"} 0

Hãy cùng tìm hiểu xem một số dòng như thế này thực sự nghĩa là gì nào:

tor_relay_load_onionskins_total{type="ntor",action="dropped"} 0

Khi một rơ-le bắt đầu thấy được sự tụt rớt "dropped", đó thông thường là một vấn đề về CPU/RAM.

Đáng tiếc thay, Tor chỉ có một nguồn đơn (single threaded) ngoại trừ khi các "Onion Skins" được xử lý. "Onion Skins" là các công việc mã hoá, cần được hoàn thành trên các lớp onion "Onion Layers" trong mỗi một mạch nối.

Khi tor xử lý các lớp (layers) chúng tôi sử dụng một Thread-Pool và điều ngoại (outsource) tất cả các công việc đó sang pool đó. Có thể xảy ra trường hợp pool này bắt đầu ngừng hoạt động do áp lực từ bộ nhớ hoặc CPU và điều này sẽ gây ra trạng thái quá tải.

Nếu máy chủ của bạn đang chạy theo tải trọng của chúng thì điều này sẽ có khả năng được kích hoạt.

tor_relay_exit_dns_error_total{...}

Bất kỳ bộ đếm nào trong miền "*_dns_error_total" (ngoài bộ đếm cho các yêu cầu query thành công) chỉ báo một vấn đề tiềm ẩn liên quan đến DNS. Thay vào đó, chúng tôi đã nhận ra trong chu kỳ phát hành phiên bản 0.4.7 rằng các lỗi DNS quá là ồn ào và có chứa qua nhiều các dấu hiệu tích cực giả có thể đem lợi ích cho các mục đích báo cáo quá tải. Chúng tôi do đó không sử dụng chúng nữa cho mục đích đó bắt đầu với 0.4.6.9 và 0.4.7.4-alpha. Thay vào đó, chúng tôi vẫn giữ các chỉ số DNS metrics để cho điều hành viên rơ-le một cái nhìn về những gì đang diễn ra với rơ-le của họ.

Các vấn đề Hết thời gian DNS (DNS timeout) và các lỗi chỉ áp dụng cho các nút giao đầu ra exit (Exit node).

tor_relay_load_oom_bytes_total{...}

Một yêu cầu hết bộ nhớ (Out-Of-Memory) chỉ báo một vấn đề về RAM. Rơ-le có thể cần thêm RAM hoặc nó đang bị tràn bộ nhớ. Nếu bạn lưu ý thấy rằng quá trình tor đang làm tràn bộ nhớ, xin hãy báo cáo lại vấn đề thông qua gitLab Tor hoặc gửi một email tới danh sách thư gửi các rơ-le tor.

Tor có bộ xử lý OOM (OOM handler) của chính nó và được gọi lên khi 75%, của tổng lượng bộ nhớ mà tor nghĩ rằng là khả dụng, đã đạt đến được. Thus, let's say tor thinks it can use 2GB in total then at 1.5GB of memory usage, it will start freeing memory. Đó được xem là trạng thái quá tải.

To estimate the amount of memory it has available, when tor starts, it will use MaxMemInQueues or, if not set, will look at the total RAM available on the system and apply this algorithm:

    if RAM >= 8GB {
      memory = RAM * 40%
    } else {
      memory = RAM * 75%
    }
    /* Capped. */
    memory = min(memory, 8GB) -> [8GB on 64bit and 2GB on 32bit)
    /* Minimum value. */
    memory = max(250MB, memory)

Để phòng tránh trạng thái quá tải, chúng tôi khuyến nghị chạy một rơ-le vượt trên 2GB RAM trên 64bit. 4GB được khuyến nghị, mặc dù tất nhiên là nó chẳng gây hại gì khi thêm một vài RAM nếu bạn cần. Note: If you are running a powerful server with lots of RAM then you might end up in an overloaded state due to the default queue size limit of 8GB even though you still have plenty of RAM unused. Add an appropriate MaxMemInQueues entry to your torrc configuration in that case.

Chúng ta có thể nhận thấy rằng Tor có thể được gọi triệu tập bởi chính trình xử lý OS OOM (OS OOM Handler). Bởi vì tor chiếm hữu tổng bộ nhớ trên hệ thống khi nó khởi chạy, nếu toàn bộ hệ thống có nhiều những ứng dụng khác đang chạy sử dụng RAM, kết cục là nó sẽ tiêu tốn quá nhiều bộ nhớ. Trong trường hợp này, hệ điều hành có thể OOM Tor, mà không để cho Tor có thể nhận ra được áp lực bộ nhớ.

tor_relay_load_socket_total

Nếu số lượng các socket được mở gần bằng hoặc tương đương như tổng số lượng các socket khả dụng thì điều này chỉ báo rằng rơ-le đang hết dần các socket. Giải pháp đó là tăng ulimit -n cho quá trình tor.

tor_relay_load_tcp_exhaustion_total

Các dòng này chỉ báo rằng rơ-le đang hết dần các cổng port TCP.

Hãy thử tinh chỉnh sysctl như được mô tả bên trên.

tor_relay_load_global_rate_limit_reached_total

Nếu bộ đếm này tăng lên theo một số lượng đáng lưu ý trong một khoảng thời gian ngắn, thì đó là rơ-le bị tắc nghẽn. Nó rất có khả năng được sử dụng như là một Guard bảo vệ bởi một dịch vụ onion lớn hoặc cho một cuộc tấn công DDoS trên mạng.

Nếu rơ-le của bạn vẫn bị quá tải và bạn không thể biết được tại sao, xin vui lòng liên hệ tới [email protected]. Bạn có thể mã hoá email của bạn sử dụng khoá key báo cáo mạng Network-Report OpenPGP key.

When upgrading your Tor relay, or moving it to a different computer, be sure to keep the same identity keys (stored in keys/ed25519_master_id_secret_key and keys/secret_id_key in your DataDirectory).

If you are a bridge operator, also make sure to keep pt_state/. It contains data required for your bridge to keep working with the same bridge line.

For simplicity, just copying over the entire DataDirectory should work too.

You may wish to keep backups of these identity keys, plus pt_state for a bridge, so you can restore the relay if something goes wrong.

Các cổng port mở mặc định được liệt kê bên dưới nhưng hãy luôn nhớ rằng, bất kỳ cổng port hoặc các cổng port nào cũng có thể được mở ra bởi điều hành viên rơ-le bằng cách định cấu hình nó trong torrc hoặc điều chỉnh mã nguồn. Mặc định theo như src/or/policies.c (line 85line 1901) từ bản phát hành mã nguồn release-0.4.6:

reject 0.0.0.0/8
reject 169.254.0.0/16
reject 127.0.0.0/8
reject 192.168.0.0/16
reject 10.0.0.0/8
reject 172.16.0.0/12

reject *:25
reject *:119
reject *:135-139
reject *:445
reject *:563
reject *:1214
reject *:4661-4666
reject *:6346-6429
reject *:6699
reject *:6881-6999
accept *:*

BridgeDB triển khai sáu cơ chế để phân phối các cầu Bridge: HTTPS, Moat, Email, Telegram, Các cài đặt và Đặt trước để dành riêng. Các điều hành viên cầu Bridge có thể kiểm tra rằng theo cơ chế nào mà cầu Bridge của họ đang sử dụng, trên Tìm kiếm Rơ-le. Gõ nhập vào <HASHED FINGERPRINT> của cầu Bridge vào biểu đơn và nhấp vào "Tìm kiếm".

Các điều hành viên cũng có thể lựa chọn phương pháp phân phối nào mà cầu Bridge của họ sử dụng. To change the method, modify the BridgeDistribution setting in the torrc file to one of these: https, moat, email, telegram, settings, lox, none, any. You can find a description of each distributor in the rdsys distributors documentation.

Đọc thêm về hướng dẫn các cầu Bridge sau cài đặt.

  • Rơ-le đầu ra exit là loại rơ-le được cần đến nhất nhưng nó cũng đi kèm với các nguy cơ và tiếp xúc phơi nhiễm pháp lý cao nhất (và bạn KHÔNG nên chạy chúng từ nhà riêng của bạn).
  • Nếu bạn đang tìm hiểu để chạy một rơ-le với ít nỗ lực nhất có thể, các rơ-le bảo vệ nhanh chóng (fast guard relays) cũng rất là hữu dụng
  • Theo sau bởi các cầu Bridge.

Chúng tôi nhắm đến việc thiết lập cài đặt cho một rơ-le Tor dễ dàng và thuận tiện:

  • Nếu rơ-le thỉnh thoảng trở nên ngoại tuyến offline thì đó là một điều bình thường. Các thư mục thông báo điều này một cách nhanh chóng và dừng việc quảng bá rơ-le. Hãy thử chỉ cần bảo đảm rằng nó không diễn ra quá thường xuyên, vì các kết nối sử dụng rơ-le khi nó ngắt kết nối sẽ bị phá vỡ.
  • Mỗi một rơ-le Tor có một quy định chính sách đầu ra exit chỉ định cụ thể các kiểu kết nối hướng ngoại nào được cho phép hoặc bị từ chối khỏi rơ-le đó. Nếu bạn cảm thấy không thoải mái khi cho phép mọi người dùng rơ-le của bạn làm đầu ra exit dữ liệu, bạn có thể cài đặt nó để chỉ cho phép các kết nối tới các rơ-le Tor khác.
  • Rơ-le của bạn sẽ ước lượng một cách thụ động và thông báo cho mọi người dùng dung lượng băng thông vừa rồi của nó, do đó các rơ-le băng thông cao sẽ thu hút nhiều người dùng hơn các rơ-le băng thông thấp. Vì vậy, có các rơ-le băng thông thấp cũng là một điều có lợi.

Tại sao tải của Rơ-le chuyển tiếp lại thay đổi

Tor quản lý băng thông trên toàn bộ mạng. Nó làm một công việc hợp lý cho hầu hết các rơ-le chuyển tiếp. Nhưng các mục tiêu của Tor là khác biệt với các giao thức protocol như BitTorrent. Tor muốn các trang web có độ trễ thấp, điều này yêu cầu các kết nối nhanh với nguồn dự trữ tài nguyên headroom. BitTorrent muốn tải xuống hàng loạt, mà điều này yêu cầu sử dụng tất cả băng thông.

Chúng tôi đang làm việc về một máy quét băng thông mới, mà nó dễ hiểu và dễ bảo trì hơn. Nó sẽ đưa ra các chẩn đoán cho những rơ-le không được đo đạc, và các rơ-le có ít thông số.

Tại sao Tor cần bộ phận quét băng thông?

Hầu hết các nhà cung cấp nói cho bạn biết tốc độ tối đa của kết nối cục bộ địa phương của bạn. Nhưng Tor có người dùng trên khắp thế giới, và người dùng của chúng tôi kết nối tới một hoặc hai rơ-le Guard bảo vệ ngẫu nhiên. Vì vậy, chúng ta cần biết mỗi rơ-le chuyển tiếp có thể kết nối với toàn thế giới tốt như thế nào.

Vì vậy, ngay cả khi tất cả các bên điều hành rơ-le chuyển tiếp đặt băng thông được quảng cáo thành tốc độ kết nối cục bộ của họ, chúng tôi vẫn cần các cơ quan quản lý băng thông để cân bằng tải giữa các phần khác nhau của Internet.

Tải của rơ-le chuyển tiếp thông thường là gì?

Là điều bình thường đối với hầu hết các rơ-le khi tải là 30%-80% khả năng công suất của chúng. Điều này là tốt cho các ứng dụng/máy khách: một rơ-le quá tải có độ trễ cao. (Chúng tôi muốn có đủ các rơ-le để cho mỗi rơ-le có khoảng 10% tải. Theo đó Tor sẽ có thể gần như nhanh bằng Internet phổ biến).

Đôi khi, rơ-le chuyển tiếp chạy chậm là do bộ xử lý của nó bị chậm hoặc các kết nối của nó bị hạn chế. Có những lúc, chính mạng lưới là chậm chạp: rơ-le có Peering tệ tới hầu hết các rơ-le tor khác, hoặc là khoảng cách xa xôi.

Tìm hiểu xem điều gì đang giới hạn Rơ-le chuyển tiếp

Có rất nhiều điều có thể làm chậm một rơ-le. Đây là cách làm thế nào để truy được ra chúng.

Các giới hạn Hệ thống

  • Kiểm tra RAM, CPU, và mức độ sử dụng của Bộ mô tả descriptor socket/tập tin trên rơ-le của bạn

Tor ghi lại nhật ký Log một vài trong số này khi nó bắt đầu. Những cái khác có thể được xem bằng cách sử dụng các công cụ top đầu hoặc tương tự.

Các giới hạn Nhà cung cấp

  • Hãy kiểm tra Internet-Peering (băng thông, độ trễ) từ nhà cung cấp rơ-le của bạn tới các rơ-le khác. Các rơ-le được chuyển tiếp thông qua Comcast sẽ có một số lúc bị chậm. Các rơ-le bên ngoài Bắc Mỹ và Tây Âu thông thường chậm chạp hơn.

Các giới hạn Mạng lưới Tor Network

Băng thông rơ-le có thể bị giới hạn bởi băng thông quan sát được của chính rơ-le đó, hoặc bởi băng thông đo đạc được của bộ quản lý thư mục. Đây là cách làm thế nào để tìm ra được thông số nào đang giới hạn rơ-le của bạn:

  • Hãy kiểm tra mỗi lượt vote bình chọn cho rơ-le của bạn tại consensus-health (trang lớn), và kiểm tra giá trị trung bình. Nếu rơ-le của bạn không được đánh dấu Đang chạy "Running" bởi một số các bộ phận quản lý thư mục:
    • Nó có địa chỉ IPv4 hoặc IPv6 bị sai hay không?
    • Có phải là địa chỉ IPv4 hoặc IPv6 của nó không thể truy cập được từ một số mạng lưới hay không?
    • Có phải có nhiều hơn 2 rơ-le trên địa chỉ IPv4 của nó không?

Nếu không, hãy kiểm tra băng thông quan sát được và tốc độ băng thông (giới hạn) của rơ-le của bạn. Hãy xem rơ-le của bạn trên các thông số Metrics. Sau đó di chuột qua tiêu đề băng thông để xem băng thông quan sát được và tốc độ băng thông rơ-le chuyển tiếp.

Đây là một số chi tiết thêm và một số ví dụ: Tụt khối lượng đồng thuận (Drop in consensus weight)Tăng cường tốc độ của rơ-le đầu ra exit (Rampup speed of Exit relay).

Làm thế nào để sửa chữa nó

Con số nhỏ nhất trong các thông số này là giới hạn băng thông được phân bổ cho rơ-le chuyển tiếp.

  • Nếu đó là tốc độ băng thông, hãy tăng BandwidthRate/Burst hoặc RelayBandwidthRate/Burst trong torrc của bạn.
  • Nếu đó là băng thông được quan sát, rơ-le của bạn sẽ không yêu cầu thêm băng thông cho tới khi nó thấy chính nó đang trở nên nhanh hơn.. Bạn cần phải tìm ra lý do tại sao nó bị chậm.
  • Nếu đó là giá trị băng thông trung bình đo đạc được, rơ-le của bạn sẽ trông chậm chạp từ phần lớn các cơ quan quản lý băng thông. Bạn cần tìm ra lý do tại sao nó đo lường bị chậm.

Thực hiện các phép đo rơ-le chuyển tiếp của riêng bạn

Nếu rơ-le của bạn cho rằng nó chậm chạp, hoặc bộ quản lý băng thông cho rằng nó chậm chạp, bạn có thể tự mình test kiểm tra băng thông:

  • Run a test using tor to see how fast tor can get on your network

    For this, you need to configure a tor client to use use your relay as entry. If your relay has only Guard flag, set EntryNodes with your relay fingerprint in torrc. If your relay doesn't have Guard flag or it has Guard and Exit flags, you can't set your relay as an entry node (see https://gitlab.torproject.org/tpo/core/tor/-/issues/22204), but you can set it as your bridge, even if it is not a bridge. To set your relay as a bridge, add to your torrc:

    Bridge <ip>:<port>
    UseBridge 1
    

    Then download a large file using your SocksPort as a socks proxy. For this, you can use curl, eg:

    curl https://target/path --proxy socks5h://<user>:<password>@127.0.0.1:<socks-port>
    

    Using different user/password guarantees different circuits. You can use $RANDOM.

    That will give you some idea of how much traffic your relay can sustain.

    Alternatively, you can run relay_bw to test your relay using 2 hops circuits, in a similar way as sbws does.

  • Run a test using tor and chutney to find out how fast tor can get on your CPU. Keep increasing the data volume until the bandwidth stops increasing.

Đúng, bạn chắc chắn là được ẩn danh tốt hơn phòng chống lại một số cuộc tấn công.

Ví dụ đơn giản nhất đó là một kẻ tấn công sở hữu một số lượng nhỏ các rơ-le Tor. Chúng sẽ thấy được một kết nối từ phía bạn, nhưng chúng sẽ không thể biết được, liệu kết nối có khởi nguồn từ máy tính của bạn không hay là đã được chuyển tiếp rơ-le từ một ai đó khác.

Có một số trường hợp mà nó có vẻ như không giúp ích: Nếu một kẻ tấn công có thể theo dõi tất cả lưu lượng traffic đến và đi của bạn, thì sẽ dễ dàng cho chúng biết được rằng những kết nối nào được rơ-le hoá và những kết nối nào được bắt đầu từ phía bạn. (Trong trường hợp này chúng vẫn không biết được các đích đến của bạn trừ phi chúng cũng đang theo dõi các đích đến đó, nhưng bạn cũng không khá khẩm hơn gì so với khi bạn là một máy khách thông thường.)

Cũng có một số nhược điểm khi chạy một rơ-le Tor. Đầu tiên, trong khi chúng tôi chỉ có một vài trăm các rơ-le, sự thật rằng bạn đang chạy một cái có thể ra dấu hiệu cho một kẻ tấn công rằng, bạn đề cao giá trị cho bảo mật riêng tư của bạn. Thứ hai, có một số loại tấn công bí mật hơn chưa được hiểu rõ hoặc chưa được kiểm tra kỹ lưỡng, liên quan đến việc sử dụng việc biết được rằng bạn đang chạy một rơ-le chuyển tiếp -- ví dụ: kẻ tấn công có lẽ có khả năng "quan sát" rằng liệu bạn có đang gửi lưu lượng truy cập hay không ngay cả khi chúng không thể thực sự theo dõi mạng của bạn, bằng cách chuyển tiếp lưu lượng thông qua rơ-le chuyển tiếp Tor của bạn và để ý nhận thấy những thay đổi về thời gian lưu lượng.

Liệu việc sử dụng có đem lại nhiều lợi ích hơn hẳn những rủi ro của nó hay không, đó một bài toán nghiên cứu mở. Có nhiều điều trong đó còn phụ thuộc vào những cuộc tấn công mà bạn lo lắng nhất. Đối với hầu hết người dùng, chúng tôi cho rằng đó là một điều thông thái khôn ngoan.

Hãy xem portforward.com để được chỉ dẫn về cách làm thế nào để chuyển tiếp cổng (port forward) với thiết bị NAT/thiết bị định tuyến router của bạn.

Nếu rơ-le của bạn đang chạy trên một mạng nội bộ, bạn cần phải cài đặt chuyển tiếp cổng (port forwarding). Việc chuyển tiếp các kết nối TCP là phụ thuộc vào hệ thống nhưng Các câu hỏi thường gặp FAQ về các máy khách có tường lửa chỉ ra được một số các ví dụ về việc làm thế nào để thực hiện điều này.

Đây cũng là một ví dụ về làm thế nào để bạn có thể thực hiện điều này trên GNU/Linux nếu bạn đang sử dụng iptables:

/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 9001 -j ACCEPT

Bạn có thể phải thay đổi "eth0" nếu như bạn có một giao diện ngoại vi (external interface) khác biệt (cái mà được kết nối tới Internet). Rất có khả năng là bạn chỉ có một mà thôi (ngoại trừ Loopback) do đó nó sẽ không nên quá khó khăn để tìm ra giải quyết.

Các tuỳ chọn kế toán accounting trong tập tin torrc cho phép bạn chỉ định ra số lượng các byte tối đa mà rơ-le của bạn sử dụng cho một khoảng thời gian.

    AccountingStart day week month [day] HH:MM

Điều này chỉ định khi nào việc kế toán accounting nên khởi động reset lại. Ví dụ, để cài đặt một số lượng các byte tổng cộng được phục vụ trong một tuần (mà được khởi động reset lại vào mỗi Thứ Tư lúc 10:00am), bạn có thể sử dụng:

    AccountingStart week 3 10:00
    AccountingMax 500 GBytes

This specifies the maximum amount of data your relay will send during an accounting period, and the maximum amount of data your relay will receive during an accounting period. Khi chu kỳ ghi sổ sách được reset thiết lập lại (từ AccountingStart), thì các bộ đếm cho AccountingMax được thiết lập reset lại về 0.

Ví dụ: Giả sử bạn muốn cho phép 50 GB lưu lượng traffic mỗi ngày theo mỗi hướng và việc kê khai accounting phải reset lại vào buổi trưa mỗi ngày:

    AccountingStart day 12:00
    AccountingMax 50 GBytes

Hãy lưu ý rằng, rơ-le của bạn sẽ không thức dậy một cách chính xác tại lúc bắt đầu của mỗi một chu kỳ kết toán accounting. Nó sẽ giữ thống kê về việc nó đã sử dụng chỉ tiêu của nó trong giai đoạn vừa rồi nhanh như thế nào, và chọn ra một điểm ngẫu nhiên trong khoảng thời gian mới để đánh thức rơ-le. Theo đó chúng tôi phòng tránh việc có hàng trăm các rơ-le hoạt động vào đầu mỗi tháng nhưng không có cái nào còn hoạt động vào cuối tháng.

Nếu như bạn chỉ có một số lượng nhỏ băng thông để đóng góp, so với tốc độ kết nối của bạn, chúng tôi khuyến nghị bạn sử dụng kê khai accounting hằng ngày, để giúp cho bạn rốt cuộc sẽ không sử dụng toàn bộ lượng chỉ tiêu toàn tháng chỉ trong ngày đầu tiên. Chỉ cần làm phép chia dung lượng hàng tháng của bạn cho 30. Bạn cũng có thể xem xét giới hạn băng thông để dàn trải mức độ sử dụng của bạn cho nhiều khoảng thời gian hơn: nếu như bạn muốn cung cấp X GB cho mỗi hướng, bạn có thể thiết đặt RelayBandwidthRate của bạn dựa trên 20*X KBytes. Ví dụ, nếu bạn có 50GB để cung cấp theo mỗi cách, bạn có thể thiết đặt RelayBandwidthRate của bạn lên tới 1000 KBytes: bằng cách này, rơ-le của bạn sẽ luôn là hữu dụng, ít nhất là cho một nửa của mỗi ngày.

    AccountingStart day 0:00
    AccountingMax 50 GBytes
    RelayBandwidthRate 1000 KBytes
    RelayBandwidthBurst 5000 KBytes # cho phép các burst bùng nổ cao hơn nhưng duy trì giá trị trung bình

Bạn nói đúng, hầu hết trường hợp, một byte đi vào rơ-le chuyển tiếp Tor của bạn có nghĩa là một byte đi ra, và ngược lại. Nhưng có một vài trường hợp ngoại lệ:

Nếu như bạn mở DirPort, thì máy/ứng dụng khách Tor sẽ yêu cầu bạn cung cấp một bản sao của thư mục. Yêu cầu mà họ đưa ra (một HTTP GET) là khá nhỏ, và phản hồi đôi khi là khá lớn. Điều này có thể chiếm phần lớn trong sự khác biệt giữa số byte "ghi" và số byte "đọc" của bạn.

Một ngoại lệ nhỏ khác xuất hiện khi bạn hoạt động với tư cách là một nút giao ngõ ra exit node, và bạn đọc một vài byte từ kết nối ngõ ra exit connection (ví dụ: việc nhắn tin tức thời hoặc kết nối ssh) và gói nó vào toàn bộ gói cell 512 byte dành cho việc truyền tải thông qua mạng lưới Tor Network.

Các thông số parameter được chỉ định trong AccountingMaxBandwidthRate áp dụng cho đồng thời cả ứng dụng/máy khách và các chức năng rơ-le của quá trình Tor. Do đó, bạn có thể thấy được rằng, bạn không thể duyệt được một khi Tor đi vào trạng thái ngủ đông hibernation, được báo hiệu bởi mục nhập entry này trong nhật ký log:

Bandwidth soft limit reached; commencing hibernation.
No new connections will be accepted

Giải pháp đó là chạy hai quá trình Tor - một rơ-le và một ứng dụng/máy khách, mỗi cái với cấu hình config của chính nó. Một cách để thực hiện điều này (nếu như bạn đang bắt đầu từ một setup cài đặt rơ-le đang hoạt động) là như sau:

  • Trong tập tin rơ-le Tor torrc, hãy đơn giản thiết đặt SocksPort về 0.
  • Khởi tạo một tập tin ứng dụng/máy khách torrc mới từ torrc.sample và bảo đảm rằng nó sử dụng một tập tin nhật ký log khác biệt với cái đến từ rơ-le. Một quy ước đặt tên có thể là torrc.client và torrc.relay.
  • Điều chỉnh ứng dụng/máy khách Tor và các tập lệnh script rơ-le khởi động startup để bao gồm -f /path/to/correct/torrc.
  • Trong Linux/BSD/Mac OS X, thay đổi các tập lệnh script khởi động startup thành Tor.clientTor.relay có khả năng làm cho việc phân tách các cấu hình config được dễ dàng hơn.

Nói theo ngôn từ đơn giản, nó hoạt động như thế này:

  • Có một khoá key bí mật danh tính ed25519 cơ bản (primary ed25519 identity secret key) được đặt tên là "ed25519_master_id_secret_key". Đây là điều tối quan trọng hàng đầu, do đó hãy chắc chắn rằng bạn giữ một bản sao backup tại một nơi an toàn - tập tin là cực kỳ nhạy cảm và nên được bảo vệ. Tor có thể mã hoá nó cho bạn nếu bạn khởi tạo nó bằng cách thủ công (và nhập một mật khẩu khi được hỏi yêu cầu).
  • Một khoá key chữ ký kỳ giữa (medium term signing key) có tên gọi là "ed25519_signing_secret_key" được khởi tạo để cho Tor sử dụng. Đồng thời, một chứng chỉ được tạo ra, được đặt tên là "ed25519_signing_cert", mà nó được ký bởi khoá key danh tính cơ bản bí mật (primary identity secret key) và xác nhận rằng, khoá key chữ ký kỳ giữa (medium term signing key) là hợp lệ cho một khoảng thời gian nhất định. Thời gian cho hiệu lực mặc định là 30 ngày, nhưng điều này có thể được tùy chỉnh bằng cách cài đặt "SigningKeyLifetime N ngày|tuần|tháng" trong torrc.
  • Cũng có một khoá key công cộng cơ bản (primary public key ), được đặt tên là "ed25519_master_id_public_key", mà đó chính là danh tính thật sự của rơ-le được quảng bá trong mạng lưới. Điều này là không nhạy cảm và có thể được tính toán một cách dễ dàng từ "ed5519_master_id_secret_key".

Tor sẽ chỉ cần phải truy cập vào khoá key chữ ký kỳ giữa (medium term signing key) và chứng chỉ một khi chúng hợp lệ, để khoá key danh tính chính bí mật (primary identity secret key) có thể được giữ bên ngoài DataDirectory/keys, trên một phương tiện lưu trữ hoặc một máy tính khác. Bạn sẽ phải tự mình làm mới khoá key chữ ký kỳ giữa (medium term signing key) và chứng chỉ theo cách thủ công trước khi chúng hết hạn, không thì quá trình Tor trên rơ-le sẽ kết thúc một khi hết hạn.

Tính năng này là tùy chọn, bạn không cần phải sử dụng nó trừ phi bạn muốn. Nếu như bạn muốn rơ-le của bạn chạy mà không cần giám sát trong một khoảng thời gian dài hơn, không phải thực hiện làm mới khoá key chữ ký kỳ giữa (medium term signing key) một cách thủ công hoặc định kỳ, tốt nhất là hãy giữ nguyên khoá key bí mật danh tính cơ bản (primary identity secret key ) trong DataDirectory/keys, chỉ tạo một bản sao lưu backup trong trường hợp bạn sẽ cần phải cài đặt lại nó. Nếu như bạn muốn sử dụng tính năng này, bạn có thể tham khảo tư vấn hướng dẫn chi tiết của chúng tôi về chủ đề topic.

Bởi vì hiện giờ nó là một guard bảo vệ, các ứng dụng/máy khách đang sử dụng nó ít tại các vị trí khác, nhưng vẫn chưa có nhiều các ứng dụng/máy khách quay rotate các guard bảo vệ có sẵn của họ để sử dụng nó như một guard bảo vệ. Đọc thêm các chi tiết trong bài post blog này hoặc trong Các thay đổi của các Guard bảo vệ: Một Khuôn Mẫu cho việc Thấu Hiểu và Cải Thiện Lựa Chọn Guard bảo vệ đầu vào Entry trong Tor.

Khi một đầu ra exit bị định cấu hình sai hoặc có vấn đề khả nghi hoặc độc hại, nó được gắn cờ flag BadExit (đầu ra tệ hại). Điều này nhắc nhở Tor tránh khỏi việc gửi dữ liệu ra Internet thông qua rơ-le đó. Về mặt hiệu ứng, các rơ-le bị gắn cờ flag này trở nên non-exits (không gửi dữ liệu ra internet được). Nếu bạn nhận được cờ flag thông báo này, chúng tôi có thể đã khám phá ra được một vấn đề hoặc hoạt động khả nghi khi định tuyến lưu lượng traffic thông qua đầu ra exit của bạn và đã không thể liên lạc được cho bạn. Xin vui lòng hãy liên hệ tới đội ngũ team các vấn đề rơ-le bad-relays để chúng tôi có thể giải quyết vấn đề.

Tất cả các kết nối hướng ngoại phải được cho phép, để mỗi rơ-le có thể giao tiếp với mỗi một rơ-le khác.

Trong nhiều khu vực tài phán, các điều hành viên rơ-le Tor được bảo vệ một cách hợp pháp bởi cùng các quy định vận chuyển phổ biến nhằm ngăn chặn các nhà cung cấp dịch vụ Internet khỏi việc chịu trách nhiệm pháp lý cho nội dung của bên thứ ba mà đi qua mạng lưới của họ. Các rơ-le đầu ra exit mà lọc một số cáclưu lượng traffic rất có khả năng sẽ tước đoạt các biện pháp bảo vệ ấy.

Tor khuyến khích việc truy cập mạng tự do, không bị can thiệp. Các rơ-le đầu ra exit phải không được lọc lưu lượng traffic đi qua chúng tới Internet. Các rơ-le đầu ra exit bị phát hiện được rằng chúng lọc lưu lượng traffic sẽ bị gắn cờ BadExit (rơ-le đầu ra exit độc/tệ hại) một khi bị phát hiện.

Tuyệt vời. Nếu bạn muốn chạy một vài rơ-le để đóng góp nhiều hơn cho mạng lưới, chúng tôi rất hạnh phúc với điều đó. Nhưng vui lòng không chạy nhiều hơn vài tá trên cùng một mạng lưới, vì một phần mục tiêu của mạng lưới Tor Network là sự phân tán và đa dạng.

Nếu bạn thực sự quyết định chạy nhiều hơn một rơ-le, xin hãy đặt tuỳ chọn cấu hình "MyFamily" trong torrc của mỗi rơ-le, liệt kê tất cả các rơ-le (phân cách bằng dấu phẩy) mà đang nằm dưới sự kiểm soát của bạn:

MyFamily $fingerprint1,$fingerprint2,$fingerprint3

nơi mà mỗi một dấu vết fingerprint là dấu vết fingerprint danh tính bao gồm 40 ký tự (không có khoảng trống).

Theo đó, các ứng dụng/máy khách Tor sẽ biết mà phòng tránh sử dụng nhiều hơn một trong số các rơ-le của bạn trong một mạch nối đơn. Bạn nên đặt MyFamily nếu bạn có quyền điều khiển quản trị đối với các máy tính hoặc đối với mạng lưới của họ, kể cả khi chúng không cùng nằm trên một vị trí địa lý.

Có hai lựa chọn mà bạn có thể thêm vào trong tập tin torrc của bạn:

Tốc độ băng thông BandwidthRate là băng thông dài hạn tối đa được cho phép (tính bằng byte trên giây). Ví dụ, bạn có thể muốn lựa chọn "Tốc độ băng thông BandwidthRate 10 MBytes" cho 10 megabyte mỗi giây (một kết nối nhanh), hoặc "Tốc độ băng thông BandwidthRate 500 KBytes" cho 500 kilobyte mỗi giây (một kết nối cáp khá tốt). Cài đặt BandwidthRate nhỏ nhất là 75 Kilobytes mỗi giây.

BandwidthBurst là một nhóm các byte được sử dụng để đáp ứng các yêu cầu trong một thời gian ngắn các lưu lượng traffic vượt trên BandwidthRate nhưng vẫn giữ mức trung bình trong một khoảng thời gian dài cho BandwidthRate. Tốc độ băng thông thấp nhưng lượng truy cập Burst cao sẽ thực thi một mức trung bình dài hạn trong khi vẫn cho phép nhiều lưu lượng truy cập hơn trong khoảng thời gian cao điểm nếu như mức trung bình vẫn chưa đạt được gần đây. Ví dụ, nếu bạn lựa chọn "BandwidthBurst 500 KBytes" và cũng sử dụng giá trị đó cho Tốc độ Băng thông BandwidthRate của mình, thì bạn sẽ không bao giờ sử dụng nhiều hơn 500 kilobyte mỗi giây; nhưng nếu như bạn chọn một BandwidthBurst cao hơn (chẳng hạn như 5 MByte), nó sẽ cho phép nhiều byte hơn cho đến khi nhóm tài nguyên pool trở nên trống.

Nếu như bạn có một kết nối không đối xứng (tải lên ít hơn tải xuống) chẳng hạn như một modem cáp, bạn nên đặt tốc độ băng thông BandwidthRate nhỏ hơn băng thông nhỏ hơn của bạn (Thông thường đó là băng thông tải lên). Mặt khác, bạn có thể thả drop nhiều gói packet trong các thời kỳ sử dụng băng thông tối đa - bạn có thể cần phải thí nghiệm rằng, với các giá trị nào thì kết nối của bạn trở nên dễ chịu. Sau đó hãy thiết đặt BandwidthBurst cùng một giá trị như đối với BandwidthRate.

Các nút giao node Tor dựa trên Linux có một lựa chọn khác trong lúc xử lý của chúng: chúng có thể ưu tiên lưu lượng truy cập Tor bên dưới lưu lượng truy cập khác trên máy của chúng, như vậy thì lưu lượng truy cập cá nhân của chúng không bị ảnh hưởng bởi load tải của Tor. Một mã lệnh script để thực hiện điều này có thể được tìm thấy trong thư mục contrib của phân phối nguồn Tor (contrib directory của Tor source distribution).

Ngoài ra, có các tùy chọn ngủ đông hilbernation mà bạn có thể yêu cầu Tor chỉ cung cấp một lượng băng thông nhất định cho mỗi khoảng thời gian (chẳng hạn như 100 GB mỗi tháng). Chúng được đề cập trong mục nhập ngủ đông.

Xin hãy lưu ý rằng, BandwidthRate và BandwidthBurst là theo các Byte, không phải là các Bit.