Chuyên mục
Network

Khắc phục lỗi WireGuard VPN (wg-easy) không hoạt động trên Oracle Cloud VPS

Sau một thời gian dài không đụng tới VPS miễn phí của Oracle Cloud, cách đây vài ngày mình mới quay trở lại. Không ngờ truy cập vào lại Dashboard thì tạo ngay được 1 con VPS ARM 4 vCPU, 24GB RAM, 200GB HDD luôn. Tận dụng ngay để nghịch ngợm các web app mới.

Trong khi cài đặt Wirehole-UI để thiết lập VPN trên con server của Oracle Cloud này, mình phát hiện ra Wireguard không còn hoạt động được nữa. Chính xác hơn là client vẫn kết nối được tới server, nhưng không truy cập Internet được.

Bài viết này sẽ hướng dẫn nhanh cách khắc phục tình trạng WireGuard VPN không hoạt đọng được trên Oracle Cloud VPS.

1. Nguyên nhân bị lỗi

Ứng dụng Wirehole-UI hoạt động dựa trên nền WireGuard VPN được thiết lập bởi wg-easy. Mặc định sau khi kích hoạt, wg-easy sẽ cấu hình iptables của container cho phép wireguard client truy cập internet thông qua interface eth0.

Các bạn có thể kiểm tra bằng cách xem nội dung file wg0.conf nằm cùng thư mục với file docker-compose.yml

sudo cat wg0.confCode language: CSS (css)
# Note: Do not edit this file directly.
# Your changes will be overwritten!

# Server
[Interface]
PrivateKey = GC3uPUZkrEVtvxxxxxxxkw+//UNQCpqTMO3sTVSkE0=
Address = 10.8.0.1/24
ListenPort = 51820
PreUp = 
PostUp =  iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE; iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; 
PreDown = 
PostDown = Code language: YAML (yaml)

Ở dòng 10 là lệnh để cấu hình iptables, sử dụng interface eth0

Tuy nhiên trên Oracle Cloud VPS, container sau khi tạo đôi khi không sử dụng eth0, mà lại là eth1. Kiểm tra bằng lệnh sau

docker exec wg-easy ip r | grep default | cut -d ' ' -f 5 | head -n1Code language: JavaScript (javascript)
eth1

Vì lệnh cấu hình iptables được chỉ định thực thi trên interface eth0 nên wireguard client chỉ có thể truy cập được đến server nhưng không thể truy cập được Internet.

2. Cách khắc phục

Cập nhật lại file docker-compose.yml, bổ sung thêm thông số - WG_DEVICE=eth+ vào phần environment:. Đồng thời sửa lại tên image từ image: weejewel/wg-easy thành image: weejewel/wg-easy:nightly.

Nội dung của file docker-compose.yml của wg-easy sẽ tương tự như dưới đây. Nếu bạn dùng Wirehole-UI thì chỉnh sửa lại trong phần service của wg-easy.

version: "3.8"
services:
  wg-easy:
    environment:
      # ⚠️ Required:
      # Change this to your host's public address
      - WG_HOST=111.111.111.111
      - WG_DEVICE=eth+
      #- WG_PATH='./'
      # Optional:
      # - PASSWORD=10h30
      # - WG_PORT=51820
      # - WG_DEFAULT_ADDRESS=10.8.0.x
      # - WG_DEFAULT_DNS=1.1.1.1
      # - WG_MTU=1420
      # - WG_ALLOWED_IPS=192.168.15.0/24, 10.0.1.0/24
      # - WG_PRE_UP=echo "Pre Up" > /etc/wireguard/pre-up.txt
      # - WG_POST_UP=echo "Post Up" > /etc/wireguard/post-up.txt
      # - WG_PRE_DOWN=echo "Pre Down" > /etc/wireguard/pre-down.txt
      # - WG_POST_DOWN=echo "Post Down" > /etc/wireguard/post-down.txt
    image: weejewel/wg-easy:nightly
    container_name: wg-easy
    volumes:
      - .:/etc/wireguard
    ports:
      - "51820:51820/udp"
      - "51824:51821/tcp"
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1Code language: YAML (yaml)

Sau đó kích hoạt lại bằng lệnh

docker compose down
docker compose up -dCode language: Nginx (nginx)

Kiểm tra lại file wg0.conf sẽ thấy trong dòng lệnh iptables đã được đổi từ eth0 qua eth+

# Note: Do not edit this file directly.
# Your changes will be overwritten!

# Server
[Interface]
PrivateKey = GC3uPUZkrEVtvxxxxxxxkw+//UNQCpqTMO3sTVSkE0=
Address = 10.8.0.1/24
ListenPort = 51820
PreUp = 
PostUp =  iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth+ -j MASQUERADE; iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; 
PreDown = 
PostDown = Code language: YAML (yaml)

Vậy là xong. Nếu không có gì sai lầm, WireGuard VPN đã hoạt động ngon lành trên Oracle Cloud VPS.

Nếu bài viết của mình mang đến thông tin, kiến thức hữu ích cho bạn, đừng ngại mời mình ly bia để có thêm động lực chia sẻ nhiều hơn nữa. Cám ơn bạn!

Lưu ý: Nếu bạn cần hỗ trợ kỹ thuật, vui lòng gửi câu hỏi trực tiếp ở phần Thảo luận bên dưới, mình sẽ trả lời sớm. Đừng mò vào hỏi trong fanpage Yêu Chạy Bộ, sẽ không có phản hồi đâu!

Bởi Thuận Bùi

Runner at Yêu Chạy Bộ. Blogger at Ba Lô & Dép Lào. Web Developer at TB's Blog.
Follow me: Facebook / Instagram

3 trả lời trong “Khắc phục lỗi WireGuard VPN (wg-easy) không hoạt động trên Oracle Cloud VPS”

Mình bị lỗi như thế này:
modprobe: can’t change directory to ‘6.1.10-11.ph5’: No such file or directory
iptables v1.8.9 (legacy): can’t initialize iptables table ‘filter’: table does not exist (do you need to insmod?)
Mong bạn xem giúp?

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *