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.conf
# 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 =
Ở 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 -n1
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=1
Sau đó kích hoạt lại bằng lệnh
docker compose down
docker compose up -d
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 =
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.
Nguồn: thuanbui