WireGuard، یک VPN عمومی (شبکه خصوصی مجازی) است که از رمزنگاری پیشرفته استفاده می‌کند. در مقایسه با سایر نرم افزارهای VPN، مانند IPsec و OpenVPN، این VPN به طور کلی سریع‌تر، امن‌تر و با پیکربندی آسان‌تر است. WireGuard بصورت مستقل از سیستم عامل ساخته شده است و تقریباً در همه جا از جمله لینوکس، ویندوز، اندروید و macOS قابل اجرا است.

 

Wireguard، یک VPN نظیر به نظیر (peer-to-peer) است. بدین معنی که از مدل کلاینت-سرور استفاده نمی‌کند. بسته به نوع پیکربندی، یک peer می‌تواند به عنوان یک سرور یا کلاینت سنتی عمل کند. ارتباط بین دو peer با ایجاد یک رابط شبکه در هر دستگاه peer برقرار می‌شود که به عنوان یک تونل عمل می‌نماید. peerها با تقلید از مدل SSH یعنی مبادله و اعتبار سنجی کلیدهای عمومی، یکدیگر را احراز هویت می‌کنند. کلیدهای عمومی با لیستی از آدرس‌های IP مجاز در تونل نگاشت می‌شوند. ترافیک VPN نیز در UDP محصور شده است.

 

پروتکل مورد استفاده در این برنامه، توسط کشور ایران مسدود می‌باشد و استفاده از آن برای ساکنین خارج از ایران صرفاً امکان‌پذیر است.

 

در این مقاله، نحوه نصب و پیکربندی WireGuard در Debian 10 به عنوان یک سرور VPN توضیح داده شده است. همچنین نحوه پیکربندی WireGuard به صورت کلاینت در Linux ،Windows و macOS نمایش داده می‌شود.

این تنظیمات می‌تواند به عنوان یک محافظت در برابر حملات Man in the Middle، جستجو در وب به صورت ناشناس، دور زدن محتوای محدودشده در محدودیت جغرافیایی و اتصال امن به شبکه بصورت ریموت استفاده شود.

دقت کنید که برای دنبال کردن راهنمای زیر، به دستگاهی با سیستم عامل Debian 10 نیاز دارید. علاوه‌براین، برای نصب بسته‌ها و ایجاد تغییرات در سیستم، باید از root یا دسترسی sudo استفاده نمایید.

 

راه‌اندازی سرور WireGuard

ابتدا با نصب بسته WireGuard برروی سیستم عامل Debian شروع کرده و سپس آن را به عنوان سرور تنظیم می‌نماییم. علاوه‌براین، سیستم را به گونه‌ای پیکربندی می‌کنیم که ترافیک کلاینت از طریق WireGuard هدایت شود.

 

نصب WireGuard برروی Debian 10

WireGuard از مخزن backports دبیان در دسترس است. برای افزودن این مخزن به سیستم خود، دستور زیر را اجرا نمایید:

echo 'deb http://ftp.debian.org/debian buster-backports main' | sudo tee /etc/apt/sources.list.d/buster-backports.list

پس از فعال شدن مخزن، cache یا همان حافظه نهان apt را به روز کرده و ماژول و ابزار WireGuard را نصب نمایید:

sudo apt update
sudo apt install wireguard

دقت کنید که WireGuard به عنوان یک ماژول هسته اجرا می‌شود.

 

پیکربندی WireGuard

شما می‌توانید رابط‌های WireGuard را با ابزارهای خط فرمان wg و wg-fast پیکربندی و مدیریت کنید.

هر دستگاه در شبکه WireGuard VPN باید یک کلید خصوصی و عمومی داشته باشد. برای تولید جفت کلید، دستور زیر را اجرا نمایید:

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

فایل‌ها در دایرکتوری /etc/wireguard تولید می‌شوند. برای مشاهده محتویات فایل‌ها از دستورات cat یا less استفاده کنید. کلید خصوصی هرگز نباید با کسی به اشتراک گذاشته شود و همیشه باید از آن محافظت شود.

Wireguard از یک کلید دیگری نیز استفاده می‌کند که این کلید از قبل به اشتراک گذاشته شده است و یک لایه اضافی از رمزنگاری کلید متقارن را اضافه می‌نماید. این کلید اختیاری است و باید برای هر جفت peer منحصر به فرد باشد.

 

مرحله بعدی، پیکربندی دستگاه تونلی است که ترافیک VPN  را از آن عبور می‌کند.

دستگاه را می‌توان از طریق خط فرمان با استفاده از دستورات ip و wg، یا با ایجاد دستی فایل پیکربندی تنظیم کرد. در اینجا، پیکربندی را با ایجاد فایل توسط یک ویرایشگر متن انجام خواهیم داد.

بدین منظور، ویرایشگر خود را باز کرده و یک فایل جدید با نام wg0.conf با محتوای زیر ایجاد نمایید:

sudo nano /etc/wireguard/wg0.conf
             /etc/wireguard/wg0.conf

[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

شما می‌توانید رابط را به صورت دلخواه نام گذاری کنید. با این حال توصیه می‌شود از نام‌هایی مانند wg0 یا wgvpn0 استفاده نمایید.

 

تنظیمات موجود در بخش رابط به معنای زیر است:

Address: لیستی از آدرس‌های IPv4 یا IPv6 برای رابط wg0 که با ویرگول از هم جدا شده‌اند. شما می‌توانید به جای آدرس IP از محدوده‌ای که مخصوص شبکه‌های خصوصی (Private IP Addresses) است (10.0.0.0/8، 172.16.0.0/12 یا 192.168.0.0/16) استفاده کنید.

ListenPort: پورت شنود.

PrivateKey: یک کلید خصوصی ایجاد شده توسط دستور wg genkey (برای مشاهده محتویات نوع فایل از دستور زیر استفاده کنید):

sudo cat /etc/wireguard/privatekey

SaveConfig: زمانیکه برروی true تنظیم شود، هنگام خاموش شدن، وضعیت فعلی رابط در فایل پیکربندی ذخیره می‌شود.

PostUp: دستور یا اسکریپتی است که قبل از وصل کردن رابط اجرا می‌شود. در این مثال، ما از iptables برای فعال کردن پوشش استفاده می‌کنیم. این اجازه می‌دهد تا ترافیک از سرور خارج شود و به کلاینت‌های VPN دسترسی به اینترنت را می‌دهد.

دقت کنید که باید عبارت ens3 بعد از دستور A POSTROUTING- را با نام رابط شبکه عمومی خود جایگزین نمایید. شما می‌توانید به راحتی رابط را به صورت زیر بدست آورید:

ip -o -4 route show to default | awk '{print $5}'

PostDown: یک دستور یا اسکریپتی است که قبل از قطع شدن رابط اجرا می‌شود و با قطع رابط، قوانین iptables حذف می‌شوند.

فایل‌های wg0.conf و privatekey نباید برای کاربران عادی قابل خواندن باشد. برای تنظیم مجوزهای فایل‌ها برروی 600 از chmod استفاده کنید:

sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}

 

پس از اتمام، با استفاده از ویژگی‌های مشخص شده در فایل پیکربندی، رابط wg0 را وصل نمایید:

sudo wg-quick up wg0

در این صورت، خروجی مشابه زیر خواهد بود:

Output:
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

برای بررسی وضعیت و پیکربندی رابط، دستور زیر را اجرا کنید:

sudo wg show wg0
Output:
interface: wg0
  public key: +Vpyku+gjVJuXGR/OXXt6cmBKPdc06Qnm3hpRhMBtxs=
  private key: (hidden)
  listening port: 51820

شما می‌توانید وضعیت رابط را با ip a show wg0 نیز تأیید نمایید:

ip a show wg0
Output:
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 10.0.0.1/24 scope global wg0
       valid_lft forever preferred_lft forever

WireGuard را می‌توان با Systemd مدیریت کرد. به منظور بالا آوردن رابط WireGuard در زمان راه‌اندازی سیستم، دستور زیر را اجرا کنید:

sudo systemctl enable wg-quick@wg0

 

این مطلب نیز ممکن است برای شما مفید باشد: نحوه راه اندازی فایروال UFW در سرور اوبونتو و دبیان

 

تنظیم شبکه سرور و پیکربندی فایروال

IP forwarding باید فعال شود تا NAT قابل استفاده باشد. بدین منظور فایل /etc/sysctl.conf را باز کرده و خط زیر را اضافه و یا از حالت کامنت خارج نمایید:

sudo nano /etc/sysctl.conf
             /etc/sysctl.conf

net.ipv4.ip_forward=1

فایل را ذخیره کرده و تغییرات را اعمال نمایید:

sudo sysctl -p
Output:
net.ipv4.ip_forward = 1

اگر از UFW برای مدیریت فایروال خود استفاده می‌کنید، باید ترافیک UDP را برروی پورت 51820 باز نمایید:

sudo ufw allow 51820/udp

اکنون سیستم Debian شما به عنوان یک سرور راه‌اندازی شده است.

 

راه‌اندازی کلاینت‌های Linux و macOS

دستورالعمل نصب برای همه سیستم عامل‌های پشتیبانی شده در https://wireguard.com/install/ در دسترس است. در سیستم‌های لینوکس می‌توانید، بسته را با استفاده از ابزار مدیریت بسته توزیع و در macOS می‌توانید با دستور brew نصب نمایید.

پس از نصب، به منظور پیکربندی دستگاه کلاینت مراحل زیر را دنبال کنید.

دقت کنید که روند راه‌اندازی یک کلاینت Linux و macOS بسیار مشابه روشی است که برای سرور انجام دادید.

ابتدا کلیدهای عمومی و خصوصی را تولید کنید:

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

سپس فایل wg0.conf را ایجاد کرده و محتوای زیر را اضافه نمایید:

sudo nano /etc/wireguard/wg0.conf
           /etc/wireguard/wg0.conf

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24


[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0

 

معنای تنظیمات موجود در بخش رابط، مشابه معنای تنظیمات هنگام تنظیم سرور است:

Address: لیستی از آدرس‌های IPv4 یا IPv6 برای رابط wg0 که با ویرگول از همدیگر جدا شده‌اند.

PrivateKey: برای مشاهده محتویات فایل در دستگاه کلاینت، دستور زیر را اجرا کنید:

sudo cat /etc/wireguard/privatekey

بخش peer شامل فیلدهای زیر است:

PublicKey: کلید عمومی peerای است که می‌خواهید به آن وصل شوید. (محتویات فایل /etc/wireguard/publickey سرور)

Endpoint: یک IP یا نام میزبان از peerای است که می‌خواهید به آن وصل شوید و به دنبال آن یک کاراکتر “:” و سپس یک شماره پورت (که peer ریموت آن را شنود می‌کند) می‌آید.

AllowedIPs: لیستی از آدرس‌های IPv4 یا IPv6 جدا شده با ویرگول است که ترافیک ورودی برای peer از آن‌ها مجاز است و ترافیک خروجی این peer برای آن هدایت می‌شود. در اینجا از 0.0.0.0/0 استفاده می‌کنیم؛ زیرا در حال عبور دادن ترافیک هستیم و می‌خواهیم peer سرور بسته‌های نشأت گرفته از هر IP را ارسال کند.

در صورت نیاز به پیکربندی کلاینت‌های اضافی، تنها کافیست همین مراحل را با استفاده از آدرس IP خصوصی دیگری تکرار نمایید.

 

این مطلب نیز ممکن است برای شما مفید باشد: تنظیم Mikrotik CHR به عنوان سرور PPTP VPN

 

پیکربندی کلاینت‌های ویندوز

بسته msi ویندوز را از وب سایت WireGuard دانلود کرده و نصب نمایید.

پس از نصب، برنامه WireGuard را باز کرده و بر روی "Add Tunnel" -> "Add empty tunnel..." مطابق تصویر زیر کلیک نمایید:

 

یک جفت کلید عمومی به طور خودکار ایجاد شده و برروی صفحه نمایش داده می‌شود.

 

نامی برای tunnel وارد کرده و تنظیمات را به صورت زیر ویرایش نمایید:

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24


[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0

در بخش رابط، یک خط جدید اضافه کنید تا آدرس tunnel کلاینت را تعریف نمایید.

در بخش peer، فیلد‌های زیر را اضافه کنید:

PublicKey: کلید عمومی سرور دبیان ( فایل/etc/wireguard/publickey )

Endpoint: آدرس IP سرور دبیان و به دنبال آن یک کاراکتر “:” و پورت WireGuard (یعنی 51820)

AllowedIPs: آدرس IPهای مجاز (در اینجا 0.0.0.0/0)

پس از اتمام، بر روی دکمه "Save" کلیک نمایید.

 

اضافه کردن Peer کلاینت به سرور

آخرین مرحله، اضافه کردن کلید عمومی و آدرس IP کلاینت به سرور است. برای انجام این کار، دستور زیر را بر روی سرور Debian اجرا کنید:

sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2

مطمئن شوید که CLIENT_PUBLIC_KEY را با کلید عمومی ایجاد شده در ماشین کلاینت تغییر دهید.

sudo cat /etc/wireguard/publickey

و آدرس IP کلاینت را در صورت متفاوت بودن تنظیم نمایید. کاربران ویندوز می‌توانند کلید عمومی را از برنامه WireGuard کپی کنند.

پس از اتمام کار، به ماشین کلاینت برگشته و رابط مربوط به tunnel را وصل نمایید.

 

کلاینت‌های Linux و macOS

دستور زیر را برای وصل کردن رابط اجرا کنید:

sudo wg-quick up wg0

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

sudo wg
Output:
interface: wg0
  public key: gFeK6A16ncnT1FG6fJhOCMPMeY4hZa97cZCNWis7cSo=
  private key: (hidden)
  listening port: 53527
  fwmark: 0xca6c

peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
  endpoint: XXX.XXX.XXX.XXX:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 53 seconds ago
  transfer: 3.23 KiB received, 3.50 KiB sent

علاوه‌براین می‌توانید مرورگر خود را باز کرده و عبارت "What is my IP" را تایپ نمایید تا آدرس IP سرور دبیان خود را مشاهده کنید.

برای متوقف کردن ارتباطات این tunnel باید رابط wg0 را قطع نمایید:

sudo wg-quick down wg0

 

کلاینت‌های ویندوز

اگر WireGuard را روی ویندوز نصب کرده‌اید، برروی دکمه "Active" کلیک نمایید. پس از اتصال peer، وضعیت tunnel به Active تغییر می‌کند:

 

 

 

منبع:

linuxize