پرش به محتوا

VPN با WireGuard روی Rocky و AlmaLinux و firewalld

یک سرور WireGuard بسازید، کاربران راه دور را با کلید جداگانه اضافه کنید و با zoneهای firewalld فقط دسترسی به شبکه‌ی داخلی را مجاز کنید.

Rocky Linux 10سطح: متوسطبرای: Rocky Linux 10، AlmaLinux 10، CentOS Stream 10، Rocky Linux 9، AlmaLinux 9به‌روزرسانی: ۱۷ آبان ۱۴۰۵

ماژول WireGuard در هسته‌ی نسخه‌های ۹ و ۱۰ موجود است و فقط ابزارهای مدیریت آن را نصب می‌کنید.

۱. نصب و کلید سرور

bash
sudo dnf install -y wireguard-tools
sudo mkdir -p /etc/wireguard && sudo chmod 700 /etc/wireguard
wg genkey | sudo tee /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub
sudo chmod 600 /etc/wireguard/server.key

۲. تنظیمات سرور

/etc/wireguard/wg0.conf:

ini
[Interface]
Address = 10.66.0.1/24
ListenPort = 51820
PrivateKey = <contents of server.key>

[Peer]
# ali-laptop
PublicKey = <ali public key>
AllowedIPs = 10.66.0.10/32

۳. firewalld

رابط wg0 را در zone جداگانه بگذارید. کاربران VPN فقط به شبکه‌ی داخلی 192.168.10.0/24 می‌رسند و از طریق سرور به اینترنت دسترسی ندارند:

bash
sudo firewall-cmd --permanent --add-port=51820/udp
sudo firewall-cmd --permanent --new-zone=vpn
sudo firewall-cmd --permanent --zone=vpn --add-interface=wg0
sudo firewall-cmd --permanent --new-policy=vpn-to-lan
sudo firewall-cmd --permanent --policy=vpn-to-lan --add-ingress-zone=vpn
sudo firewall-cmd --permanent --policy=vpn-to-lan --add-egress-zone=public
sudo firewall-cmd --permanent --policy=vpn-to-lan --set-target=REJECT
sudo firewall-cmd --permanent --policy=vpn-to-lan --add-rich-rule='rule family="ipv4" destination address="192.168.10.0/24" accept'
sudo firewall-cmd --permanent --policy=vpn-to-lan --add-masquerade
sudo firewall-cmd --reload
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/90-wireguard.conf && sudo sysctl --system

masquerade باعث می‌شود سرورهای داخلی ترافیک VPN را از IP خود سرور WireGuard ببینند و به route اضافه روی روتر نیازی نباشد. اگر می‌خواهید در لاگ سرورها IP واقعی کاربر VPN دیده شود، masquerade را حذف کنید و روی روتر برای 10.66.0.0/24 یک route به سرور WireGuard بگذارید.

۴. اجرا

bash
sudo systemctl enable --now wg-quick@wg0
sudo wg show

۵. کلاینت

روی لپ‌تاپ کاربر (برنامه‌ی رسمی WireGuard برای ویندوز، مک، اندروید یا لینوکس) کلید بسازید و این تنظیمات را وارد کنید:

ini
[Interface]
PrivateKey = <ali private key>
Address = 10.66.0.10/32
DNS = 192.168.10.5

[Peer]
PublicKey = <contents of server.pub>
Endpoint = vpn.sahor.ir:51820
AllowedIPs = 192.168.10.0/24, 10.66.0.0/24
PersistentKeepalive = 25

AllowedIPs در کلاینت فقط شبکه‌ی داخلی است (split tunnel)، پس اینترنت کاربر از VPN عبور نمی‌کند.

۶. افزودن و حذف کاربر بدون قطع بقیه

bash
sudo wg set wg0 peer <new public key> allowed-ips 10.66.0.11/32
sudo wg-quick save wg0
sudo wg set wg0 peer <old public key> remove && sudo wg-quick save wg0

کلید خصوصی کاربر فقط روی دستگاه خودش ساخته و نگه داشته شود. سرور فقط کلید عمومی را لازم دارد.