- Tóm tắt quy trình từng bước để dựng một router hoàn chỉnh bằng máy tính thông thường hoặc mini PC
- Cấu hình mạng có dây và không dây chỉ với các gói tối thiểu như
hostapd, dnsmasq, bridge-utils trên môi trường Debian hoặc Alpine Linux
- Chỉ cần 2 giao diện Ethernet là có thể biến desktop, laptop, SBC hay gần như bất kỳ thiết bị nào thành router
- Triển khai các chức năng ngang tầm router thương mại thông qua cấu hình tường lửa (nftables), dịch vụ DHCP/DNS và IP forwarding
- Có thể xây dựng hạ tầng mạng ổn định và linh hoạt chỉ bằng phần cứng bỏ đi và phần mềm mã nguồn mở
Cách biến bất kỳ thiết bị nào thành router
- Sau lệnh cấm nhập khẩu router tiêu dùng của chính phủ Mỹ, bài viết giới thiệu cách tự dựng router bằng phần cứng sẵn có
- Dựa trên kinh nghiệm vận hành router ổn định suốt nhiều năm bằng mini PC chạy Linux, tác giả trình bày từng bước về cấu hình cần thiết và quy trình thiết lập
- Về bản chất, router có cấu trúc giống hệt một máy tính thông thường, nên có thể triển khai bằng desktop, laptop, SBC và nhiều loại thiết bị khác
- Thiết lập trên Debian hoặc Alpine Linux với số gói tối thiểu như hostapd, dnsmasq, bridge-utils
- Mục tiêu không phải là phản ứng chính sách, mà là tái sử dụng phần cứng hiện có và nâng cao hiểu biết về mạng
Lựa chọn phần cứng
- Mini PC làm mát thụ động là lý tưởng, nhưng chỉ cần 2 giao diện Ethernet thì gần như thiết bị nào cũng dùng được
- Có thể bổ sung bằng USB-Ethernet dongle; độ tin cậy có thấp hơn đôi chút nhưng vẫn hoạt động tốt
- Ví dụ, thiết bị Celeron 3205U dual-core (1.5GHz) có thể xử lý khoảng 820~850Mbps có dây và khoảng 300Mbps không dây
- Trước đây tác giả từng ghép từ các linh kiện bỏ đi như ThinkPad T60, cầu nối ExpressCard-PCIe, switch Cisco 2960, router D-Link (chỉ dùng làm AP)
- Hình thức có thể thô sơ nhưng vẫn hoạt động như một router hoàn chỉnh
Cấu hình mạng
- Cấu hình giao diện
eth0: WAN
eth1: LAN (có dây)
wlan0: LAN (không dây)
- LAN có dây và không dây được gộp bằng bridge để hoạt động như cùng một mạng
- Nếu cần thêm cổng LAN, có thể gắn thêm USB-Ethernet dongle rồi nối vào bridge
- Hệ điều hành là Debian Linux, các thành phần bắt buộc gồm
hostapd: tạo mạng Wi-Fi
dnsmasq: dịch vụ DNS và DHCP
bridge-utils: bridge các cổng
Cài đặt và cấu hình ban đầu
- Thiết lập BIOS/UEFI
- Tắt PXE network boot
- Tắt quản lý điện năng cho USB/PCI
- Bật tùy chọn “tự khởi động lại khi có nguồn AC”
- Dùng HDMI dummy dongle để xử lý lỗi không khởi động khi không gắn màn hình
- Một số phần cứng cần bật kho lưu trữ non-free-firmware
- Cài firmware theo từng chipset không dây
- Intel:
firmware-iwlwifi
- Realtek:
firmware-ath9k-htc
- Atheros đời cũ:
firmware-atheros
Cài các gói cần thiết
Cố định tên giao diện mạng
Tạo mạng không dây
Cấu hình giao diện
Bật IP forwarding
Cấu hình tường lửa và NAT
Cấu hình DHCP và DNS
- Dùng
dnsmasq (/etc/dnsmasq.conf)
interface=br0
dhcp-range=192.168.1.50,192.168.1.250,255.255.255.0,6h
dhcp-option=option:router,192.168.1.1
dhcp-option=option:dns-server,192.168.1.1
cache-size=10000
- Kích hoạt dịch vụ
sudo systemctl enable dnsmasq
Quản lý cổng serial
Kiểm tra hoạt động
Tính năng bổ sung
- Có thể mở rộng với ghi log và phân tích lưu lượng, tách VLAN, hỗ trợ IPv6, VPN tunneling, định tuyến động (BGP, IGP)
- Cũng có thể thêm giám sát dựa trên Prometheus, port forwarding cho DMZ, phát hiện và chặn xâm nhập
- Tuy vậy, nên tránh cài quá nhiều phần mềm ngay trên router; tốt hơn là tách lưu lượng bằng DMZ hoặc VLAN
Kết luận
- Chỉ với phần mềm miễn phí và phần cứng bỏ đi cũng có thể dựng một router hoàn chỉnh
- Suy cho cùng, router cũng chỉ là một máy tính thông thường, và ai cũng có thể tự làm
- Có thể tái sử dụng thiết bị không còn dùng đến để xây dựng hạ tầng mạng ổn định và linh hoạt
1 bình luận
Ý kiến trên Hacker News
Bài viết rất hay. Tôi muốn giới thiệu script create_ap mà tôi đã bảo trì suốt thời gian dài
Có thể xem tại kho GitHub.
Đây là một shell script có thể biến bất kỳ máy tính Linux nào thành router WiFi chỉ với một dòng lệnh.
Về cơ bản, nó cấu hình card WiFi sang chế độ AP và tự động thiết lập WPA2/3, lọc MAC, cùng cả máy chủ DHCP/DNS.
Hầu như không có phụ thuộc nào, cũng không cần NetworkManager.
Tôi từng dùng nó với một mini PC Atom cũ làm gateway Internet cho gia đình, và cũng thường dùng để tạo mạng thử nghiệm cho reverse engineering thiết bị IoT
Có thể xem ví dụ liên quan trong bài này
Nhiều bình luận nói kiểu “cứ dùng X đi”, nhưng điểm chính của bài này là cho thấy cấu hình tối thiểu của định tuyến và sự đơn giản của nó
Nếu bạn từng dùng NAT trong Docker hay VM thì thực ra đã làm đúng việc đó rồi.
Tính năng điểm phát WiFi trên Android rốt cuộc cũng dùng cùng các chức năng của nhân Linux.
Có lẽ ngay cả tin nhắn này cũng đang được chuyển qua nhiều router phần mềm
Tôi nghĩ đây là một nguyên tắc thiết kế phần mềm tốt
Internet Connection Sharing của Windows cuối cùng cũng chỉ là một ô tích để bật NAT
Có vẻ việc gom tường lửa, switch, file server... vào một thiết bị rồi gọi chung là “router” khiến mọi người dễ nhầm lẫn
Bài này làm tôi nhớ lại chuyện cũ. Mục đích đầu tiên tôi dùng Linux là để biến một máy tính dư thành router
Tôi cắm hai NIC ISA 3Com vào một chiếc Pentium 100MHz và cấu hình theo IP-Masquerading HOWTO.
Sau đó tôi phát triển tiếp dựa trên sách Linux Firewalls của Robert Ziegler, rồi còn thêm cả bộ lọc spam và cache Squid, tận dụng phần cứng lẽ ra bị vứt đi theo cách khá hữu ích
Sau 27 năm, tôi vẫn hay bị gọi tới bởi những người hỏi “làm sao giải quyết rẻ tiền bằng Linux, dây thun và kẹp giấy”
Tham khảo: Linux Routers - A Primer for Network Administrators
Tôi đã dùng OPNsense/pfSense trong thời gian dài và rất khuyến nghị
Các tính năng như cập nhật tự động, sao lưu, đường hầm WireGuard, lọc gói dựa trên Suricata đều rất tốt
Khi quản lý mạng cuối tuần, việc cấu hình qua giao diện web tiện hơn terminal nhiều
Trang chính thức
pfSense, OpenWRT, Barracuda, Verizon OEM... chức năng thì giống nhau nhưng cách biểu đạt lại mỗi nơi một kiểu
Tôi không thích sản phẩm có thái độ “thiết bị biết rõ hơn tôi”. Thiếu linh hoạt là yếu tố quyết định
Tôi từng định tuyến tới 300Mb/s bằng mini PC Atom, nhưng khi chuyển sang Internet gigabit thì đổi sang OPNsense chạy trên VM
Việc passthrough riêng từng cổng cho VM bằng card Intel 4 cổng khá thú vị
Tôi đang dùng thiết bị router N100 + 10Gbit, nhưng có cảm giác độ trễ (latency) cao hơn so với router phần cứng chuyên dụng
Chipset chuyên dụng xử lý gói mà không cần CPU can thiệp nên hiệu quả hơn nhiều.
Tôi tò mò không biết có ai thực sự đo được khác biệt kiểu này chưa. Phần lớn chỉ test băng thông
OpenWRT có hỗ trợ một số API switch phần cứng, nhưng gần như không có dưới dạng card PCIe
CCR2004-1G-2XS-PCIe của Mikrotik là một ví dụ thú vị.
Nó kết nối qua PCIe một bo mạch router hoàn chỉnh chạy RouterOS.
Nếu bạn tận dụng được cổng 25Gbps thì rất đáng giá, còn không thì cũng không khác RB5009 là mấy
Nếu có switch quản lý được thì cấu hình router với một NIC cũng khả thi
Chỉ cần đặt thành cổng trunk 802.1q là có thể dùng switch như một bộ mở rộng giao diện
Nhà tôi đang dùng cấu hình kiểu “router-on-a-stick” như vậy.
Kết hợp switch PoE với Aruba IAP cũ có thể dựng WiFi chất lượng cao hơn rất nhiều so với đồ tiêu dùng
Trước đây tôi dùng Thinkpad làm router, còn giờ chuyển sang Dell Optiplex để làm router homelab vừa chạy thêm VM
Alpine Linux rất hợp cho mục đích này
Nhưng để mua một AP có hiệu năng tương đương thì phải tốn khoảng 180 đô, khá tiếc
Tôi tò mò về lý do chính sách đằng sau việc cấm nhập khẩu router
Phần lớn lưu lượng giờ đã được mã hóa bằng TLS rồi, nên tôi không hiểu vì sao vẫn bị xem là rủi ro
Có phải vì botnet, DDoS, mật khẩu mặc định yếu, hoặc khả năng xâm nhập mạng nội bộ không?
Các trường hợp như Volt Typhoon, Flax Typhoon vẫn đang hoạt động.
Cấm thiết bị nước ngoài không giải quyết triệt để, nhưng vì bảo mật là một quy trình chứ không phải sản phẩm, nên kiểm soát chuỗi cung ứng là điều cần thiết
Trước đây tôi từng làm Bot Mitigation ở Amazon và thấy lưu lượng phát sinh từ thiết bị tiêu dùng trên toàn thế giới.
Chỉ với chưa tới một nửa số thiết bị đang hoạt động cũng đã tạo ra lượng lưu lượng ở mức gần như không thể chặn nổi
Dù là Huawei hay Netgear thì nguồn gốc DDoS cũng như nhau
Truy cập DNS/siêu dữ liệu lưu lượng, tấn công mạng nội bộ, DDoS, cắt Internet...
Cuối cùng thì nó có thể bị lạm dụng như công cụ giám sát và kiểm soát
Khả năng thiết bị nước ngoài có backdoor là một giả định hoàn toàn thực tế
Câu “cứ dùng OPNsense đi” là lời khuyên tốt trong môi trường vận hành, nhưng lại tệ nhất cho mục đích học tập
Giá trị của bài này là cho thấy định tuyến hoạt động theo nguyên lý đơn giản đến mức nào
Có một điểm bài viết không nhắc tới: khi dùng làm router, có thể giảm overhead bằng cách đặt trong
/etc/sysctl.d/10_router.confnhững cấu hình như vậy.
Nó hiệu quả cho việc tinh chỉnh giảm độ trễ và jitter cho VoIP hoặc chơi game.
Tôi cũng chỉnh gro_flush_timeout, sch_cake, napi_defer_hard_irqs...
Mục tiêu là để người nhà cảm nhận được trải nghiệm chơi game tốt hơn
Với tôi thì chỉ fq_codel thôi cũng đã đủ ổn định trong môi trường 10Gbps
Còn tôi thì lại tò mò hơn về việc thay thế modem quang
Thiết bị AT&T cấp cho tôi thường xuyên bị chậm và cũng đáng ngờ về mặt bảo mật.
Không biết có hướng dẫn nào về cách tự thay bằng modem quang riêng không