این آموزش مربوط به سیستم های یونیکسه.
خب اول یک دامنه یا ساب دامنه انتخاب کنید و یک A رکورد به مقدار آی پی سرور خارجی و پرت HTTPS بسازید.سی دی ان داخلی باشه که طرح رذالتو دور بزنید. باید روی SSL,CDN رو فعال کنید.
خب برای اون دامنه باید اس اس ال داشته باشید با این فایل ها
fullchain.pem, privkey.pem, chain.pem, dhparam.pem
آموزش گرفتن اس اس ال هم که زیاده. (dhparam- Diffie–Hellman (D-H))
اول nginx رو روی سرور خارجی نصب کنید. اینم کانفیگ.
server {
server_name yourdomain.com;
listen 443 ssl;
ssl_certificate /path/to/ssl/fullchain.pem;
ssl_certificate_key /path/to/ssl/privkey.pem;
ssl_trusted_certificate /path/to/ssl/chain.pem
ssl_dhparam /path/to/ssl/dhparam.pem;
ssl_session_cache shared:le_nginx_SSL:10m;
ssl_session_timeout 1440m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
location /E7m5vGDqryd55MMP/ {
proxy_pass http://127.0.0.1:54545;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 10m;
proxy_send_timeout 10m;
proxy_read_timeout 90m;
send_timeout 10m;
}
}
- مسیر فایل های اس اس ال رو درست کنید
- E7m5vGDqryd55MMP: این مسیر رندومه.میتونه هرچیزی باشه.والبته پورت
wget https://git.io/wireguard -O wireguard-install.sh && bash wireguard-install.sh
کافیه این اسکریپت رو روی سرور ران کنید و بوم. با wg0.confسرور کاری نداریم. ولی فایل کانفیگ که برای کلاینت میسازه رو باید تغییر بدیم مختصر
فایل کلاینت بعد از تغییر همچین چیزی میشه.
[Interface]
Address = 10.10.1.2/24
DNS = 8.8.8.8, 8.8.4.4
# <= این ۴خط هم اضافه میشه =>
Table = off
PreUp = source /etc/wireguard/wstunnel.sh && pre_up %I
PostUp = source /etc/wireguard/wstunnel.sh && post_up %i %I
PostDown = source /etc/wireguard/wstunnel.sh && post_down %i %I
PrivateKey = ....
[Peer]
PublicKey = ....
PresharedKey = ....
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = 127.0.0.1:51820 # <= این از آی پی سرور تغییر میکنه به لوکال
PersistentKeepalive = 25
- به آدرس زیر میرید و نسخه مربوطه هم برای سرور و کلاینت رو دانلود میکنید.
https://github.com/erebe/wstunnel/releases/
wget https://github.com/erebe/wstunnel/releases/download/v4.1/wstunnel-x64-linux
mv wstunnel-x64-linux /usr/local/bin/wstunnel
chmod uo+x /usr/local/bin/wstunnel
setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/wstunnel
- یک فایل سرویس سیستم دی در مسیر زیر و محتویات پایین درست میکنید
/etc/systemd/system/wstunnel.service
[Unit]
Description=Tunnel WG UDP over websocket
After=network.target
[Service]
Type=simple
User=nobody
ExecStart=/usr/local/bin/wstunnel -q --server ws://127.0.0.1:54545 --restrictTo=127.0.0.1:51820
Restart=no
[Install]
WantedBy=multi-user.target
- 54545: همون پورتی که برای کانفیگ nginx انتخاب کردید
- 51820: پورت دیفالت وایرگارد.اگه تغییر دادید هرجایی این پورت بود توی تنظیمات عوضش کنید
سرویس رو با دستور زیر اجرا میکنید و وب سوکت راه میوفته
sudo systemctl enable --now wstunnel.service
چک کنید سرویس درست راه اندازی شده باشه
sudo systemctl status wstunnel.service
توی فایل زیر قسمت net.ipv4.ip_forward=1
رو از حالت کامنت خارج کنید و سرور رو ریستارت کنید.
/etc/sysctl.d/99-sysctl.conf
برای وصل شدن به وایرگارد باید این نصب بشه
- Mac :
brew install wireguard-tools
- Ubuntu:
sudo apt install wireguard
اول با دسترسی روت این مسیرها رو ایجاد کنید
/var/run/wireguard/
/etc/wireguard/
فایل client.conf که قبلا سرور برامون ساخته بود و ما تغییرش دادیم رو با اسم wg0.conf روی مسیر زیر میریزیم
/etc/wireguard/wg0.conf
sudo bash -c "chown root wg0.conf && chmod 640 wg0.conf"
برای کلاینت هم سوکت رو نصب میکنید.چک کنید نسخه ها آخری باشه.
wget https://github.com/erebe/wstunnel/releases/download/v4.1/wstunnel-x64-linux
sudo mv wstunnel-x64-linux /usr/local/bin/wstunnel
sudo chmod +x /usr/local/bin/wstunnel
فایل کانفیگ وب سوکت رو توی مسیر زیر با محتویات پایین میسازیم
/etc/wireguard/wg0.wstunnel
REMOTE_HOST=yourdomain.com
REMOTE_PORT=51820
UPDATE_HOSTS='/etc/hosts'
WS_PREFIX='E7m5vGDqryd55MMP'
- yourdomain.com: همونی که گذاشتید پشت سی دی ان
- E7m5vGDqryd55MMP: همون مسیر رندومه توی nginx
این اسکریپت کارهای روتینگ رو انجام میده که کل ترافیک لازم ما از وایرگارد از داخل سوکت رد بشه.
wget https://raw.githubusercontent.com/jnsgruk/wireguard-over-wss/master/wstunnel.sh
sudo mv wstunnel.sh /etc/wireguard/wstunnel.sh
sudo chmod +x /etc/wireguard/wstunnel.sh
فقط چون سرویس ما قراره پشت سی دی ان باشه یه هارد کد کوچک روی wstunnel.sh لازمه و اون توی خط ۱۱۳ .
- شما این خط رو کامنت میکنی
remote_ip=$(dig +short "${remote}")
- و جای خط بالا آی پی سرور خارجی رو هارد کد کن. تتبل بازی :)
remote_ip="1.2.3.4"
sudo wg-quick up wg0
sudo wg-quick down wg0
#برای_آزادی
سلام - خیلی ممنون از آموزش جالب و ایده جذابت
من خودم رفتم تستش کردم - یعضی جاها به مشکل خوردم و گفتم اینجا بگم - (من با داکر کل این سرویس رو بالا آوردم - نوت اش را هم در گیست خودم گذاشتم Wireguard Over Websocke and Nginx Reverse Proxy + cdn in docker )
در مورد ssl من نیازی ندیدم (اگر علت خاصی داره لطفا بگید) از
chain.pem, dhparam.pem
استفاده کنم همون دو تا کلید اولی کافی بود واین خط ها رو هم استفاده نکردم:
اگر چیزایی که استفاده نکردم نکته خاصی داشته لطفا به من هم اطلاع بدبد ممنون 😇
در فایل client.conf این خط ها کلا خطا میدادن :
من اینطوریشون کردم جواب دادن:
به جای این
remote_ip=$(dig +short "${remote}")
باید آی پی - سرور سی دی ان رو بگذارید تا ترافیک از به اصطلاح ابر عبور کند (اگر آی پی خارج رو بزنیم دیگه دامنه حساب میشه که آی پیش همون سرور خارج هست و این یعنی سی دی ان پَر)با تشکر از به اشتراک گذاری تجربه هاتون - من صرفا خواستم تجربه ام را بگم