Danh mục: Network

  • Cloudflare Tunnel – Kết nối bảo mật vào mạng nội bộ không cần VPN, không cần mở port

    Để truy cập dịch vụ mạng đang được cài đặt trên máy chủ đặt ở nhà, hiện tại mình đang sử dụng 2 phương pháp:

    Truy cập bằng Nginx Proxy Manager

    Cách này được áp dụng cho các trang web demo thử nghiệm, được mình thiết lập để khách hàng có thể truy cập vào duyệt thiết kế – tính năng.

    Các bước thiết lập sẽ như sau:

    1. Thiết lập Dynamic DNS để tự động cập nhật IP ở nhà cho tên miền. Mình sẽ truy cập thông qua tên miền này.
    2. Cài đặt Nginx Proxy Manager trên máy chủ / máy ảo nằm trong mạng nội bộ ở nhà để làm Reverse Proxy cho các dịch vụ mạng khác.
    3. Mở port 80 / 443 trên Router chính, chuyển hướng về máy chủ Nginx Proxy Manager.
    4. Tạo Proxy Host trên Nginx Proxy Manager, chuyển hướng về dịch vụ mạng tương ứng cần được truy cập từ bên ngoài.

    Lập lại bước 4 cho các dịch vụ mạng khác mình muốn truy cập từ bên ngoài.

    Truy cập bằng WireGuard VPN

    Đối với các dịch vụ mạng nhạy cảm, chứa thông tin cá nhân quan trọng, ví dụ Guacamole, Bitwarden,… mình sẽ không bao giờ mở cho truy cập từ bên ngoài vào để tránh rủi ro bị hack.

    Thay vào đó, mình sẽ truy cập từ bên ngoài vào mạng ở nhà thông qua WireGuard VPN. Sau khi kết nối thành công, mình sẽ truy cập thông qua IP nội bộ đang thiết lập sẵn ở nhà.

    Cách thiết lập cũng tương tự:

    1. Thiết lập Dynamic DNS để tự động cập nhật IP ở nhà cho tên miền. Mình sẽ truy cập thông qua tên miền này.
    2. Cài đặt WireGuard VPN lên máy chủ / máy ảo nằm trong mạng nội bộ hoặc thiết lập WireGuard lên router nếu được hỗ trợ (Mikrotik, OpenWRT)
    3. Mở port 51820 (UDP) trên Router chính, chuyển hướng về máy chủ WireGuard
    4. Tạo Peer cho client để truy cập từ bên ngoài vào WireGuard VPN Server trong nhà.

    Hạn chế của NPM và VPN

    Cả hai cách này có ưu điểm là thiết lập đơn giản, nhanh gọn. Nhưng cả hai đều có cùng nhược điểm:

    • Cần phải có IP tĩnh, hoặc cần phải thiết lập Dynamic DNS trong trường hợp mạng ở nhà có IP động.
    • Cần phải mở port trên Router chính: 80 / 443 khi dùng NPM hoặc 51820 khi dùng WireGuard VPN

    Việc mở port trên router ở nhà luôn tiềm ẩn nhiều rủi ro nếu bạn không biết cách bảo mật mạng nội bộ. Trường hợp xui xẻo có thể bị người ngoài hack và truy cập vào mạng nội bộ để lấy cắp thông tin cá nhân.

    Ngoài ra, trong nhiều trường hợp, đường mạng của bạn bị nhà cung cấp nhét vào CGNAT, khiến mạng ở nhà không có IP Public (IP hiện ra trong Router là IP nội bộ nằm trong hệ thống NAT của nhà mạng).

    Lúc này việc mở port trên router đều không còn ý nghĩa, khiến cả hai cách truy câp thông qua NPM hay WireGuard VPN đều vô dụng.

    Để khắc phục những hạn chế này, mình vừa mới tìm ra một giải pháp mới: truy cập vào mạng nhà thông qua Cloudflare Tunnel – dịch vụ miễn phí do Cloudflare cung cấp.

    Bài viết này mình sẽ giới thiệu và hướng dẫn sử dụng Cloudflare Tunnel để kết nối vào mạng nội bộ ở nhà bảo mật và tiện lợi hơn.

    Cloudflare Tunnel là gì?

    Cloudflare Tunnel là một phần mềm tạo ra đường truyền mạng bảo mật, kết nối hệ thống máy chủ của Cloudflare với máy chủ trong mạng nội bộ. Mọi kết nối từ bên ngoài đều phải thông qua sự kiểm duyệt của Cloudflare trước khi được chuyển hướng đến mạng nội bộ. Nhờ vậy, bạn có thể ẩn địa chỉ IP của mạng nhà, ngăn chặn tấn công mạng từ bên ngoài.

    Ưu điểm khi sử dụng Cloudflare Tunnel:

    • Chặn truy cập trực tiếp vào mạng ở nhà, không sợ bị lộ địa chỉ IP
    • Tận dụng hệ thống Firewall và chống DDoS của Tunnel để bảo vệ hệ thống mạng nội bộ.
    • Không cần mở port, không cần có IP tĩnh, cũng không cần phải thiết lập Dynamic DNS.
    • Kết hợp thêm tính năng Zero Trust của Cloudflare để xác thực tất cả truy cập vào mạng nội bộ, tối ưu bảo mật.

    Nhược điểm khi dùng Cloudflare Tunnel:

    • Phụ thuộc vào hệ thống của Cloudflare. Nếu Cloudflare gặp sự cố thì nhiều khả năng sẽ không thể truy cập vào mạng nội bộ.
    • Không còn làm chủ 100% dữ liệu cá nhân vì mọi kết nối đều đi phải đi qua Cloudflare.

    Hướng dẫn thiết lập Cloudflare Tunnel

    Dài dòng nãy giờ đủ rồi. Giờ vô phần chính: hướng dẫn cách thiết lập Cloudflare Tunnel để truy cập vào dịch vụ mạng ở nhà.

    Yêu cầu: Bạn cần phải chuyển tên miền về để Cloudflare quản lý thì mới sử dụng dịch vụ Cloudflare Tunnel.

    1. Thiết lập Cloudflare Zero Trust

    Tất cả các dịch vụ liên quan đến Cloudflare Tunnel được tập trung về 1 trang quản lý riêng gọi là Cloudflare Zero Trust. Ở lần đầu tiên truy cập, Cloudflare sẽ yêu cầu thiết lập các thông số cơ bản như dưới đây.

    Bấm Next để tiếp tục.

    Chọn tên nhóm. Bạn có thể sử dụng tên bất kỳ, và tên này có thể thay đổi được trong tương lai nếu muốn.

    Dịch vụ Zero Trust của Cloudflare có nhiều mức giá khác nhau. Với nhu cầu sử dụng cá nhân. gói Free miễn phí là đủ dùng. Bấm vào Select Plan trong mục Free ($0 / user / month)

    Bấm Proceed để tiếp tục.

    Bấm Purchase để xác nhận bạn chọn gói Free. Tổng bill là $0.00 nên Cloudflare không yêu cầu nhập thông tin thẻ gì đâu.

    2. Tạo Tunnel

    Sau khi thiết lập thành công, bạn truy cập vào Tunnels (nằm trong mục Access) ở menu bên trái. Bấm vào Create a tunnel để tạo kết nối.

    Đặt tên cho kết nối, và bấm Save Tunnel để tiếp tục.

    2. Cài đặt cloudflared

    Ở bước tiếp theo, bạn sẽ cần cài đặt công cụ cloudflared lên máy chủ nằm trong mạng nội bộ. Mình chọn cách cài đặt bằng Docker cho nhanh gọn.

    Truy cập SSH vào máy chủ trong mạng nội bộ và chạy dòng lệnh hiện ra ở trên. Mình bổ sung thêm thông số -d --restart always sau docker run để chạy dưới dạng nền và luôn tự khởi động lại nếu máy chủ bị cúp điện và mở lại.

    Terminal window
    docker run -d --restart always cloudflare/cloudflared:2022.6.3 tunnel --no-autoupdate run --token eyJhIjoiYjk5YmI3M2M1ZDk2NzAxODk3NGI0NDFjZDFlOWQ0YmIiLCJ0IjoiM2NmN2JkYzktMGE5YS00MTRmLTgxOWYtNDJlYTllZjAwZGE4IiwicyI6Ill6azFaamczT1dZdE9XRm1ZUzAwWW1Ka0xUbG1PRE10TUdZNE9HRXhZemd3WlCCSSDAS9

    Sau khi chạy trên máy chủ xong, quay lại trình duyệt, bạn sẽ thấy mục Connectors hiện ra thông báo đã kết nối thành công. Mục Origin IP sẽ hiện ra địa chỉ IP của mạng ở nhà. Bấm Next để tiếp tục.

    4. Điều hướng dịch vụ mạng

    Ở bước route tunnel, bạn sẽ thiết lập tương tự như tạo Proxy Host trên Nginx Proxy Manager.

    • Subdomain: chọn tên miền phụ.
    • Domain: chọn tên miền.
    • Path: không bắt buộc.
    • Service: chọn loại kết nối (HTTP, HTTPS, RDP,…) và địa chỉ IP nội bộ cùng port tương ứng của dịch vụ mạng cần điều hướng.

    Ở đây mình muốn tạo kết nối đến dịch vụ Guacamole, nên cần phải điền thêm guacamole vào mục Path.

    Bấm Save Guacamole tunnel. Mục Tunnels giờ đã hiện ra kết nối với tên gọi Guacamole cùng trạng thái ACTIVE (đang hoạt động).

    5. Truy cập vào dịch vụ mạng

    Mở trình duyệt web truy cập vào địa chỉ http://remote.thuanbui.me/guacamole, mình sẽ được chuyển hướng về dịch vụ Guacamole đang được cài đặt ở nhà.

    Cloudflare Tunnel đã hoạt động ngon lành!

    Để có thể truy cập bằng https, mình truy cập vô mục SSL/TTS của trang quản lý tên miền, chọn Full (strict).

    Sau đó, mình có thể truy cập vào Guacamole theo địa chỉ https://remote.thuanbui.me/guacamole

    Vậy là xong! Chúc bạn thực hiện thành công.

    Ở bài viết sau, mình sẽ hướng dẫn thêm cách thiết lập bảo mật thông qua xác thực email để ngăn chặn truy cập trái phép vào dịch vụ mạng.

    Nguồn: https://thuanbui.me/cloudflare-tunnel-homelab/

  • Tailscale – Thiết lập mạng riêng ảo bảo mật dễ dàng, nhanh gọn

    Hiện tại mình đang quản lý 8 VPS, nằm rải rác khắp nơi: Đức (1 của Hetzner), HongKong (3 của HostHatch, 1 của GreencloudVPS), Vietnam (1 của AZdigi, 1 của GreencloudVPS), Mỹ (1 của GreencloudVPS). Ngoài ra còn có thêm vô số các máy ảo VM / LXC được thiết lập trên máy chủ Proxmox ở nhà.

    Mình muốn kết nối tất cả các VPS này với nhau để tạo thành một mạng riêng ảo (VPN – Virtual Private Network), để tiện việc sao lưu, đồng bộ dữ liệu. Giờ phải làm sao?

    Dĩ nhiên muốn tạo VPN thì phải xài dịch vụ VPN rồi. WireGuard VPN là lựa chọn hoàn hảo nhất hiện nay để tạo mạng riêng ảo.

    Tuy nhiên, việc cấu hình mạng riêng ảo cho hơn chục thiết bị kết nối với nhau thông qua WireGuard nó quá rối rắm và mất thời gian. Chưa kể đến việc quản lý và bảo trì cũng sẽ gặp nhiều rắc rối.

    Để giải quyết vấn đề này, mình đã tìm đến Tailscale – một dịch vụ VPN giúp tạo thành mạng riêng ảo bảo mật siêu nhanh, siêu dễ.

    Dưới đây là hướng dẫn chi tiết cách sử dụng Tailscale.

    I. Tailscale là gì?

    Tailscale là một dịch vụ VPN cho phép kết nối các thiết bị và ứng dụng của bạn ở khắp mọi nơi trên thế giới tạo thành một mạng LAN ảo. Các kết nối giữa hai thiết bị được mã hóa dựa trên giao thức WireGuard, bảo đảm chỉ có các thiết bị nằm trong hệ thống mạng riêng ảo có thể giao tiếp với nhau.

    Tailscale kết nối các thiết bị tạo thành hệ thống mạng dạng lưới ngang hàng (peer-to-peer mesh network), được gọi là tailnet. Nhờ vậy giúp cải thiện tốc độ kết nối, giảm độ trễ và tăng sự ổn định cho hệ thống mạng.

    Kết nối VPN truyền thống: Sử dụng nút mạng trung tâm để kết nối các thiết bị với nhau, làm tăng độ trễ và dễ bị nghẽn mạng, gây ảnh hưởng đến sự ổn định. Ảnh: https://tailscale.com/kb/1151/what-is-tailscale/
    Kết nối VPN truyền thống: Sử dụng nút mạng trung tâm để kết nối các thiết bị với nhau, làm tăng độ trễ và dễ bị nghẽn mạng, gây ảnh hưởng đến sự ổn định. Ảnh: https://tailscale.com/kb/1151/what-is-tailscale/
    Khi sử dụng Tailscale, các thiết bị được kết nối trực tiếp với nhau, giúp giảm độ trễ kết nối. Ảnh: https://tailscale.com/kb/1151/what-is-tailscale/
    Khi sử dụng Tailscale, các thiết bị được kết nối trực tiếp với nhau, giúp giảm độ trễ kết nối. Ảnh: https://tailscale.com/kb/1151/what-is-tailscale/

    1. Ưu điểm

    • Tốc độ kết nối nhanh vì được phát triển dựa trên WireGuard.
    • Đơn giản, dễ cài đặt và sử dụng, không cần cấu hình phức tạp.
    • Miễn phí cho 20 thiết bị.

    2. Nhược điểm

    • Phụ thuộc vào máy chủ của Tailscale.
    • Tốc độ không bằng kết nối trực tiếp.

    II. Tạo tài khoản Tailscale

    Để có thể sử dụng Tailscale, đầu tiên cần phải đăng ký tài khoản: https://login.tailscale.com/start

    Sau khi đăng ký và đăng nhập vào tài khoản, bạn sẽ được chuyển hướng đến trang quản lý như dưới đây

    Trong hình trên là tài khoản của mình với các thiết bị đã được cài đặt Tailscale, được cấp địa chỉ IP riêng trong mạng riêng.

    III. Cài đặt Tailscale

    Để thêm thiết bị vào mạng riêng ảo của Tailscale, bạn cần cài đặt Tailscale client lên máy. Tailscale cung cấp ứng dụng cho các hệ điều hành phổ biến hiện nay: macOS, iOS, Windows, Linux, Android. Xem chi tiết cách cài đặt ở đây: https://tailscale.com/download

    Mình cài đặt Tailscale lên EndeavourOS Linux bằng lệnh sau

    yay -S install tailscale

    Hoặc bạn có thể cài đặt lên tất cả các bản phân phối Linux bằng dòng lệnh này

    Terminal window
    curl -fsSL https://tailscale.com/install.sh | sh

    Sau khi cài Tailscale, mình cần kích hoạt cho nó hoạt động

    Terminal window
    sudo systemctl enable tailscaled
    sudo systemctl start tailscaled

    Kết nối thiết bị vào mạng riêng ảo

    Terminal window
    sudo tailscale up

    Terminal sẽ hiện ra một đường link, yêu cầu mở trình duyệt và đăng nhập để xác thực.

    To authenticate, visit:
    https://login.tailscale.com/a/7b6e22b9f748

    Sau khi đăng nhập thành công, trình duyệt sẽ hiện ra thông báo “Authorizatoin successful”. Đồng thời trong Terminal cũng sẽ hiện ra thông báo Success.

    Máy đã được thêm vào mạng riêng ảo thành công. Kiểm tra địa chỉ IP do Tailscale cấp bằng lệnh

    Terminal window
    tailscale up

    Kết quả trả về

    100.108.55.94
    fd7a:115c:a1e0:ab12:4843:cd96:626c:375e

    Mình thử ping đến 1 thiết bị khác trong mạng riêng ảo

    Terminal window
    ping 100.118.121.87

    Kết nối ngon lành

    PING 100.118.121.87 (100.118.121.87) 56(84) bytes of data.
    64 bytes from 100.118.121.87: icmp_seq=1 ttl=64 time=103 ms
    64 bytes from 100.118.121.87: icmp_seq=2 ttl=64 time=33.0 ms
    64 bytes from 100.118.121.87: icmp_seq=3 ttl=64 time=34.3 ms
    64 bytes from 100.118.121.87: icmp_seq=4 ttl=64 time=34.6 ms
    64 bytes from 100.118.121.87: icmp_seq=5 ttl=64 time=34.6 ms
    64 bytes from 100.118.121.87: icmp_seq=6 ttl=64 time=31.1 ms
    64 bytes from 100.118.121.87: icmp_seq=7 ttl=64 time=30.1 ms
    64 bytes from 100.118.121.87: icmp_seq=8 ttl=64 time=32.5 ms

    IV. Kiểm tra băng thông

    Mình sử dụng công cụ iperf3 để kiểm tra băng thông kết nối

    Chạy iperf3 server trên VPS đặt ở HongKong

    Terminal window
    iperf3 -s

    1. Kết nối trực tiếp

    Chạy iperf3 client trên máy tính ở nhà để kiểm tra băng thông

    Terminal window
    iperf3 -c ycb.vn

    Kết quả

    Connecting to host ycb.vn, port 5201
    [ 5] local 192.168.0.22 port 52632 connected to 2xx.xxx.xxx.222 port 5201
    [ ID] Interval Transfer Bitrate Retr Cwnd
    [ 5] 0.00-1.00 sec 14.3 MBytes 120 Mbits/sec 148 457 KBytes
    [ 5] 1.00-2.00 sec 15.3 MBytes 128 Mbits/sec 0 510 KBytes
    [ 5] 2.00-3.00 sec 17.6 MBytes 148 Mbits/sec 0 546 KBytes
    [ 5] 3.00-4.00 sec 16.4 MBytes 138 Mbits/sec 2 405 KBytes
    [ 5] 4.00-5.00 sec 14.1 MBytes 118 Mbits/sec 0 442 KBytes
    [ 5] 5.00-6.00 sec 15.3 MBytes 128 Mbits/sec 0 463 KBytes
    [ 5] 6.00-7.00 sec 10.6 MBytes 89.2 Mbits/sec 21 359 KBytes
    [ 5] 7.00-8.00 sec 13.0 MBytes 109 Mbits/sec 0 378 KBytes
    [ 5] 8.00-9.00 sec 12.9 MBytes 108 Mbits/sec 0 397 KBytes
    [ 5] 9.00-10.00 sec 10.6 MBytes 89.2 Mbits/sec 34 319 KBytes
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval Transfer Bitrate Retr
    [ 5] 0.00-10.00 sec 140 MBytes 118 Mbits/sec 205 sender
    [ 5] 0.00-10.03 sec 137 MBytes 115 Mbits/sec receiver
    iperf Done.

    2. Kết nối thông qua Tailscale

    Đổi địa chỉ Server thành IP của Tailscale: 100.118.121.87

    Terminal window
    iperf3 -c 100.118.121.87

    Kết quả

    Connecting to host 100.118.121.87, port 5201
    [ 5] local 100.127.160.108 port 47044 connected to 100.118.121.87 port 5201
    [ ID] Interval Transfer Bitrate Retr Cwnd
    [ 5] 0.00-1.00 sec 10.7 MBytes 89.5 Mbits/sec 205 221 KBytes
    [ 5] 1.00-2.00 sec 7.45 MBytes 62.5 Mbits/sec 0 242 KBytes
    [ 5] 2.00-3.00 sec 8.19 MBytes 68.7 Mbits/sec 0 261 KBytes
    [ 5] 3.00-4.00 sec 8.94 MBytes 75.0 Mbits/sec 37 204 KBytes
    [ 5] 4.00-5.00 sec 6.70 MBytes 56.2 Mbits/sec 0 239 KBytes
    [ 5] 5.00-6.00 sec 8.19 MBytes 68.7 Mbits/sec 0 260 KBytes
    [ 5] 6.00-7.00 sec 8.94 MBytes 75.0 Mbits/sec 0 271 KBytes
    [ 5] 7.00-8.00 sec 6.70 MBytes 56.2 Mbits/sec 23 210 KBytes
    [ 5] 8.00-9.00 sec 6.95 MBytes 58.3 Mbits/sec 9 163 KBytes
    [ 5] 9.00-10.00 sec 5.21 MBytes 43.7 Mbits/sec 0 181 KBytes
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval Transfer Bitrate Retr
    [ 5] 0.00-10.00 sec 78.0 MBytes 65.4 Mbits/sec 274 sender
    [ 5] 0.00-10.03 sec 76.6 MBytes 64.1 Mbits/sec receiver
    iperf Done.

    3. Kết nối thông qua WireGuard

    Mình tạm thời tắt Tailscale và kết nối hai thiết bị với nhau bằng WireGuard. Và kiểm tra lại băng thông kết nối

    Connecting to host 10.8.0.1, port 5201
    [ 5] local 10.8.0.2 port 52718 connected to 10.8.0.1 port 5201
    [ ID] Interval Transfer Bitrate Retr Cwnd
    [ 5] 0.00-1.00 sec 13.8 MBytes 116 Mbits/sec 103 500 KBytes
    [ 5] 1.00-2.00 sec 14.3 MBytes 120 Mbits/sec 74 389 KBytes
    [ 5] 2.00-3.00 sec 12.5 MBytes 105 Mbits/sec 0 418 KBytes
    [ 5] 3.00-4.00 sec 14.0 MBytes 117 Mbits/sec 0 436 KBytes
    [ 5] 4.00-5.00 sec 14.0 MBytes 117 Mbits/sec 0 448 KBytes
    [ 5] 5.00-6.00 sec 14.2 MBytes 119 Mbits/sec 23 339 KBytes
    [ 5] 6.00-7.00 sec 11.3 MBytes 95.2 Mbits/sec 17 273 KBytes
    [ 5] 7.00-8.00 sec 8.83 MBytes 74.1 Mbits/sec 0 303 KBytes
    [ 5] 8.00-9.00 sec 10.3 MBytes 86.4 Mbits/sec 0 321 KBytes
    [ 5] 9.00-10.00 sec 10.3 MBytes 86.4 Mbits/sec 0 341 KBytes
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval Transfer Bitrate Retr
    [ 5] 0.00-10.00 sec 124 MBytes 104 Mbits/sec 217 sender
    [ 5] 0.00-10.03 sec 122 MBytes 102 Mbits/sec receiver

    4. Đánh giá

    Có thể thấy rõ sự chênh lệch giữa Tailscale và WireGuard / Trực tiếp. Tốc độ kết nối của WireGuard gần bằng với kết nối trực tiếp, nhưng Tailscale chỉ đạt hơn phân nửa. Tuy vậy, tốc độ của Tailscale vẫn là rất ấn tượng, nếu so sánh với OpenVPN. Nhiêu đó là đủ đáp ứng cho nhu cầu sử dụng của mình.

    Bài viết đã hết. Chúc bạn thiết lập mạng riêng ảo thành công với Tailscale.

    Nguồn: https://thuanbui.me/tailscale-vpn/