Máy Tính

Gluetun: Giải pháp định tuyến VPN cho Docker Container hiệu quả và an toàn

Minh họa các Docker container phổ biến trong môi trường home lab và ứng dụng máy chủ tại nhà

Docker đã trở thành công cụ không thể thiếu cho việc tự host nhiều ứng dụng mã nguồn mở dưới dạng container trong môi trường home lab cá nhân. Nhờ Docker, tôi có thể dễ dàng thử nghiệm các ứng dụng và dịch vụ khác nhau mà không làm ảnh hưởng đến chiếc Raspberry Pi của mình. Một số container này, chẳng hạn như các công cụ lập chỉ mục hay tự động tải xuống, thường xuyên thu thập dữ liệu (và siêu dữ liệu) từ Internet. Để bảo vệ quyền riêng tư và ngăn chặn việc lộ địa chỉ IP thật của mình, tôi đã thử sử dụng một VPN. Tuy nhiên, việc định tuyến Docker qua VPN cho tất cả traffic trên toàn hệ thống lại làm chậm mọi thứ đáng kể.

Chính vì vậy, tôi đã tìm đến Gluetun, một VPN client được thiết kế đặc biệt cho Docker container, chỉ dành riêng cho các ứng dụng trên máy chủ của tôi. Đây thực sự là một bước đột phá trong việc định tuyến traffic cụ thể cho từng container, giúp tăng cường quyền riêng tư và ngăn chặn rò rỉ IP thông qua một đường hầm VPN an toàn. Đó là lý do tôi tin rằng Gluetun là cách tốt nhất để định tuyến tất cả traffic đi ra từ các Docker container. Mặc dù không phải là một giải pháp VPN toàn diện với các tùy chọn kết nối đến, Gluetun hoạt động hoàn hảo cho môi trường home lab tự host hoặc phục vụ mục đích phát triển.

Minh họa các Docker container phổ biến trong môi trường home lab và ứng dụng máy chủ tại nhàMinh họa các Docker container phổ biến trong môi trường home lab và ứng dụng máy chủ tại nhà

Tại sao Gluetun là lựa chọn hàng đầu để định tuyến Docker Container qua VPN?

Kiểm soát chi tiết, cô lập và bảo mật riêng tư cho từng container

Việc sử dụng VPN để phủ sóng toàn bộ traffic trên mạng gia đình của tôi không hoạt động trơn tru như mong đợi. Nhiều kết nối cá nhân và công việc bị gián đoạn khi phần mềm hoặc dịch vụ phát hiện kết nối VPN. Cuối cùng, việc sử dụng Gluetun để định tuyến VPN cho Docker container cụ thể giúp giải quyết vấn đề này mà không cần thay đổi cài đặt mạng chung. Là một VPN client nhẹ dành cho Docker container, Gluetun có quá trình tích hợp đơn giản. Tất cả những gì tôi phải làm là cài đặt nó như một Docker container thông thường, không cần thêm cấu hình phức tạp nào để sửa đổi các quy tắc tường lửa hay cài đặt mạng cấp hệ điều hành.

Theo mặc định, Gluetun hỗ trợ nhiều nhà cung cấp VPN phổ biến như Private Internet Access, Surfshark, NordVPN, ExpressVPN, Mullvad và nhiều nhà cung cấp khác. Do đó, tôi chỉ cần cung cấp thông tin đăng nhập cho VPN của mình (Surfshark), và Gluetun sẽ tự động quản lý các cài đặt để cấu hình tài khoản bằng các giao thức WireGuard hoặc OpenVPN. Khi hoạt động như một VPN client, Gluetun sử dụng các cài đặt của nhà cung cấp VPN để tạo một đường hầm bảo mật cho tất cả traffic đi ra từ các container sử dụng mạng của nó. Bằng cách này, nó cũng sử dụng các nhà cung cấp DNS an toàn hoặc được mã hóa để ngăn chặn rò rỉ DNS từ đường hầm bảo mật.

Chức năng Kill Switch mạnh mẽ đảm bảo không rò rỉ IP

Nếu kết nối VPN bị gián đoạn, Gluetun sẽ tự động chặn tất cả traffic từ các container đã cấu hình để ngăn chặn rò rỉ IP. Gluetun sử dụng iptables để thực thi chức năng kill switch trong trường hợp VPN bị ngắt, điều này có nghĩa là các container được kết nối sẽ không hoạt động trừ khi VPN được kích hoạt lại. Điều này tốt hơn nhiều so với việc sử dụng bất kỳ VPN toàn hệ thống nào mà không có kill switch hoặc tường lửa, có thể làm lộ địa chỉ IP của máy chủ.

Hướng dẫn xử lý traffic đi ra từ các container nhạy cảm bằng Gluetun

Định tuyến traffic an toàn qua kênh VPN bảo mật

Tôi sử dụng các file Docker Compose trong Dockge để triển khai ngăn xếp ứng dụng ARR hoạt động cùng với Gluetun. Theo mặc định, các container này sẽ sử dụng stack mạng của Gluetun và không có quyền truy cập vào địa chỉ IP thật của tôi hoặc máy chủ. Đối với các ngăn xếp của mình, tôi đã sử dụng thông tin đăng nhập VPN của Surfshark. Tôi đã đăng nhập vào tài khoản Surfshark VPN và kích hoạt tùy chọn thiết lập thủ công. Thao tác này đã tạo ra một mã chữ và số cụ thể cho tên người dùng và mật khẩu, những thông tin này được sử dụng trong cấu hình container của Gluetun.

Tôi khuyên bạn nên sử dụng giao thức WireGuard thay vì OpenVPN để đạt được tốc độ, độ ổn định tốt hơn và giảm tải CPU khi sử dụng Gluetun trên một bo mạch đơn (SBC) như Raspberry Pi.

Cấu hình Gluetun trong Docker Compose

Dưới đây là cách mã thiết lập Gluetun thường xuất hiện trong một file Docker Compose:

services:
  gluetun:
    image: qmcgaw/gluetun
    container_name: gluetun
    cap_add:
      - NET_ADMIN
    environment:
      - VPN_SERVICE_PROVIDER=surfshark
      - OPENVPN_USER=username
      - OPENVPN_PASSWORD=password
      - FIREWALL=on
      - TZ=Asia/Kolkata
    volumes:
      - ./gluetun:/gluetun
    ports:
      - 8080:8080 # qBittorrent web UI
      - 8989:8989 # Sonarr
      - 7878:7878 # Radarr
      - 8686:8686 # Lidarr
      - 6767:6767 # Bazarr
    restart: unless-stopped

Việc thêm đoạn mã này vào đầu một stack mới đảm bảo rằng Gluetun được cài đặt trước tiên. Sau đó, tôi đã thêm chế độ mạng (network_mode) để các container còn lại sử dụng mạng của Gluetun. Tôi cũng đã bao gồm biến môi trường FIREWALL=on để chặn hoàn toàn truy cập internet khi kết nối VPN bị ngắt. Về mặt kỹ thuật, tường lửa được bật theo mặc định. Là một phần của biện pháp phòng thủ, tôi đã thêm biến này khi sử dụng cùng một file compose trên các môi trường khác nhau. Dưới đây là đoạn mã cho một container sử dụng mạng của Gluetun:

  sonarr:
    image: lscr.io/linuxserver/sonarr
    container_name: sonarr
    network_mode: service:gluetun
    depends_on:
      - gluetun
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - ./sonarr:/config
      - ./downloads:/downloads
      - ./media/tv:/tv
    restart: unless-stopped

Lưu ý rằng tôi đã chỉ định biến network_mode để sử dụng dịch vụ Gluetun. Sau khi triển khai toàn bộ ngăn xếp ứng dụng ARR, việc kiểm tra xem các container có thực sự sử dụng mạng của Gluetun cho traffic đi ra của chúng hay không là rất cần thiết. Tôi đã chạy lệnh sau để kiểm tra:

docker exec radarr curl ifconfig.me

Lệnh này đã hiển thị địa chỉ IP được gán bởi nhà cung cấp dịch vụ VPN mà tôi đã sử dụng trong thiết lập của Gluetun. Điều đó có nghĩa là tất cả các container đều sử dụng đường hầm VPN do Gluetun thiết lập.

Các trường hợp ngoại lệ: Khi nào Gluetun không phù hợp?

Những hạn chế cần lưu ý khi sử dụng Gluetun

Gluetun là một lựa chọn tuyệt vời để định tuyến traffic đi ra, nhưng nó không hoạt động với tất cả các ứng dụng và dịch vụ dựa trên container yêu cầu phơi bày trực tiếp các cổng đến ra mạng LAN. Ví dụ, các ứng dụng torrent như qBittorrent, Transmission hoặc Deluge yêu cầu phơi bày các cổng đến cụ thể cho TCP và UDP.

Ngoài ra, các ứng dụng và dịch vụ yêu cầu khám phá mạng cục bộ thông qua multicast hoặc broadcast cũng gặp vấn đề. Chẳng hạn như Home Assistant, nó yêu cầu khám phá các thiết bị trên mạng LAN để dễ dàng tích hợp. Tương tự, Pi-hole và Unbound sẽ gây xung đột DNS với các quy tắc DNS và tường lửa của Gluetun.

Một hạn chế lớn mà tôi nhận thấy là việc phơi bày các cổng HTTPS không hoạt động với Gluetun. Do đó, tôi phải chạy một container, chẳng hạn như Nginx Proxy Manager, mà không thông qua mạng của Gluetun. Ngoài ra, tôi không thể truy cập các ứng dụng bằng IP VPN vì Surfshark không hỗ trợ chuyển tiếp cổng (port forwarding). Tuy nhiên, việc thiết lập một reverse proxy không nằm sau VPN, ngay cả một reverse proxy không chuyển tiếp cổng, đã khắc phục sự cố vì nó giao tiếp bên ngoài Gluetun, qua mạng của Docker stack.

Hệ thống home lab nhỏ gọn trong tủ rack, minh họa môi trường triển khai Docker và VPNHệ thống home lab nhỏ gọn trong tủ rack, minh họa môi trường triển khai Docker và VPN

Định tuyến VPN tốt hơn cho các ứng dụng dựa trên container

Gluetun đã chứng tỏ là một giải pháp nhẹ nhưng mạnh mẽ, thay đổi cuộc chơi trong việc định tuyến VPN cho Docker container. Với Gluetun, tôi có thể tiếp tục sử dụng các container chọn lọc để vượt qua các giới hạn địa lý và tránh bị cấm IP. Quan trọng nhất, nó không can thiệp vào các tệp hệ thống và có thể chạy mượt mà trên các bo mạch đơn công suất thấp (SBC) như Raspberry Pi. Mặc dù vẫn yêu cầu tôi sử dụng tài khoản của một nhà cung cấp dịch vụ VPN, nhưng Gluetun giải quyết hoàn hảo nhu cầu tạo đường hầm VPN cho các Docker container cụ thể. Tôi khuyên bạn nên thiết lập Health Checks bằng webhooks để Gluetun có thể thông báo cho bạn bất cứ khi nào kết nối VPN bị gián đoạn. Nếu bạn đang tìm kiếm một giải pháp tối ưu cho việc bảo mật và kiểm soát traffic của các container, Gluetun chắc chắn là một lựa chọn đáng cân nhắc. Hãy chia sẻ kinh nghiệm của bạn về Gluetun hoặc các giải pháp tương tự trong phần bình luận nhé!

Related posts

Yêu Cầu USB-C Mới Trên PC Windows 11 24H2: Nâng Cấp Trải Nghiệm Người Dùng

Administrator

Mã Hóa Hậu Lượng Tử: Tương Lai Bảo Mật Dữ Liệu Trong Kỷ Nguyên Lượng Tử

Administrator

Microsoft khuyên bán PC Windows 10 cũ để nâng cấp Windows 11: Có khả thi?

Administrator