Tailscale Linux fix lỗi không truy cập được LAN IP khi accept-routes
Bài này mình sẽ chia sẻ cách để sử dụng trên Linux và đặc biệt là cách để fix lỗi không truy cập được IP nội bộ của Linux khi bật chế độ –accept-routes của Tailscale.
Nếu các bạn đang sử dụng NAS Synology, có thể tham khảo bài này: Sử dụng Tailscale với Synology NAS
Video
Nội dung chính
Cài đặt Tailscale
Để cài đặt, chúng ta sẽ dùng lệnh có trên trang chủ của Tailscale:
curl -fsSL https://tailscale.com/install.sh | sh
Sau khi cài đặt xong, các bạn dùng lệnh:
sudo tailscale up
Trên màn hình sẽ hiện 1 đường link để đăng nhập Tailscale vào tài khoản mà các bạn đang sử dụng. Các bạn truy cập đường link bằng trình duyệt để đăng nhập là thiết bị được đăng kí vào Tailnet.
Lúc này, nếu trong Tailnet của các bạn có thiết bị đang quảng bá subnet route, linux sẽ có một cảnh bảo là –accept-routes chưa được bật. Các bạn khoan hãy bật vội, vì có thể gây ra lỗi không truy cập được IP nội bộ của máy Linux đó. Mình sẽ chia sẻ giải pháp cho vấn đề này ở phần sau của bài viết.
Bật Subnet Router
Đây là tính năng quảng bá subnet router của tailscale, tức là thiết bị của các bạn sẽ thông báo với các thiết bị trong Tailnet rằng, nếu muốn truy cập subnet mà tôi quảng bá, hãy truy cập thông qua tôi.
Khi bật tính năng này lên, các bạn sẽ đạt được 2 kết quả:
- Có thể dùng chính IP LAN để truy cập các thiết bị trong Tailnet từ bất cứ đâu mà không cần phải sử dụng IP của Tailscale. Việc này có lợi khi bạn dùng cả mạng nội bộ lẫn mạng bên ngoài, chỉ cần dùng 1 IP nội bộ duy nhất mà không phải đổi qua lại IP nội bộ hay IP của Tailscale
- Có thể truy cập các thiết bị trong mạng LAN không cài được Tailscale, ví dụ như các router phổ thông, đầu ghi NVR, hay máy in…
Tailscale cũng có hướng dẫn khá chi tiết cho tính năng này:
Đầu tiên các bạn bật tính năng IP forwarding với 3 lệnh dưới:
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
Sau đó các bạn có thể dùng lệnh dưới đây để cấu hình subnet-router, các bạn thay IP bằng dải IP local của các bạn, ví dụ 10.1.1.0/24.
sudo tailscale set --advertise-routes=192.0.2.0/24,198.51.100.0/24
Lưu ý, đối với việc sử dụng VPN, các bạn nên đổi IP local sang một dải ít phổ biến. Tức là không nền dùng 192.168.1.0/24, vì nó là dải mặc định của gần như mọi nơi. Các bạn nên đổi sang một dải khác.
Sau khi cấu hình xong, các bạn vào trang quản lý của Tailscale để chấp nhận subnet-router cho thiết bị này.
Bật Exit-node
Exit-note hiểu đơn giản là biến thiết bị Linux của các bạn trở thành 1 gateway VPN cho các thiết bị trong tailnet. Khi các thiết bị khác chọn Linux làm exit-note, toàn bộ lưu lượng mạng của các thiết bị sẽ chuyển hướng về Linux trước khi đi ra ngoài internet.
Một use-case điển hình của tính năng này là để có một VPN tunnel an toàn khi các bạn sử dụng mạng công cộng. Thay vì kết nối đến gateway của mạng công cộng mà không biết trên đường kết nối có những rủi ro gì, các bạn dùng exitnote thì sẽ có một đường hầm bảo mật kết nối về mạng nội bộ an toàn ở nhà trước, rồi từ đó mới thật sự đi ra internet. Việc này giúp phòng tránh các dạng tấn công MiTM (Man in the middle).
Để cấu hình các bạn dùng lệnh như sau theo hướng dẫn của tailscale:
sudo tailscale set --advertise-exit-node
Sau khi cấu hình xong, các bạn vào trang quản lý của Tailscale để chấp nhận exit-node cho thiết bị này.
Bật SSH
Đối với Linux, việc sử dụng SSH gần như là phải có, và tailscale có tính năng giúp truy cập ssh từ xa an toàn. Các bạn có thể cấu hình theo hướng dẫn của tailscale bằng lệnh:
tailscale set --ssh
Sau khi cấu hình xong, các bạn vào trang quản lý của Tailscale, mục Access Control, các bạn bật mục Enable Tailscale SSH để tự động thêm rule cho cấu hình truy cập.
Bật accept-routes và fix lỗi không truy cập được IP LAN.
Khi trong mạng có thiết bị đang quảng bá subnet router, chúng ta phải bật accept-routes thì Linux mới truy cập được đến subnet mà thiết bị khác đang quảng bá. Tuy nhiên, có lẽ do xung đột phần mềm hoặc cấu hình, khi bật –accept-routes, chúng ta sẽ bị mất kết nối đến IP LAN của Linux.
Các bạn có thể dùng lệnh ‘ip rule show’, thường sẽ trả kết quả như sau:
0: from all lookup local
5210: from all fwmark 0x80000/0xff0000 lookup main
5230: from all fwmark 0x80000/0xff0000 lookup default
5250: from all fwmark 0x80000/0xff0000 unreachable
5270: from all lookup 52
32766: from all lookup main
32767: from all lookup default
Các bạn có thể thấy table 52 của Tailscale nằm trên table main, đây có thể là nguyên nhân gây lỗi
Để fix lỗi này, chúng ta sẽ thêm 1 rule mới cho table main và đặt cao hơn table 52 của tailscale, các bạn có thể làm như sau:
Bước 1, tạo 1 services mới.
sudo nano /etc/systemd/system/tailscale-lan-rule.service
Bước 2, điền cấu hình bên dưới vào, Lưu và đóng file bằng tổ hợp Ctrl+O, ấn Enter, rồi ấn Ctrl+X.:
[Unit]
Description=Tailscale LAN Override Rule
After=network-online.target tailscaled.service
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/sbin/ip rule add from all lookup main suppress_prefixlength 0 pref 5000
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Đoạn cấu hình này sẽ thêm 1 IP rule mới vào hệ thống (from all lookup main suppress_prefixlength 0 pref 5000) và đặt nó ở vị trí cao hơn rule của Tailscale.
Bước 3, chạy service mới này bằng lệnh 3 lệnh dưới: (lệnh reboot cuối cùng không bắt buộc)
sudo systemctl daemon-reload
sudo systemctl enable tailscale-lan-rule.service
sudo systemctl start tailscale-lan-rule.service
sudo reboot
Sau đó các bạn dùng lệnh ‘ip rule show’ sẽ thấy kết quả như dưới đây, các bạn sẽ thấy có 1 dòng với metric 5000 để lookup main table và nằm trên table 52 của tailscale.
0: from all lookup local
5000: from all lookup main suppress_prefixlength 0
5210: from all fwmark 0x80000/0xff0000 lookup main
5230: from all fwmark 0x80000/0xff0000 lookup default
5250: from all fwmark 0x80000/0xff0000 unreachable
5270: from all lookup 52
32766: from all lookup main
32767: from all lookup default
Lúc này các bạn hoàn toàn có thể yên tâm chạy lệnh mà không sợ bị mất kết nối tới IP LAN của Linux:
tailscale set --accept-routes=true
Và như vậy là mình đã chia sẻ cách sử dụng Tailscale với Linux.
Nếu thấy nội dung bài viết hữu ích, hãy chia sẻ cho bạn bè và người thân. Đừng quên theo dõi Ngon Bổ Xẻ qua Facebook và Youtube để luôn cập nhật các nội dung mới nhất. Ngoài ra, mình cũng có lập Group FB chuyên chia sẻ các deal hời cho anh em về công nghệ, điện từ, gia dụng… các bạn cũng có thể tham gia nha. Một lần nữa, chân thành cám ơn các bạn và hẹn gặp lại trong những nội dung kế tiếp ❤️
Chia sẻ bài viết:
