Wireguard trên Alpine Linux

Chạy Wireguard trên Alpine linux là một trải nghiệm thú vị. Bài viết này sẽ được chia làm 2 phần, phần thứ nhát sẽ hướng dẫn cài đặt Wireguard ở phía server. Phần thứ 2 của bài viết sẽ hướng dẫn bạn chạy Wireguard client trên Alpine linux. Cả hai phía trong hướng dẫn đều sử dụng bản phân phối Alpine. Tuy nhiên ở phía client bạn có thể sử dụng trên bất kì hệ điều hành nào mà Wireguard hỗ trợ.

Nếu đây là lần đầu bạn thực hiện cài đặt Wireguard trên Linux thì bạn nên tham khảo bài viết này trước khi bắt đầu.

Cài Đặt Wireguard trên Alpine Linux

Các lệnh cài đặt Wireguard trên Alpine Linux là giống nhau trên Server và Client.

Trước tiên, bạn cần biết thông tin nhân phiên bản Linux được cài đặt, kết quả sau cho thấy nhân phiên bản Linux đang được cài đặt là 5.10:

# uname -rsm
Linux 5.10.36-0-virt x86_64

Kể từ phiên bản nhân linux 5.6 trở đi, Wireguard được tích hợp trong nhân Linux nên các gói wireguard-ltswireguard-virt như cách cài đặt trước đó đã được lượt bỏ. Do đó, trên Alpine 3.13 trở đi, bạn chỉ cần cài wireguard-tools sử dụng câu lệnh sau.

# apk add wireguard-tools

Sau đó load module

# modprobe wireguard

Thực chất, Wireguard không phân biệt Server hay Client như các phần mềm như OpenVPN mà sử dụng thuật ngữ Peer bởi vì 2 máy được kết nối với nhau theo giao thức ngang hàng. Để dễ hiểu bài viết này vẫn sử dụng cách diễn đạt bằng mô hình Client-Server đó:

Server/VPS-Peer

File cấu hình Wireguard

Cũng tương tự như các bản phân phối Linux khác, file cấu hình Wireguard được lưu ở thư mục /etc/wireguard/

[Interface]
Address = 10.10.0.1
ListenPort = 51820
PrivateKey = SG1nXk2+kAAKnMkL5aX3NSFPaGjf9SQI/wWwFj9l9U4=
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;iptables -A FORWARD -o %i -j ACCEPT
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;iptables -D FORWARD -o %i -j ACCEPT

Dòng cấu hình PostUpPostDown là để đảm bảo giao thức (interface) wg0 sẽ chấp nhận và chuyển tiếp lưu lượng đến eth0.

Chuyển tiếp lưu lượng
# cat << EOF >> /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
EOF

Sửa thông số IPFORWARD từ no sang yes lại như sau:

vi /etc/conf.d/iptables
IPFORWARD="yes"
rc-service iptables restart
Cấu hình interface
vi /etc/network/interfaces
auto eth0
iface eth0 inet static
        address 10.10.0.1
        netmask 255.255.255.0
        hostname wg
        post-up wg-quick up /etc/wireguard/wg0.conf
        post-down wg-quick down /etc/wireguard/wg0.conf
Tường lửa
  • Nếu bạn sử dụng tường lửa UFW
# sudo ufw allow <ListenPort>/udp
  • Nếu bạn sử dụng tường lửa Awall:
vi /etc/awall/optional/wireguard.json
{
    "description": "Allow incoming WireGuard UDP port 13620",
    "filter": [
        {
            "in": "WAN",
            "out": "_fw",
            "service": "wireguard",
            "action": "accept"
        }
    ]
}

vi /etc/awall/optional/vpntraffic.json

{
    "description": "Allow VPN traffic for selected ports",
    "filter": [
        {
            "in": "VPN",
            "out": "_fw",
            "service": [ "ssh", "dns", "squid", "ping" ],
            "action": "accept",
            "src": "172.16.4.0/24"
        }
    ]
}
awall enable wireguard vpntraffic

Kiểm tra cổng đã mở

# iptables -S | grep 13620
-A INPUT -i eth0 -p udp -m udp --dport 13620 -j ACCEPT
Kích hoạt Wireguard

Kích hoạt interface wg0

# wg-quick up wg0

Client/Peer

Việc sử dụng Wireguard ở phía client là khá dễ dàng, bạn chỉ việc nhập file cấu hình bằng cách quét hoặc import, kích hoạt và chạy. Tuy nhiên bài viết này hướng dẫn bạn tiếp cận ở phía client bằng một cách khác, đó là chạy client Wireguard bằng cách sử dụng dòng lệnh.

Tương tự phía server, file cấu hình Wireguard cũng được lưu ở thư mục /etc/wireguard/

# sudo nano /etc/wireguard/wg-client0.conf

Nhập nội dung bạn đã có sẵn vào file trên, lưu và thoát.

Chạy Wireguard Client sử dụng dòng lệnh

Chạy Wireguard Client sử dụng dòng lệnh

Kiểm tra Public IP
curl ifconfig.me
Khởi động cùng hệ thống trên Alpine Linux

Thêm file wireguard có nội dung như bên dưới ở thử mục /etc/init.d/, cho phép thực thi bằng lệnh chmod và khởi chạy cùng hệ thống trên Alpine bằng rc-update

nano /etc/init.d/wireguard

chmod +x /etc/init.d/wireguard

rc-update add wireguard default

Tham khảo

https://www.reddit.com/r/AlpineLinux/comments/mlfak9/alpine_as_wireguard_server/