Xử lý máy chủ tin tức từ xa có thể đau đầu cho người đọc USENET thường xuyên. Thường xuyên, các máy chủ này chậm và không tin cậy. Hơn nữa, nếu truy cập nhà cung cấp miễn phí quá thường xuyên, như AIOE, họ có thể giới hạn kết nối và cấm địa chỉ IP. Các yếu tố này làm trải nghiệm USENET đau đớn đối với một số người.
Leafnode là gì?
Leafnode là proxy ngoại tuyến cho máy chủ USENET. Nó tải bài đăng tin tức từ máy chủ tin tức từ xa và phục vụ như dịch vụ cục bộ trên hệ thống. Nó cũng có thể lấy nhiều máy chủ USENET làm nguồn upstream và gộp chúng thành một nguồn duy nhất. Hữu ích nếu muốn đăng ký nhiều nhóm tin tức do các nhà cung cấp khác nhau phục vụ.
Hơn nữa, Leafnode cho phép người dùng có bản sao ngoại tuyến của nhóm tin tức theo dõi. Điều này quan trọng khi kết nối Internet không luôn có hoặc nếu muốn lưu trữ nhóm tin tức đăng ký. Cuối cùng, Leafnode đơn giản, dễ thiết lập và hoạt động với tất cả trình đọc USENET hiện đại.
Proxy USENET hoạt động như thế nào?
Như đã nói, Leafnode là proxy máy chủ USENET, về cơ bản nó đóng vai trò máy chủ tin tức cho trình đọc tin tức của bạn.
Tuy nhiên, khác với máy chủ USENET truyền thống, Leafnode không lấy bản sao đầy đủ tất cả phân cấp từ máy chủ khác. Leafnode chỉ lấy bài đăng bạn bảo nó lấy theo điều kiện bạn đặt.
Leafnode tương tác với hai chương trình: fetchnews và texpire.
- Fetchnews là chương trình báo cho Leafnode nhóm tin tức nào đăng ký và lấy bao nhiêu. Nó cũng tải lên bài đăng và trả lời của bạn.
- Texpire là chương trình bảo trì xóa bài cũ khỏi nhóm tin tức. Nó cũng sửa bài trùng lặp hoặc hỏng và cập nhật dữ liệu tổng thể cho máy chủ tin tức.
Hai chương trình này cho phép Leafnode chạy hầu như không cần can thiệp. Sau khi thiết lập xong, Leafnode hoạt động như thể là máy chủ USENET từ xa.
Điều này cũng nghĩa là bạn có thể thiết lập Leafnode trong mạng nhỏ và cho nhiều người dùng kết nối đọc bài tin tức. Do đó, giảm lượng băng thông mạng dùng truy cập USENET.
Cài đặt Leafnode
Leafnode thiết kế đơn giản nhất có thể. Điều này áp dụng cho cả cài đặt và bảo trì. Với đó, cài Leafnode chỉ việc lấy từ kho bản phân phối.
Ví dụ, trên Debian và Ubuntu 21.10, lấy Leafnode từ apt:
sudo apt install leafnode
Thiết lập Leafnode
Trong cài đặt, Leafnode hỏi vài chi tiết máy chủ từ xa muốn kết nối. Màn hình đầu, hỏi địa chỉ máy chủ từ xa. Ví dụ, muốn kết nối AIOE, điền nntp.aioe.org.
Trong trường hợp tôi, kết nối qua Eternal September, thêm địa chỉ ở đây.
Thiết lập tải USENET tự động
Từ đó, trình cài hỏi phương pháp lấy bài tin tức ưa thích. Có ba tùy chọn: PPP, Permanent và None.
- PPP tự động tải bài mới khi bạn kết nối Internet.
- Permanent tự động tải bài tin tức mỗi giờ.
- None không bật tự động tải tin tức. Bạn phải chạy lệnh fetchnews đồng bộ với máy chủ từ xa.
Trong trường hợp tôi, không muốn Leafnode tự kết nối máy chủ tin tức mà không hay biết nên chọn None.
Bật kiểm soát truy cập (Access Controls)
Trình cài Leafnode hỏi có bật Access Controls cho server không.
Điều này liên quan nếu dùng Leafnode làm máy chủ tin tức cục bộ cho nhiều người dùng. Cho phép dùng file /etc/hosts kiểm soát client nào truy cập server được và không được.
Ví dụ, nếu dùng Leafnode trong intranet mong đợi mỗi client truy cập máy chủ tin tức, không cần bật "Access Controls".
Tuy vậy, thực tế tốt là chặn tất cả kết nối đến và chỉ bật những cái muốn. Hơn nữa, nếu chỉ dùng Leafnode làm proxy cục bộ cho máy mình, phải bật tùy chọn này.
Trong trường hợp tôi, chỉ dùng instance Leafnode này trên máy này, nên bật Access Controls.
Lấy nhóm USENET ban đầu (Initial Fetch)
Sau đó, trình cài Leafnode hỏi có kết nối máy chủ USENET từ xa ngay không. Cho phép Leafnode lấy danh sách nhóm tin tức có sẵn trên server.
Tuy nhiên, nếu dùng dịch vụ yêu cầu xác thực, như Eternal September, không nên lấy nhóm tin tức bằng tùy chọn này. Vì chưa cung cấp thông tin tài khoản cho Leafnode, cập nhật lúc này không cho danh sách hoàn chỉnh.
Trong trường hợp tôi, vì kết nối qua Eternal September, chọn No.
Cấu hình Leafnode
Từ đó, tinh chỉnh thêm khía cạnh hành vi Leafnode qua file cấu hình.
Ví dụ, có cài đặt cho phép dùng tài khoản USENET lấy tin tức. Cũng đặt tham số báo Leafnode bài nào tải được và lưu bao lâu.
Vị trí file cấu hình khác tùy bản phân phối Linux. Trên Debian và Ubuntu tại "/etc/news/leafnode/config".
sudo vim /etc/news/leafnode/config
Đặt tên người dùng và mật khẩu mặc định
File cấu hình Leafnode mở rộng và có tài liệu tốt. Mỗi tùy chọn có mô tả ngắn, một số có ví dụ minh họa cách đặt đúng.
Để dùng tài khoản USENET trong Leafnode, bỏ comment biến username và password. Xong, đặt thông tin của bạn vào.
Trong trường hợp tôi, thêm thông tin tài khoản Eternal September.
Cách tạo bộ lọc bài đăng (Post Filters)
Tính năng chính Leafnode: thao tác cách bài được xử lý khi tải bằng lọc bài hoặc đặt nhóm tin tức không cắt giảm sau số ngày.
Lọc bài có hai cách:
- Dựa trên thuộc tính chung bài. Ví dụ, lọc theo số dòng và kích thước bài.
- Dựa trên thuật ngữ cụ thể trong tiêu đề bài. Làm bằng cách tạo danh sách biểu thức chính quy trong filterfile.
Để lọc dựa trên thuộc tính chung, bật trực tiếp từ file cấu hình. Ví dụ, đặt biến minlines thành 3, báo Leafnode không lấy bài dưới 3 dòng.
Ngược lại, để lọc dựa trên từ cụ thể, bật tùy chọn filterfile trong Leafnode. Làm bằng cách bỏ comment biến filterfile và cung cấp đường dẫn file lọc.
Trong trường hợp tôi, dùng đường dẫn mặc định cho file lọc.
Cú pháp cơ bản filterfile trông như sau:
Header-Property:^/regex/$
Mỗi dòng trong filterfile trỏ đến thuộc tính tiêu đề bài cụ thể. Ví dụ, muốn lọc tất cả bài từ Google Mail, gõ:
^From:.*[A-Za-z0-9]*\.*[A-Za-z0-9]*\@gmail\.com$
Cách lưu trữ nhóm USENET (Archive USENET Groups)
Mặc định, Leafnode cắt giảm (prune) tất cả nhóm cho bài cũ hơn 20 ngày. Cho phép Leafnode giữ kích thước file xuống và hữu ích khi đăng ký nhóm 100-200 bài/ngày.
Tuy nhiên, có trường hợp muốn lưu trữ tất cả bài trong nhóm tin tức. Làm bằng cách bật biến groupexpire.
Ví dụ, muốn lưu trữ nhóm comp.unix.misc, thêm dòng sau vào file cấu hình:
groupexpire comp.unix.misc = -1
Hơn nữa, biến này cũng đổi độ tuổi cắt giảm mặc định cho nhóm cụ thể. Ví dụ, muốn cắt giảm nhóm lượng lớn như misc.internet.news.discuss mỗi 5 ngày, thêm dòng:
groupexpire misc.news.internet.discuss = 5
Cách thiết lập nhiều máy chủ USENET
Như thảo luận, Leafnode cho phép người dùng lấy bài từ nhiều máy chủ từ xa. Hữu ích nếu dùng trình đọc USENET chỉ kết nối một server cùng lúc.
Hơn nữa, đặt tùy chọn thay đổi hành vi máy chủ từ xa thêm. Đặt biến nopost thành 1 để máy chủ từ xa chỉ lấy bài, không gửi qua nó.
Ngược lại, đặt biến noread làm ngược lại.
Ví dụ, muốn đặt Aioe làm server thêm "chỉ đọc" (read-only) cho instance Leafnode, gõ trong file cấu hình:
server = news.aioe.org nopost = 1
Tạo cronjob cập nhật Leafnode
Ngoài script tải tự động, Leafnode cũng cập nhật qua cronjob. Cho phép linh hoạt khi muốn cập nhật nhóm tin tức. Ví dụ, làm cho Leafnode cập nhật 12h/lần và khi khởi động máy.
Để làm vậy, chỉnh crontab của user news. User news là tài khoản hệ thống quản lý trực tiếp thư mục "/var/spool/news" và chạy server Leafnode.
Để chỉnh crontab user news, chạy lệnh:
sudo crontab -e -u news
Chèn lệnh muốn user news thực thi định kỳ. Ví dụ crontab Leafnode trông như sau:
* 3 * * 0 /usr/sbin/texpire * 2,14 * * * /usr/sbin/fetchnews @reboot /usr/sbin/fetchnews
Crontab này chạy chương trình bảo trì Leafnode texpire lúc 3 sáng mỗi Chủ Nhật, cũng chạy fetchnews 12h/lần.
Chúc mừng! Bây giờ bạn có kiến thức cơ bản dùng Leafnode làm proxy máy chủ USENET. Với đó, nếu tìm trình đọc USENET cho Leafnode, khuyến nghị năm lựa chọn này.
Câu hỏi thường gặp
1. Tải Leafnode trên Debian nhưng lỡ sai script cài đặt ban đầu. Làm sao quay lại?
Dùng chương trình dpkg-reconfigure khởi tạo lại script cài đặt Leafnode. Chương trình này tuy nhiên không có trong biến PATH mặc định.
Để chạy, gõ lệnh:
sudo /usr/sbin/dpkg-reconfigure leafnode
2. Muốn chạy Leafnode trong LAN. Làm sao?
Làm bằng cách chỉnh cả "/etc/hosts.deny" và "/etc/hosts.allow". Cho phép lọc tất cả kết nối đến server Leafnode.
Ví dụ file hosts.deny trông như sau:
leafnode: ALL
Ngược lại, file hosts.allow cho phép kết nối cục bộ dùng 192.168.254.* trông như sau:
leafnode: 127.0.0.1 192.168.254.0/255.255.255.0
Cần thay biến allowstrangers thành allowSTRANGERS và đặt giá trị 42.
3. Muốn tải nhiều bài khi kết nối đầu nhưng không muốn lấp đầy ổ đĩa. Có cách nào không?
Có! Chỉ cần biết hai biến: initialfetch và delaybody.
Muốn tải tất cả bài từ nhóm tin tức cụ thể, comment biến initialfetch báo Leafnode lấy tất cả bài có sẵn từ server từ xa trong nhóm này.
Tuy nhiên, tải toàn bộ bài tốn nhiều dung lượng. Giảm bằng cách chỉ tải tiêu đề bài và nội dung bài bạn quan tâm. Để làm vậy, đặt biến delaybody thành 1.