SSD Nodes Learn Hosting plans →
নির্দেশিকা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-08-27

VPS-এ .onion সাইট হোস্ট করার সম্পূর্ণ গাইড

Ubuntu VPS-এ tor ও nginx দিয়ে v3 onion service চালান, loopback-এ bind করুন এবং public IP ফাঁসের ঝুঁকি কমান। v2 address 2021 সালে বাতিল হয়েছে।

আপনি যা তৈরি করছেন

একটি onion site হলো একটি সাধারণ web server, যা শুধু Tor network-এর মাধ্যমে অনুরোধ গ্রহণ করে। tor install করুন, /etc/tor/torrc-এ দুটি লাইন যোগ করুন, Tor যে address লিখে দেয় তা পড়ুন, তারপর nginx-কে 127.0.0.1-এ bind করুন, যাতে public IP-তে কোনো service উত্তর না দেয়। install করতে দশ মিনিট সময় লাগে। এই guide-এর বাকি অংশ leak-এর তালিকা, কারণ onion site ব্যর্থ হওয়ার সাধারণ কারণ হলো তার নিজস্ব configuration operator-এর দিকে সরাসরি নির্দেশ করে।

Tor-এর শুরু হয়েছিল "the onion router" হিসেবে, এবং onion service হলো এমন একটি service-এ, যেখানে শুধু Tor-এর মাধ্যমে পৌঁছানো যায়। Version 3 address-এর শেষে .onion থাকে এবং তার আগে 56টি character থাকে। এই character-গুলো service-এর ed25519 public key, একটি checksum এবং একটি version byte নিয়ে গঠিত; এগুলো base32-এ encoded। Version 2 address (16টি character) 2021 সালে network থেকে সরিয়ে নেওয়া হয়েছে। তাই আজ তৈরি করা যেকোনো address v3 হবে। Address-টিই key। এর দুটি ফল আছে। কোনো certificate authority ছাড়াই connection end to end encrypted এবং authenticated হয়। আর key file হারালে address-টিও চিরতরে হারাবেন।

আপনার server কখনো inbound connection গ্রহণ করে না। Tor কয়েকটি relay-কে introduction point হিসেবে নির্বাচন করে, directory server-এ একটি signed descriptor upload করে, এবং visitor যে rendezvous relay নির্বাচন করেছে সেখানে তার সঙ্গে সংযোগ স্থাপন করে। এই connection-গুলোর প্রতিটিই আপনার server থেকে outbound। কোনো port open করতে হয় না এবং কোনো DNS record publish করতে হয় না। একই VPS থেকে network-এ কিছু দিতে চাইলে সেটি ভিন্ন কাজ এবং এর কাঠামোও বিপরীত, কারণ একটি obfs4 bridge censored client-দের কাছ থেকে inbound connection গ্রহণ করে এবং reachable port প্রয়োজন।

Tor Project repository থেকে tor ইনস্টল করুন

Ubuntu-এর universe repository-তে tor package রয়েছে, কিন্তু release freeze হওয়ার সময়কার version-এর কাছাকাছিই এটি থেকে যায়। Tor Project-এর নিজস্ব repository বর্তমান stable release অনুসরণ করে। আপনার address নিজের নিয়ন্ত্রণে থাকবে কি না, সেই সিদ্ধান্ত নেওয়া software-এর জন্য এটিই আপনার প্রয়োজন। কোনো distribution-এ একটি package থাকা থেকে বোঝা যায় না যে সেটিতে এখনও কাজ চলছে কি না। নিজে host করা যেকোনো software-এর ক্ষেত্রে এটি যাচাই করা গুরুত্বপূর্ণ, কারণ Searx-এ 2023 সালের পর কোনো code commit হয়নি, আর SearXNG সেই project-টির উন্নয়ন এগিয়ে নিয়ে যাচ্ছে

sudo apt update
sudo apt install -y apt-transport-https gnupg wget
KEYURL=https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc
wget -qO- "$KEYURL" | gpg --dearmor | sudo tee /usr/share/keyrings/deb.torproject.org-keyring.gpg >/dev/null

Repository entry-টি deb822 format ব্যবহার করে, এবং Suites হিসেবে আপনার Ubuntu codename থাকতে হবে। এটি টাইপ না করে /etc/os-release থেকে পড়ুন। ভুল codename দিলে repository সঠিকভাবে resolve হলেও আপনার release-এর জন্য কোনো package পাওয়া যাবে না।

. /etc/os-release
sudo tee /etc/apt/sources.list.d/tor.sources >/dev/null <<EOF
Types: deb deb-src
URIs: https://deb.torproject.org/torproject.org/
Suites: $VERSION_CODENAME
Components: main
Signed-By: /usr/share/keyrings/deb.torproject.org-keyring.gpg
EOF
sudo apt update
sudo apt install -y tor deb.torproject.org-keyring

deb.torproject.org-keyring package signing key-কে বর্তমান রাখে। তাই key rotation হলেও এক বছর পরে apt update নষ্ট হবে না। tor চালু হয়েছে এবং network-এ পৌঁছাতে পারছে কি না পরীক্ষা করুন:

tor --version
sudo journalctl -u tor@default -n 20

Journal-এর শেষে Bootstrapped 100% (done): Done থাকার কথা। tor Bootstrapped 10% অবস্থায় আটকে থাকলে তার outbound path নেই। তাই আপনার provider-এর network firewall এবং নিজের egress rule পরীক্ষা করুন: sudo ufw status verbose-এ default হিসেবে allow (outgoing) দেখা উচিত।

এখন থেকে দুটি নাম গুরুত্বপূর্ণ। Package-টি debian-tor user হিসেবে tor চালায়, আর চলমান unit হলো tor@default.service। কারণ Debian ও Ubuntu-তে tor.service একটি wrapper, যা instance-এর চারপাশে কাজ করে। Instance name ব্যবহার করে status ও log দেখুন। তাহলে প্রতিবার প্রকৃত process-এর তথ্য পাবেন।

torrc-এ onion service কনফিগার করুন

/etc/tor/torrc-এ দুটি লাইন যোগ করুন:

HiddenServiceDir /var/lib/tor/onion_site/
HiddenServicePort 80 127.0.0.1:8080

HiddenServiceDir-এ Tor এই service-এর key এবং address সংরক্ষণ করে। এটি নিজে তৈরি করবেন না। Tor start হওয়ার সময় প্রয়োজনীয় owner এবং mode সহ এটি তৈরি করে। root হিসেবে তৈরি করা directory নিচের failure list-এর প্রথম failure ঘটায়।

HiddenServicePort-এর দুটি অংশ আছে। এগুলো গুলিয়ে ফেলা শুরুতে হওয়া সাধারণ ভুল। প্রথম number হলো tunnel-এর ভেতরে visitor যে port-এ সংযোগ করে। তাই 80 প্রত্যাশিত মান, এবং এটি পরিবর্তন করার কোনো কারণ নেই। দ্বিতীয় অংশটি হলো local address, যেখানে Tor ওই traffic forward করে। শুধু HiddenServicePort 80 লিখলে traffic 127.0.0.1:80-এ forward হয়। তাই address স্পষ্টভাবে লিখে high port ব্যবহার করলে onion vhost 80 port-এ ইতিমধ্যে listening থাকা কোনো service-এর সঙ্গে সংঘর্ষে পড়ে না।

sudo systemctl restart tor@default
sudo ls -l /var/lib/tor/onion_site/

Listing-এ hostname, hs_ed25519_public_key, hs_ed25519_secret_key এবং একটি খালি authorized_clients directory থাকা উচিত।

আপনার .onion address পড়ুন

sudo cat /var/lib/tor/onion_site/hostname

একটি লাইন ফিরে আসে: 56টি base32 অক্ষর এবং .onion। এই string-টিই সাইটটির সম্পূর্ণ পরিচয়। কেউ এটি বরাদ্দ করে না, কেউ এটি transfer করতে পারে না, এবং আপনি key file ধরে রাখলে কেউ এটি কেড়ে নিতে পারে না। এখনই এটি copy করুন, কারণ নিচের প্রতিটি configuration-এ এটি প্রয়োজন হবে। এই গাইডের বাকি অংশে এটিকে <your-address>.onion হিসেবে লেখা হবে।

nginx-কে 127.0.0.1-এ bind করে সাইট পরিবেশন করুন

sudo apt install -y nginx
sudo install -d -m 755 /srv/onion

/etc/nginx/sites-available/onion লিখুন:

server {
    listen 127.0.0.1:8080;
    server_name <your-address>.onion;

    root /srv/onion;
    index index.html;

    server_tokens off;
    etag off;
    access_log off;
    error_log /var/log/nginx/onion.error.log error;
}
echo '<h1>hello from the onion</h1>' | sudo tee /srv/onion/index.html
sudo ln -s /etc/nginx/sites-available/onion /etc/nginx/sites-enabled/onion
sudo nginx -t
sudo systemctl reload nginx

এখন সার্ভার থেকে দুটি বিষয় যাচাই করুন। প্রথমটি হলো, nginx onion name-এর জন্য সাড়া দিচ্ছে। এটি হলো সঠিক Host header, যা tor পাঠাবে:

curl -s -H 'Host: <your-address>.onion' http://127.0.0.1:8080/

দ্বিতীয়টি হলো, nginx সেখানে সাড়া দিচ্ছে এবং অন্য কোথাও নয়:

sudo ss -tlnp | grep 8080

address column-এ অবশ্যই 127.0.0.1:8080 লেখা থাকতে হবে। সেখানে 0.0.0.0:8080 বা *:8080 লেখা থাকলে আপনার onion site public internet-এও উন্মুক্ত, যা leak list-এর প্রথম সমস্যা। কোনো address ছাড়া listen 8080; line সব interface-এ bind করে। এটিই default আচরণ।

Tor Browser-এ address-টি খুলুন। প্রথমবার load হতে কয়েক সেকেন্ড লাগবে, কারণ client আপনার descriptor সংগ্রহ করে এবং একটি rendezvous circuit তৈরি করে।

Tor Project-এর নিজস্ব documentation loopback port-এর বদলে unix socket ব্যবহারের পরামর্শ দেয়: HiddenServicePort 80 unix:/var/run/tor/onion_site.sock, যেখানে nginx সেই path-এ listen করবে। অন্য host থেকে socket-এ কোনোভাবেই পৌঁছানো যায় না, এমনকি পরে server-এ দ্বিতীয় interface যোগ হলেও। এর বিনিময়ে file permission পরিচালনা করতে হয়, কারণ nginx socket তৈরি করে এবং tor debian-tor হিসেবে এতে connect করে। তাই দুই user-কে directory নিয়ে একই permission ব্যবস্থায় থাকতে হবে। যাচাই করা ss output-সহ loopback configuration সঠিকভাবে করা সহজ, এবং এই guide-এর বাকি অংশে সেটিই ধরা হয়েছে।

সাইটটি loopback-এ থাকলে এর জন্য server-এ কোনো inbound rule-এর প্রয়োজন নেই। নিজের ব্যবহারের জন্য 22 open রাখুন এবং বাকি সব deny করুন (VPS-এ নির্ধারণ করা উপযোগী ufw default )। মনে রাখবেন, কোনো service 0.0.0.0-এ bind করলে firewall সেটি নিষ্ক্রিয় করে না। Firewall শুধু firewall-এ পৌঁছানো packet filter করে। Container-এর ক্ষেত্রে বিষয়টি আরও গুরুত্বপূর্ণ, কারণ Docker port publish করলে ufw-এর আগে iptables rule লেখা হয়। তাই -p 8080:80 ব্যবহার করলে ufw port-টি denied দেখালেও onion backend public IP-তে উন্মুক্ত হয়ে যায়। Container port -p 127.0.0.1:8080:80 হিসেবে publish করুন।

একটি onion site-কে deanonymise করে এমন ফাঁস

Tor সার্ভারটি কোথায় আছে তা গোপন করে। সার্ভার কী প্রকাশ করে, Tor-এর কোনো কিছুই তা গোপন করে না। নিচের প্রতিটি বিষয় আপনার নিজের stack প্রকাশ করে। কোনো privacy tool-এর খ্যাতির বদলে তার প্রকৃত সীমা বোঝা সেই একই অভ্যাস, যা আপনাকে self-hosted SearXNG কী গোপন করে—অর্থাৎ search engine থেকে আপনার IP, এর বেশি কিছু নয়—তা বুঝতে সাহায্য করে।

আপনার public IP-তে একই site-এর response

মানুষকে সবচেয়ে বেশি বিপদে ফেলার বিষয় এটি। Scanner-গুলো নিয়মিত প্রতিটি routable address-এর HTTP response index করে, এবং সেই ফলাফল public ও searchable থাকে। আপনার public IP এবং onion address—দুই জায়গাতেই একই page serve করলে, দুটিকে মিলিয়ে ফেলা এক query-এর কাজ: একই title, একই favicon hash, একই ETag, একই header order। উপরের listen 127.0.0.1:8080; line-টিই এর সমাধান। এটি server থেকে নয়, অন্য একটি machine থেকে যাচাই করুন:

curl -sv --max-time 5 http://<your-public-ip>:8080/

Connection refused অথবা timeout পাওয়াই সঠিক ফল। যেকোনো HTML পাওয়া গেলে site-টি public। box-এ clearnet site-ও চললে, সেই vhost-এর জন্য আলাদা root দিন এবং public listener-এ একটি explicit default_server block রাখুন, যাতে unmatched Host header কখনো onion vhost-এ fall through করতে না পারে।

Version banner

curl -sI http://127.0.0.1:8080/ | grep -i '^server'

একটি default nginx Server: nginx/1.24.0 দিয়ে response দেয়। এই version string এবং অন্য header-গুলোর নির্দিষ্ট order মিলে এমন একটি fingerprint তৈরি হয়, যা আপনার onion host-কে clearnet host-এর সঙ্গে মিলিয়ে দেয়। server_tokens off; এটিকে Server: nginx-এ নামিয়ে আনে। এটি header সরায় না, এবং nginx-এ তা করার built-in directive নেই। তাই header সম্পূর্ণ সরাতে চাইলে headers-more module-ই সাধারণ সমাধান। PHP-তে expose_php = Off সেট না করা পর্যন্ত X-Powered-By যুক্ত হয়। etag off;-কেও একই তালিকায় রাখুন, কারণ nginx কোনো file-এর modification time ও size থেকে ETag তৈরি করে। ফলে একই file দুই server-এ copy করলে উভয় server একই ETag পাঠায়।

আপনার clearnet domain-এ নির্দেশ করা absolute URL

একটি rel="canonical" tag, একটি Open Graph og:url, একটি RSS feed, একটি sitemap, একটি password reset email, অথবা hardcoded logo URL—যেকোনো একটি onion-এর মাধ্যমে serve করা page-এর ভেতরে clearnet site-এর নাম প্রকাশ করে। /static/logo.svg-এর মতো root-relative path ব্যবহার করুন, এবং constant-এর বদলে application-কে request host থেকে base URL পড়তে দিন। Redirect-ও একই সমস্যার অন্য রূপ। একটি catch-all block-এ return 301 https://example.com$request_uri; onion visitor-কে আপনার আসল domain-এ পাঠায়, আর Location header সরাসরি সেই উত্তর জানিয়ে দেয়।

Clearnet site-এর সঙ্গে একই TLS certificate

Onion address নিজেই নিজেকে authenticate করে, কারণ address-টিই public key। তাই onion connection-এ http:// ইতিমধ্যে end-to-end encrypted, এবং Tor Browser এটিকে secure context হিসেবে বিবেচনা করে। onion vhost-এ আপনার বিদ্যমান certificate install করলে দুই site-এর সম্পর্ক প্রকাশ পায়। কারণ public trust পাওয়া প্রতিটি certificate Certificate Transparency log-এ record করা হয়, আর সেই log public, স্থায়ী এবং name দিয়ে searchable। Let's Encrypt certificate clearnet vhost-এ রাখুন এবং onion vhost-কে plain HTTP-তে রাখুন।

Third-party font এবং analytics

একটি CDN (content delivery network) থেকে নেওয়া font, অথবা একটি analytics script। Visitor-এর browser প্রতিটি asset সরাসরি fetch করে। ফলে third party জানতে পারে যে কেউ আপনার page load করেছে এবং সাধারণত কোন page load করেছে। Tor Browser-এর কঠোর security level-গুলো request-টি block-ও করে, ফলে layout ভেঙে যায়। Page-এর প্রয়োজনীয় প্রতিটি asset নিজে host করুন।

Host header-এর অমিল

যদি server_name tor পাঠানো Host header-এর সঙ্গে না মেলে, nginx সেই listen address-এর default server-এ fallback করে। একটি box-এ মাত্র একটি vhost থাকলে এটি বোঝা যায় না, কারণ একমাত্র server block-টিই default। পরে clearnet vhost যোগ করলে onion request সেখানে পৌঁছাতে পারে, এবং তার canonical tag ও redirect-সহ response দিতে পারে। প্রতিটি nginx পরিবর্তনের পরে curl -H 'Host: ...' check আবার চালান, এবং ফলাফলে আপনার আসল domain খুঁজে দেখুন:

curl -s -H 'Host: <your-address>.onion' http://127.0.0.1:8080/ | grep -o 'https\?://[^"]*' | sort -u

কোন process কোন socket-এর মালিক, তা জানা এই কাজের বড় অংশ (Linux-এ port এবং listening socket কীভাবে কাজ করে)।

Log-এ যা থেকে যায়

প্রতিটি request 127.0.0.1 থেকে আসে। তাই nginx-এর record করার মতো কোনো visitor address নেই, এবং access_log off;-এর জন্য আপনাকে কোনো অর্থ দিতে হয় না। এর উপরের application ভিন্ন বিষয়, কারণ order, email address বা uploaded file-এর metadata সামলানোর দায়িত্ব আপনার। আপনার নিজের অভ্যাসও গুরুত্বপূর্ণ। Harden না করা login দিয়ে box administer করা Tor-এর সুরক্ষার বাইরে থাকে। তাই একই VPS-এ SSH hardening-কে এই build-এর অংশ হিসেবে বিবেচনা করুন।

Private key-এর backup রাখুন, কারণ এটিই ঠিকানাটি

/var/lib/tor/onion_site/hs_ed25519_secret_key হলো service। কোনো registrar নেই এবং recovery-এর ব্যবস্থাও নেই। এটি হারালে ঠিকানাটিও হারিয়ে যাবে। এর একটি copy রাখলে copy-টি যার কাছে থাকবে, সে আপনার ঠিকানায় নিজের content serve করতে পারবে; আপনি কিছু revoke করার কোনো উপায় পাবেন না।

sudo systemctl stop tor@default
sudo tar -C /var/lib/tor -czf onion-keys.tgz onion_site
sudo chmod 600 onion-keys.tgz
sudo systemctl start tor@default

Archive-টি (gpg -c onion-keys.tgz) encrypt করে server-এর বাইরে সরিয়ে রাখুন। নতুন VPS-এ restore করতে archive এবং ownership—tor যে ownership প্রত্যাশা করে—দুটিই যথেষ্ট:

sudo systemctl stop tor@default
sudo tar -C /var/lib/tor -xzf onion-keys.tgz
sudo chown -R debian-tor:debian-tor /var/lib/tor/onion_site
sudo chmod 700 /var/lib/tor/onion_site
sudo systemctl start tor@default
sudo cat /var/lib/tor/onion_site/hostname

নতুন hardware-এ একই ঠিকানা ফিরে আসবে, tor descriptor আবার publish করার এক বা দুই মিনিট পরে। এটিই সম্পূর্ণ migration: DNS পরিবর্তন বা certificate পুনরায় issue করার প্রয়োজন নেই।

Onion-Location, সাইটটি clearnet-এও থাকলে

onion ঠিকানাটি গোপন রাখার জন্য নয়, সুবিধার জন্য হলে clearnet vhost থেকে সেটি প্রকাশ করুন:

add_header Onion-Location http://<your-address>.onion$request_uri;

এরপর Tor Browser address bar-এ একটি .onion available button দেখায় এবং সেখানে switch করার বিকল্প দেয়। clearnet page HTTPS-এর মাধ্যমে পরিবেশিত হলে এবং value-টি বৈধ onion URL হলে তবেই header-টি কার্যকর হয়।

এখানে একটি nginx নিয়ম মনে রাখতে হবে। কোনো location block নিজস্ব কোনো add_header directive ঘোষণা না করলেই কেবল সেটি parent block থেকে inherited হয়। তাই নিজস্ব add_header-সহ একটি location নীরবে Onion-Location বাদ দেয়। সেখানে সেটি আবার লিখুন, অথবা সব response header এক জায়গায় রাখুন। এই header প্রকাশ করলে ইচ্ছাকৃতভাবে দুই সাইটের মধ্যে সম্পর্ক স্থাপন হয়। Mirror-এর ক্ষেত্রে এটি সঠিক, কিন্তু যে সাইটকে অন্য সাইটের সঙ্গে সম্পর্কহীন রাখতে চান, তার ক্ষেত্রে এটি ভুল।

ভ্যানিটি ঠিকানা

mkp224o আপনার নির্দিষ্ট করা prefix দিয়ে শুরু হয় এমন ঠিকানা তৈরি না হওয়া পর্যন্ত key pair তৈরি করতে থাকে। এটি brute-force search, তাই prefix এবং আপনি কতক্ষণ অপেক্ষা করতে ইচ্ছুক—এ দুটির বাইরে আর কিছু configure করার নেই।

sudo apt install -y git gcc libc6-dev libsodium-dev make autoconf
git clone https://github.com/cathugger/mkp224o
cd mkp224o
./autogen.sh
./configure --enable-amd64-51-30k
make
./mkp224o -d onionkeys blog

প্রতিটি সফল ফলাফল onionkeys/<address>.onion/-এ আসে এবং সেখানে hostnamehs_ed25519_secret_key থাকে। এটি install করতে প্রথমে tor বন্ধ করুন। এরপর ওই directory-টি আপনার HiddenServiceDir-এ copy করুন। তারপর উপরের restore পদ্ধতিতে ব্যবহৃত একই chown এবং chmod 700 প্রয়োগ করুন।

Prefix-এর দৈর্ঘ্যই মোট খরচ নির্ধারণ করে। ঠিকানাটি base32 হওয়ায়, আপনি যত অতিরিক্ত character দাবি করবেন, প্রত্যাশিত key-এর সংখ্যা তত 32 গুণ বাড়বে। ছোট prefix একটি laptop-এ দ্রুত তৈরি হয়। দীর্ঘ prefix আপনার মালিকানাধীন কোনো যন্ত্রেই শেষ নাও হতে পারে। Vanity prefix ব্যবহার করলে পাঠকেরা পুরো ঠিকানার পরিবর্তে প্রথম কয়েকটি character চিনতে অভ্যস্ত হয়। Onion site-এর phishing copy তৈরির সময় এই অভ্যাসই কাজে লাগানো হয়।

যে ব্যর্থতাগুলো দেখা দিতে পারে এবং সংশ্লিষ্ট বার্তা

Restart-এর পরে কোনো hostname ফাইল নেই। Tor চালু হয়নি, অথবা directory গ্রহণ করেনি। sudo journalctl -u tor@default -n 50 ফাইলটির নাম জানায়:

/var/lib/tor/onion_site/ is not owned by this user (debian-tor, 108) but by root (0). Perhaps you are running Tor as the wrong user?

হাতে তৈরি করা directory এমনই দেখায়। ownership এবং mode ঠিক করুন, অথবা directory মুছে দিন এবং tor-কে এটি তৈরি করতে দিন।

Tor Browser-এ Onionsite Not Found (0xF0) দেখা যায়। client কোনো descriptor আনতে পারেনি। তাই network-এর দৃষ্টিতে ওই address-এ কিছুই published নেই। tor চলছে এবং bootstrap সম্পন্ন হয়েছে কি না নিশ্চিত করুন। টাইপ করা address-টি sudo cat /var/lib/tor/onion_site/hostname-এর সঙ্গে প্রতিটি character মিলিয়ে দেখুন। এরপর clock পরীক্ষা করুন। descriptor publish এবং validate করার জন্য Tor-এর সঠিক সময় দরকার। timedatectl-এ System clock synchronized: yes দেখানো উচিত।

Address resolve হয়, কিন্তু page কখনো load হয় না। Tor rendezvous সম্পন্ন করার পরে শেষ hop-এ, অর্থাৎ tor থেকে nginx পর্যন্ত, ব্যর্থ হয়েছে। এই hop-টি local, তাই tor log-এ কিছু দেখা যায় না। server-এ curl -sI http://127.0.0.1:8080/ চালান। Connection refused-এর অর্থ হলো nginx বন্ধ আছে, অথবা HiddenServicePort যে address নির্দেশ করে তার বদলে nginx অন্য address-এ listening করছে।

Page load হয়, কিন্তু প্রতিটি link আপনার আসল domain-এ যায়। Template-এ absolute URL রয়েছে। উপরের grep -o 'https\?://[^"]*' check চালান এবং address কোথাও share করার আগে সেটি যে ফল দেখায় তা ঠিক করুন।

কিছুক্ষণ কাজ করে, কিন্তু reboot-এর পরে বন্ধ হয়ে যায়। Site-এর ওপর নির্ভর করার আগে ইচ্ছাকৃতভাবে একবার box reboot করুন। এরপর sudo systemctl status tor@default এবং sudo systemctl status nginx চালান। কেউ হাতে শুরু করা service এবং enabled service একই রকম দেখায়, যতক্ষণ না machine restart হয়।

FAQ

আমার firewall-এ কি Tor onion service-এর জন্য কোনো port খুলতে হবে?

না। tor daemon শুধু outbound connection তৈরি করে—directory server, introduction point এবং প্রতিটি rendezvous relay-এর সঙ্গে। তাই কোনো inbound rule প্রয়োজন হয় না। Web server নিজেই 127.0.0.1-এ listening করে। SSH অনুমোদিত রেখে incoming traffic-এর জন্য ufw-এর default deny নীতি বজায় রাখুন। একই কারণে public IP না থাকলেও NAT (network address translation)-এর পেছনের কোনো machine থেকে onion service চালানো যায়।

Tor Browser-এ আমার .onion address-এ পৌঁছাতে পারছি না কেন?

Server থেকে শুরু করে ধাপে ধাপে বাইরে পরীক্ষা করুন। sudo journalctl -u tor@default -n 50-এ Bootstrapped 100% (done): Done দেখা উচিত। এরপর server-এ curl -sI http://127.0.0.1:8080/ চালালে একটি status line ফেরত আসা উচিত। তারপর টাইপ করা address-টি hostname file-এর সঙ্গে তুলনা করুন। একটি character ভুল হলেই সেটি সম্পূর্ণ ভিন্ন service। Onionsite Not Found (0xF0) বোঝায় যে address-টির জন্য কোনো descriptor পাওয়া যায়নি। সাধারণত এর কারণ tor চলছে না অথবা system clock ভুল।

একই address রেখে কি onion site নতুন server-এ স্থানান্তর করতে পারি?

হ্যাঁ। Address-টি hs_ed25519_secret_key থেকে তৈরি হয়। তাই সম্পূর্ণ HiddenServiceDir নতুন box-এ copy করুন, এর ownership debian-tor এবং mode 700 নির্ধারণ করুন, তারপর tor চালু করুন। Descriptor পুনরায় publish হলে address-টি আবার সক্রিয় হবে। DNS record update করার প্রয়োজন নেই। ওই file হারালে address-টি পুনরুদ্ধার করা যাবে না। তাই file তৈরি করার দিনই সেটির encrypted backup server-এর বাইরে রাখুন।

Onion site-এর কি HTTPS certificate প্রয়োজন?

না। 56-character address-টি service-এর public key। তাই connection শুরু থেকেই end-to-end encrypted ও authenticated থাকে। Tor Browser .onion name-এ http://-কে secure context হিসেবে বিবেচনা করে। Onion vhost-এ আপনার clearnet certificate পুনর্ব্যবহার করা কিছু না করার চেয়েও খারাপ। কারণ Certificate Transparency log public এবং কোন কোন name একই certificate ব্যবহার করছে, তা স্থায়ীভাবে record করে। .onion name-এর জন্য certificate কেনার একমাত্র কারণ হলো certificate প্রদানকারী CA-এর কাছ থেকে brand assurance পাওয়া। সেই link নকশাগতভাবেই public।