Mình vừa mới chuyển nhà từ Toyama lên Osaka, và phải chuyển qua sử dụng dịch vụ Internet mới do Sony cung cấp. Sony NURO mang đến tốc độ rất ấn tượng — gói cơ bản đã đạt đến 2Gbps (tốc độ thực tế mình đo được khoảng 1Gbps với Wi-Fi 6), so với dịch vụ cáp quang NTT FLET’s Hikari 1Gbps khi đo thực tế chỉ đạt khoảng 300Mbps.
Tuy nhiên, sau khi lắp đặt xong, mình mới phát hiện: Sony NURO sử dụng công nghệ MAP-E, một dạng NAT đặc biệt (tương tự như CG-NAT) được thiết kế để chia sẻ địa chỉ IPv4 giữa nhiều người dùng. Hậu quả là các tính năng quen thuộc cho homelab như mở port (port forwarding) hay DMZ sẽ không còn hiệu lực. Đồng nghĩa với việc mình không thể truy cập từ bên ngoài vào dịch vụ mạng nội bộ ở nhà thông qua địa chỉ Public IPv4 như cách thông thường được nữa.
Để giải quyết vấn đề này, mình có thể sử dụng 1 trong 2 cách sau:
- Dùng Cloudflare Tunnel để tạo nối bảo mật vào mạng nội bộ không cần VPN, không cần mở port
- Sử dụng WireGuard tạo kết nối giữa VPS và Home server, sau đó dùng VPS làm Reverse Proxy cho dịch vụ mạng ở nhà.
Tuy nhiên, hai cách này đều yêu cầu thiết lập khá rắc rối, đặc biệt khi ở nhà đang sẵn có nhiều dịch vụ mạng cần truy cập từ bên ngoài. Để đơn giản hóa việc thiết lập, mình sẽ sử dụng phương án mới: kết hợp Tailscale và Caddy Server cài đặt trên VPS.
Mô hình kết nối sẽ như bên dưới

Mục Lục
I. Cài đặt Tailscale
Tham khảo lại bài viết bên dưới để hiểu rõ hơn về Tailscale và cách cài đặt.
1. Trên máy chủ nội bộ (Proxmox, NAS…)
Chạy lệnh sau trên máy chủ nội bộ để cài đặt Tailscale. Mình cài đặt trên 1 LXC của Proxmox
curl -fsSL https://tailscale.com/install.sh | sh
Code language: Nginx (nginx)
Kích hoạt Tailscale
sudo tailscale up --advertise-routes=192.168.0.0/24
Code language: Nginx (nginx)
Thông số --advertise-routes=192.168.0.0/24
: thông báo cho Tailscale rằng node này (LXC Container) có thể truy cập đến toàn bộ mạng LAN nội bộ (bao gồm NAS, camera, v.v…). Bạn cần thay thế 192.168.0.0/24
bằng subnet đang dùng của mạng LAN nội bộ.
Truy cập vào trang quản lý của Tailscale: admin.tailscale.com, vào tab Machines, chọn Node LXC bạn vừa mới cài đặt. Phần Subnets, bạn sẽ thấy hiện ra mục Awaiting Approval, bấm vào Edit.

Tick chọn vào kết bên subnet 192.168.0.0/24
và bấm Save để xác nhận Tailscale net có quyền truy cập vào mạng LAN nội bộ 192.168.0.0/24
thông qua Node LXC.

2. Trên VPS
Tương tự, cài đặt Tailscale bằng lệnh sau
curl -fsSL https://tailscale.com/install.sh | sh
Code language: Nginx (nginx)
Kích hoạt Tailscale bằng lệnh
sudo tailscale up --accept-routes
Code language: Nginx (nginx)
Thông số --accept-routes
để cho phép VPS truy cập vào subnet 192.168.0.0/24
đã được thiết lập trước đó.
II. Kiểm tra kết nối giữa VPS và mạng nội bộ
Truy cập SSH vào VPS và ping thử vào NAS hay VM bất kỳ trong mạng nội bộ. Ví dụ:
ping 192.168.0.50
Code language: CSS (css)
Nếu ping thành công nghĩa là kết nối Tailscale đã hoạt động đúng như ý muốn.
III. Thiết lập Caddy Server trên VPS
Mình đã có sẵn Caddy Server chạy bằng Docker trên homelab ở nhà, giờ chỉ việc bưng toàn bộ thiết lập lên VPS là xong.
Tạm ngưng Caddy Server
cd ~/caddy
docker compose down
Code language: Bash (bash)
Sau đó rsync toàn bộ thư mục caddy lên VPS
cd ~
rsync -avz caddy root@IP-VPS:~/.
Code language: Nginx (nginx)
Kích hoạt lại Caddy trên VPS
cd ~/caddy
docker compose up -d
Code language: Bash (bash)
Nếu bạn thiết lập Caddy Server từ đầu, tham khảo bài viết bên dưới:
IV. Trỏ domain về VPS
Truy cập trang quản lý DNS (Cloudflare, Namecheap…), cập nhật lại các bản ghi của các tên miền đang trỏ về IP của Homeserver thành IP của VPS.
Chờ vài phút để Caddy hoàn thành việc tạo chứng chỉ SSL. Sau đó mình có thể truy cập vào các dịch vụ mạng ở nhà thông qua tên miền như bình thường.
Vậy là xong!