Docker-এ wg-easy দিয়ে WireGuard web UI সেটআপ
Docker Compose-এ wg-easy চালাতে ports, NET_ADMIN, প্রয়োজনীয় sysctls এবং ফোনে QR code দিয়ে onboarding দেখুন। Version 15-এর settings পরিবর্তনও জানুন।
আপনি যা তৈরি করছেন
wg-easy হলো একটি ওয়েব ইন্টারফেসসহ WireGuard, যা একটি Docker container হিসেবে চলে। এটি আপনার জন্য WireGuard ইন্টারফেস পরিচালনা করে এবং ক্লায়েন্ট তৈরির জন্য একটি ব্রাউজার UI যুক্ত করে। আপনার তৈরি করা প্রতিটি ক্লায়েন্ট একটি কনফিগারেশন ফাইল এবং একটি QR কোড পায়, তাই ফোনের ক্যামেরায় স্ক্রিন স্ক্যান করেই VPN-এ যুক্ত হওয়া যায়।
টানেলটি সাধারণ WireGuard-এর মতোই কাজ করে। কার্নেল মডিউল প্যাকেটগুলো আদান-প্রদান করে, তাই এর গতি সরাসরি হাতে কনফিগার করা সেটআপের মতোই থাকে। আপনি যা পাচ্ছেন তা হলো ক্লায়েন্ট লাইফসাইকেল ব্যবস্থাপনা: SSH-এর মাধ্যমে কনফিগারেশন ফাইল এডিট না করেই পিয়ার যোগ করা, নিষ্ক্রিয় করা বা মুছে ফেলা। এর বিনিময়ে আপনি কনফিগারেশনের ওপর সরাসরি নিয়ন্ত্রণ হারাবেন, যা VPS-এ ম্যানুয়াল WireGuard সেটআপ-এর মূল বিষয়।
আপনার এমন একটি Linux হোস্ট প্রয়োজন যা আপনি পরিচালনা করতে পারেন, যেমন একটি KVM VPS, যার একটি পাবলিক IP অ্যাড্রেস বা ডোমেইন নাম রয়েছে। এছাড়া একটি x86_64 বা arm64 CPU, Docker Engine-এর সাথে Compose প্লাগইন এবং root অ্যাক্সেস প্রয়োজন। যে কন্টেইনার ভার্চুয়ালাইজেশন হোস্ট কার্নেল শেয়ার করে, যেমন OpenVZ বা LXC, সেগুলো সাধারণত WireGuard মডিউল লোড করতে পারে না এবং সেক্ষেত্রে কন্টেইনারটি ইন্টারফেস চালু করতে ব্যর্থ হবে।
ভার্সন 15-এ সেটিংস এনভায়রনমেন্ট থেকে সরিয়ে নেওয়া হয়েছে
আপনি যে গাইডগুলো পাবেন তার বেশিরভাগই wg-easy 14-এর জন্য লেখা, যেখানে আপনি WG_HOST-কে আপনার সার্ভার অ্যাড্রেস এবং PASSWORD_HASH-কে অ্যাডমিন পাসওয়ার্ডের bcrypt হ্যাশ হিসেবে এনভায়রনমেন্ট ভেরিয়েবল হিসেবে সেট করতেন। ভার্সন 15 সম্পূর্ণ নতুনভাবে লেখা হয়েছে। অফিসিয়াল মাইগ্রেশন নোটে স্পষ্টভাবে বলা হয়েছে যে v15, v14-এর মতো একই এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে না এবং এর বেশিরভাগই ওয়েব UI-এর অ্যাডমিন প্যানেলে সরিয়ে নেওয়া হয়েছে।
তাই WG_HOST এবং PASSWORD_HASH এখন আর কোনো কাজ করে না। আপনি যদি কোনো পুরনো compose ফাইল কপি করেন, তবে কন্টেইনারটি চালু হবে, সেই লাইনগুলোকে উপেক্ষা করবে এবং তারপর আপনাকে ব্রাউজারে একটি অ্যাডমিন অ্যাকাউন্ট তৈরি করতে বলবে। এটি কোনো বাগ নয়। এটি নতুন সেটআপ প্রক্রিয়া।
অক্টোবর 2026 অনুযায়ী, পিন করার জন্য প্রধান ট্যাগ হলো 15। latest ব্যবহার না করে মেজর ভার্সন পিন করুন, কারণ একটি মেজর আপগ্রেড অন-ডিস্ক কনফিগারেশন ফরম্যাট পরিবর্তন করে এবং এটি সহজে রোল ব্যাক করা যায় না। 15-এ স্থানান্তরের ফলে v14-এর JSON ফাইলটি একটি SQLite ডেটাবেস দ্বারা প্রতিস্থাপিত হয়েছে।
Compose ফাইল
স্ট্যাকটির জন্য একটি ডিরেক্টরি তৈরি করুন এবং সেখানে অফিসিয়াল compose ফাইলটি লিখুন। এটি হলো আপস্ট্রিম ফাইল, যেখানে কমেন্ট করা ঐচ্ছিক লাইনগুলো বাদ দেওয়া হয়েছে।
sudo mkdir -p /etc/docker/containers/wg-easy
sudo curl -o /etc/docker/containers/wg-easy/docker-compose.yml \
https://raw.githubusercontent.com/wg-easy/wg-easy/master/docker-compose.ymlফাইলটির বিষয়বস্তু নিচে দেওয়া হলো:
volumes:
etc_wireguard:
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy:15
container_name: wg-easy
networks:
wg:
ipv4_address: 10.42.42.42
ipv6_address: fdcc:ad94:bacf:61a3::2a
volumes:
- etc_wireguard:/etc/wireguard
- /lib/modules:/lib/modules:ro
ports:
- "51820:51820/udp"
- "51821: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
- net.ipv6.conf.all.disable_ipv6=0
- net.ipv6.conf.all.forwarding=1
- net.ipv6.conf.default.forwarding=1
networks:
wg:
driver: bridge
enable_ipv6: true
ipam:
driver: default
config:
- subnet: 10.42.42.0/24
- subnet: fdcc:ad94:bacf:61a3::/64etc_wireguard হলো একটি named volume যা সার্ভার কি (key) এবং আপনার তৈরি করা প্রতিটি ক্লায়েন্টকে ধারণ করে, যা wg-easy.db নামক SQLite ডেটাবেসে সংরক্ষিত থাকে। এই ভলিউমটির ব্যাকআপ রাখুন, অন্যথায় সার্ভার রিবিল্ড করলে আপনার সমস্ত পিয়ার (peers) হারিয়ে যাবে। আপনি যদি এই ফাইলগুলো হোস্ট ফাইলসিস্টেমে দেখতে চান, তবে এটিকে bind mount দিয়ে পরিবর্তন করতে পারেন। তবে তা করার আগে bind mounts এবং named volumes-এর মধ্যে পার্থক্য পড়ে নিন, কারণ এগুলোর পারমিশন ভিন্নভাবে কাজ করে।
কেন NET_ADMIN, SYS_MODULE এবং sysctl সেটিংগুলো প্রয়োজন
ডিফল্টভাবে কোনো container-কে network stack পরিবর্তন করার অনুমতি দেওয়া হয় না। এই প্রতিটি line একটি নির্দিষ্ট বাধা দূর করে।
NET_ADMIN container-কে wg0 interface তৈরি করতে, এতে address নির্ধারণ করতে এবং route লিখতে দেয়। এটি না থাকলে interface চালু করার সময় container শুরু হয়ে পরে বন্ধ হয়ে যায়, কারণ ip link add wg0 type wireguard Operation not permitted ফেরত দেয়।
SYS_MODULE এবং read-only /lib/modules mount একসঙ্গে container-কে WireGuard kernel module load করতে দেয়, যদি host আগে থেকেই এটি load না করে থাকে। Module-টি image-এর ভিতরে নয়, host kernel-এ থাকে। তাই host directory-টি container-এর কাছে দৃশ্যমান করতে হয়। আধুনিক kernel-এ module-টি সাধারণত built in থাকে। host-এ sudo modprobe wireguard && echo ok চালিয়ে এটি নিশ্চিত করতে পারেন।
net.ipv4.ip_forward=1 kernel-কে এমন packet forward করতে দেয়, যেগুলো নিজে box-টির জন্য নির্ধারিত নয়। এটি না থাকলে client সংযোগ করে, handshake সফল হয়, কিন্তু internet-এর উদ্দেশ্যে পাঠানো প্রতিটি packet drop হয়। ফলে VPN connected দেখালেও ping 1.1.1.1 timeout হয়।
net.ipv4.conf.all.src_valid_mark=1 সেটিংটিই মানুষকে সবচেয়ে বেশি অবাক করে। WireGuard নিজের outgoing packet চিহ্নিত করে, যাতে সেগুলো আবার tunnel-এর ভিতর route না হয়। Strict reverse path filtering এমন একটি packet শনাক্ত করে, যার source address প্রত্যাশিত route-এর সঙ্গে মেলে না, এবং সেটি drop করে। এই sysctl kernel-কে marked packet গ্রহণ করতে বলে। এর ফলে full tunnel নিজেকেই অকার্যকর করে না।
এটি চালু করুন এবং অ্যাডমিন অ্যাকাউন্ট তৈরি করুন
cd /etc/docker/containers/wg-easy
sudo docker compose up -d
sudo docker compose logs -fstart এবং stop ব্যবহার না করে docker compose up এবং docker compose down ব্যবহার করুন। start শুধুমাত্র বিদ্যমান কন্টেইনারগুলোকে রিস্টার্ট করে, তাই compose ফাইলে আপনার করা কোনো পরিবর্তন, যেমন নেটওয়ার্ক এবং sysctl সেটিংস, কার্যকর হয় না। অন্যদিকে up পরিবর্তিত অংশগুলোকে নতুন করে তৈরি করে। রিবুট করার পরে যদি আপনি স্ট্যাকটি আবার ফিরে পেতে চান, তবে restart: unless-stopped সেটি নিশ্চিত করে। compose সার্ভিসগুলোর বুট আচরণ অংশে এই পলিসি কী করে এবং কী করে না, তা ব্যাখ্যা করা হয়েছে।
ওয়েব UI টি TCP 51821 পোর্টে লিসেন করে। প্রথমবার ভিজিট করলে এটি একটি সেটআপ পেজ দেখাবে যেখানে আপনাকে অ্যাডমিন অ্যাকাউন্ট তৈরি করতে হবে এবং ক্লায়েন্টরা সার্ভারে পৌঁছানোর জন্য যে হোস্ট অ্যাড্রেস ব্যবহার করবে তা নিশ্চিত করতে হবে। সেই হোস্ট অ্যাড্রেসটি প্রতিটি ক্লায়েন্ট কনফিগারেশনের Endpoint লাইনে যুক্ত হয়, তাই এটি অবশ্যই VPS-এর পাবলিক IP বা DNS নাম হতে হবে। যদি এটি ভুল হয়, তবে আপনার ফোনে থাকা QR কোডটি এমন কোনো ঠিকানায় নির্দেশ করবে যেখানে পৌঁছানো সম্ভব নয় এবং হ্যান্ডশেক প্রক্রিয়াটি কখনোই সম্পন্ন হবে না।
এই পোর্ট সম্পর্কে আরও একটি বিষয়: wg-easy নিজে থেকে কখনোই TLS সার্ভ করে না এবং এটি plain HTTP-কে প্রত্যাখ্যানও করে না। http:// এর মাধ্যমে UI লোড হয় এবং একটি সতর্কবার্তা দেখায়। ডিফল্ট সেটিংস যা পরিবর্তন করে তা হলো সেশন কুকি, যা Secure ফ্ল্যাগ বহন করে। তাই কোনো পাবলিক অ্যাড্রেসে plain HTTP-এর মাধ্যমে UI-তে পৌঁছানো ব্রাউজার সেই কুকিটি বাতিল করে দেয় এবং লগইন স্থায়ী হয় না। INSECURE=true সেই ফ্ল্যাগটি সরিয়ে ফেলে এবং অন্য কোনো কাজ করে না। TLS টার্মিনেট করে এমন একটি রিভার্স প্রক্সি সামনে বসালে, এমনকি self-signed সার্টিফিকেট ব্যবহার করলেও, wg-easy-তে কোনো পরিবর্তন করার প্রয়োজন হয় না।
UI port-কে ইন্টারনেটে উন্মুক্ত করবেন না
Compose file-টি প্রতিটি ইন্টারফেসে 51821 port-টি publish করে। এটি এমন একটি বক্সের লগইন পেজ যা আপনার ট্রাফিক রাউট করতে পারে, তাই এটি সবার জন্য উন্মুক্ত রাখা উচিত নয়। Docker-এ কোনো port publish করলে তা DOCKER চেইনে রুল লিখে দেয়, যা ufw-এর আগেই কার্যকর হয়। ফলে ufw deny রুল দিয়ে এটিকে বন্ধ করা যায় না। এই বিষয়টি বোঝা গুরুত্বপূর্ণ, এবং কেন Docker-এর published port ufw-কে উপেক্ষা করে নিবন্ধে এটি বিস্তারিত আলোচনা করা হয়েছে।
সহজ সমাধান হলো UI-কে loopback-এ bind করা এবং SSH tunnel-এর মাধ্যমে তা অ্যাক্সেস করা:
ports:
- "51820:51820/udp"
- "127.0.0.1:51821:51821/tcp"
environment:
- INSECURE=trueএরপর আপনার ল্যাপটপ থেকে এটি চালান:
ssh -L 51821:127.0.0.1:51821 youruser@your.server.addressআপনার ল্যাপটপের ব্রাউজারে http://127.0.0.1:51821 ওপেন করুন। ট্রাফিক SSH দ্বারা এনক্রিপ্ট করা থাকে এবং এই port অন্য কারো অনুরোধ গ্রহণ করে না। INSECURE=true শুধুমাত্র session cookie থেকে Secure flag সরিয়ে দেয়, যাতে ব্রাউজার এই plain HTTP ঠিকানায় আপনার লগইন বজায় রাখতে পারে। এটি এখানে নিরাপদ কারণ plain HTTP ট্রাফিক কখনোই loopback ইন্টারফেসের বাইরে যায় না।
UDP 51820 port খুলুন এবং উভয় firewall পরীক্ষা করুন
WireGuard-এর জন্য Internet থেকে UDP 51820-এ পৌঁছানো সম্ভব হতে হবে। Docker portটি publish করে, কিন্তু অনেক provider VPS-এর সামনে আলাদা network firewall রাখে, যা Docker নিয়ন্ত্রণ করতে পারে না। উভয় জায়গাতেই portটি খুলুন। আপনি যদি ufw দিয়ে host firewall পরিচালনা করেন, তাহলে হাতে nftables লেখার চেয়ে VPS-এর জন্য প্রাথমিক ufw rule ব্যবহার করা সহজ।
Containerটি সত্যিই listen করছে কি না পরীক্ষা করুন:
sudo ss -ulnp | grep 51820আপনার একটি listening UDP socket দেখা উচিত। ওই লাইনে কিছু না থাকলে container interface চালু করতে পারেনি, এবং sudo docker compose logs wg-easy কারণটি দেখাবে।
একটি client তৈরি করে ফোনে scan করুন
UI-তে একটি client তৈরি করুন এবং এমন একটি নাম দিন যা পরে চিনতে পারবেন, যেমন এটি যে device-এর জন্য ব্যবহার করা হবে তার নাম। wg-easy পরবর্তী খালি tunnel address বরাদ্দ করে এবং আপনার জন্য key pair তৈরি করে। প্রতিটি client row-তে একটি QR code এবং download করার জন্য .conf file থাকে।
ফোনে অফিসিয়াল WireGuard app install করুন। QR code থেকে tunnel যোগ করার option বেছে নিন এবং screen-এ দেখানো code-এর দিকে camera ধরুন। Tunnel-টি আপনার দেওয়া নামসহ দেখা যাবে। এটি চালু করুন। এরপর UI-র client row-তে transfer counter এবং সাম্প্রতিক handshake time দেখা শুরু হবে। ফোন tunnel-এ যুক্ত হলে এমন service-এ পৌঁছাতে পারবে যেগুলো আপনি Internet-এ প্রকাশ করেননি। এইভাবে কোনো server-এর একটি port-ও public Internet-এর জন্য খোলা না রেখেও ফোন যেকোনো স্থান থেকে একটি self-hosted photo server-এ upload চালিয়ে যেতে পারে। একই পদ্ধতি media-এর ক্ষেত্রেও কাজ করে। 90s-এর video store হিসেবে পুনর্নির্মিত একটি Jellyfin library hotel room থেকে browse করা যায়, কিন্তু এটি আপনার LAN-এ থাকা অবস্থার মতোই private থাকে। একই tunnel-এ alert বিপরীত দিকেও কাজ করে। একটি self-hosted ntfy server কোনো backup job ব্যর্থ হওয়ার সঙ্গে সঙ্গেই ফোনে message push করতে পারে, public Internet থেকে কোনো request গ্রহণ না করেই।
কোনো client চালু করার পর handshake না দেখালে client-টি server-এ একেবারেই পৌঁছাচ্ছে না। এর কারণ সাধারণত UDP 51820, যা provider firewall অথবা configuration-এ সংরক্ষিত endpoint address-এ সমস্যা থাকার নির্দেশ করে। Handshake দেখা গেলেও Internet কাজ না করলে forwarding অথবা DNS-এ সমস্যা থাকার সম্ভাবনা বেশি।
Desktop-এ .conf file download করে আবার type না করে WireGuard client-এ import করুন। ওই file-এর private key একবারই তৈরি হয় এবং একবারই দেখানো হয়। SSH private key-এর মতোই এই file নিরাপদে সংরক্ষণ করুন।
কখন UI-এর সীমাবদ্ধতা অতিক্রম করবেন
আপনার পিয়ারগুলো যদি কেবল মানুষ এবং ফোন হয়, তবে wg-easy সঠিক টুল। কনফিগারেশন ফাইল এডিট করার চেয়ে UI ব্যবহার করা দ্রুত এবং হারিয়ে যাওয়া ফোনের অ্যাক্সেস বাতিল করা মাত্র এক ক্লিকেই সম্ভব।
আপনি যখন এমন কিছু করতে চাইবেন যা UI-তে নেই, তখনই এর সীমাবদ্ধতাগুলো সামনে আসবে। Site to site রাউটিং, যেখানে কোনো পিয়ারের AllowedIPs একটি একক ঠিকানার পরিবর্তে পুরো একটি রিমোট সাবনেট কভার করে, সেটিই সাধারণত প্রথম বাধা। এরপর আসে পার-পিয়ার রাউটিং রুলসহ স্প্লিট টানেল অথবা আপনার প্রোভিশনিং টুল দিয়ে তৈরি কনফিগারেশন। সেই পর্যায়ে হাতে তৈরি সেটআপ কঠিন নয়, বরং ভিন্ন। সাধারণ WireGuard গাইড দেখায় কীভাবে wg0.conf ব্যবহার করে একই টানেল তৈরি করা যায়। আপনি যদি কন্ট্রোল প্লেন চালানো পুরোপুরি বন্ধ করতে চান, তবে WireGuard বনাম Tailscale নিবন্ধটি ম্যানেজড অপশনগুলো নিয়ে আলোচনা করে। এটি একটি সঠিক সিদ্ধান্ত কি না তা নির্ভর করে কোঅর্ডিনেশন সার্ভার আসলে কী কী অ্যাক্সেস করতে পারে তার ওপর, তাই নেটওয়ার্ক হস্তান্তরের আগে Tailscale-এর ট্রাস্ট মডেল পড়ে নেওয়া জরুরি। খরচ সাধারণত পরবর্তী প্রশ্ন, এবং Tailscale-এর ফ্রি প্ল্যানে কী কী অন্তর্ভুক্ত তা জানা প্রয়োজন; এটি কেবল অ-বাণিজ্যিক ব্যবহারের জন্য ছয়জন ব্যবহারকারী পর্যন্ত বিনামূল্যে পাওয়া যায়। তাই একটি পরিবার এটি বিনামূল্যে ব্যবহার করতে পারলেও ছোট ব্যবসায়িক টিম এর আওতায় পড়ে না। এরপর থেকে বিলিং ডিভাইসের পরিবর্তে ব্যবহারকারীর সংখ্যার ওপর ভিত্তি করে হয়, যা আপনার বর্তমান VPS-এর বিলিং থেকে ভিন্ন। তাই টিম মাইগ্রেট করার আগে ফ্রি প্ল্যান ছাড়িয়ে Tailscale-এর খরচ যাচাই করে নেওয়া উচিত। আপনি যে ফুল টানেলটি তৈরি করেছেন তার সরাসরি বিকল্প সেখানে আছে, কারণ VPS-কে Tailscale এক্সিট নোড হিসেবে অ্যাডভার্টাইজ করা আপনাকে সার্ভারের মাধ্যমে একই রাউট ব্যবহারের সুবিধা দেয়, যা প্রতিটি ক্লায়েন্ট কনফিগারেশনে লেখার পরিবর্তে অ্যাডমিন কনসোল থেকে অনুমোদন করা যায়। সাবনেটের সীমাবদ্ধতারও একটি বিকল্প আছে, কারণ VPS থেকে পুরো প্রাইভেট নেটওয়ার্ক অ্যাডভার্টাইজ করা সেই নেটওয়ার্কটিকে টেইলনেটের প্রতিটি ডিভাইসে পৌঁছে দেয়, যার জন্য আপনাকে UI-এর বাইরে গিয়ে AllowedIPs এডিট করতে হয় না। আপনি যদি ড্যাশবোর্ড এবং অটোমেটিক মেশ রাউটিং চান কিন্তু অন্য কারো কোঅর্ডিনেশন সার্ভার ব্যবহার করতে না চান, তবে VPS-এ নিজের NetBird সার্ভার চালানো আপনার নিজস্ব হার্ডওয়্যারে কন্ট্রোল প্লেন রাখার সুবিধা দেয়, যদিও এর জন্য DNS এবং TLS সেটআপ করতে হয় যা wg-easy-তে প্রয়োজন ছিল না।
যদি উপরের compose সিনট্যাক্স আপনার কাছে অপরিচিত মনে হয়, তবে VPS-এ Docker Compose-এর মৌলিক বিষয়সমূহ ফাইল ফরম্যাট এবং দৈনন্দিন কমান্ডগুলো ব্যাখ্যা করে।
FAQ
কেন wg-easy আমার WG_HOST এবং PASSWORD_HASH উপেক্ষা করছে?
এই ভেরিয়েবলগুলো wg-easy 14-এর অংশ। সংস্করণ 15 একটি সম্পূর্ণ নতুন সংস্করণ, যেখানে আপস্ট্রিম ডেভেলপাররা প্রায় সমস্ত কনফিগারেশন ওয়েব UI-এর অ্যাডমিন প্যানেলে সরিয়ে নিয়েছেন। কন্টেইনারটি এই ভেরিয়েবলগুলো পড়ে না, তাই এটি স্বাভাবিকভাবে চালু হয় এবং প্রথমবার ভিজিট করার সময় আপনাকে একটি অ্যাডমিন অ্যাকাউন্ট তৈরি করতে বলে। সেই সেটআপ পেজ থেকেই ক্লায়েন্ট-ফেসিং হোস্ট অ্যাড্রেস সেট করুন।
আমার কার্নেলে যদি ইতিমধ্যে WireGuard থাকে, তবে কি আমার SYS_MODULE প্রয়োজন?
না। SYS_MODULE এবং /lib/modules মাউন্টগুলো মূলত এই কারণে থাকে যাতে হোস্ট মেশিনে মডিউলটি না থাকলে কন্টেইনার তা লোড করতে পারে। যে হোস্টে sudo modprobe wireguard ইতিমধ্যে সফলভাবে কাজ করে, সেখানে এই ক্যাপাবিলিটিটি অপ্রয়োজনীয়। এটি সরিয়ে ফেলা একটি ভালো নিরাপত্তা পদক্ষেপ, তবে যে কোনো ক্ষেত্রেই NET_ADMIN প্রয়োজন হবে।
ক্লায়েন্ট কানেক্ট হচ্ছে কিন্তু ইন্টারনেট কাজ করছে না। সমস্যা কী?
হ্যান্ডশেক সফল কিন্তু ট্রাফিক আদান-প্রদান না হওয়ার অর্থ প্রায় সবসময়ই ফরওয়ার্ডিং সংক্রান্ত সমস্যা। নিশ্চিত করুন যে net.ipv4.ip_forward=1 এবং net.ipv4.conf.all.src_valid_mark=1 আপনার compose ফাইলে আছে, কারণ ম্যানুয়ালি এডিট করার সময় অনেক সময় এগুলো মুছে যায়। যদি ফরওয়ার্ডিং চালু থাকে, তবে ক্লায়েন্ট যে DNS সার্ভারটি পেয়েছে তা পরীক্ষা করুন। যদি টানেলটি সমস্ত ট্রাফিক VPN-এর মধ্য দিয়ে পাঠায় কিন্তু এমন একটি DNS সার্ভার ব্যবহার করে যা এখন আর নাগালের মধ্যে নেই, তবে ব্রাউজারে সংযোগটি অচল মনে হবে।
আমি কীভাবে আমার ক্লায়েন্টদের ব্যাকআপ নেব?
সবকিছু etc_wireguard নামক ভলিউমে সংরক্ষিত থাকে। সংস্করণ 15-এ এর অর্থ হলো কন্টেইনারের ভেতরে /etc/wireguard/wg-easy.db অবস্থানে একটি SQLite ডাটাবেস। v15-এর ডকুমেন্টেশনে কোনো ব্যাকআপ বা এক্সপোর্ট ফিচারের কথা বলা নেই, তাই ভলিউমটির সরাসরি ব্যাকআপ নিন: docker compose down চালান, ভলিউমের কন্টেন্ট সার্ভারের বাইরে কোথাও কপি করুন, তারপর docker compose up -d দিয়ে স্ট্যাকটি পুনরায় চালু করুন। যে কোনো আপগ্রেডের আগে এটি করুন। পুরনো গাইডে উল্লিখিত wg0.json ফাইলটি শুধুমাত্র wg-easy 14-এর জন্য। এটি v14-এর ব্যাকআপ বাটন থেকে এক্সপোর্ট করা ফাইল, এবং v15-এ এর একমাত্র ব্যবহার হলো পুরনো ইন্সটলেশন মাইগ্রেট করার সময় সেটআপ উইজার্ডে এটি আপলোড করা।
আমি কি reverse proxy-এর পেছনে wg-easy চালাতে পারি?
হ্যাঁ। ওয়েব UI পোর্টের সামনে প্রক্সি বসান, সেখানে TLS টার্মিনেট করুন এবং INSECURE আনসেট রাখুন। কন্টেইনারটি প্রক্সি থেকে আসা প্লেইন HTTP হপ গ্রহণ করে, এবং অফিসিয়াল Caddy ও Traefik উদাহরণগুলোতে কোনো INSECURE ভেরিয়েবল সেট করা থাকে না। যেহেতু ব্রাউজার প্রক্সির সাথে HTTPS-এ কথা বলে, তাই আপনি চাইবেন সেশন কুকি যেন তার Secure ফ্ল্যাগ বজায় রাখে, যা INSECURE=true সরিয়ে ফেলে। UDP 51820 সরাসরি পাবলিশ রাখুন, কারণ VPN ট্রাফিক হলো UDP এবং এটি HTTP প্রক্সির মধ্য দিয়ে যায় না।