{"id":6152,"date":"2026-09-04T22:56:41","date_gmt":"2026-09-04T13:56:41","guid":{"rendered":"https:\/\/eternalsphere.net\/echoes\/?p=6152"},"modified":"2026-09-12T17:17:44","modified_gmt":"2026-09-12T08:17:44","slug":"urvxzbe5sm69c8q","status":"publish","type":"post","link":"https:\/\/blog.eternalsphere.net\/index.php\/2026\/09\/04\/urvxzbe5sm69c8q\/","title":{"rendered":"What Is an Onion Server? How a Server Can Be Publicly Reachable Without Revealing Its IP Address"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">When people first encounter Tor Onion Services, one detail often seems almost paradoxical:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">How can a server be reachable from anywhere on the Internet if users do not know its IP address?<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">On the ordinary Internet, a public server normally has to reveal where it is.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A website such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>example.com\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">is usually resolved through DNS:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>example.com\n    \u2193\nDNS\n    \u2193\n203.0.113.10\n    \u2193\nWeb Server\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The client eventually connects toward the server\u2019s IP address.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An Onion Service works very differently.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of publishing a server IP address, Tor allows a service to publish a cryptographic identity and establish connections entirely through the Tor network.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is the basic idea behind what is sometimes informally called an <strong>Onion server<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">1. \u201cOnion Server\u201d Is Not a Special Kind of Hardware<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">There is no special physical machine called an Onion server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An Onion Service can run on an ordinary computer:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Linux server<\/li>\n\n\n\n<li>VPS<\/li>\n\n\n\n<li>desktop computer<\/li>\n\n\n\n<li>Raspberry Pi<\/li>\n\n\n\n<li>virtual machine<\/li>\n\n\n\n<li>container host<\/li>\n\n\n\n<li>home server<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The machine itself can be completely ordinary.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What makes it an Onion Service is the presence of Tor software configured to publish a local service through the Tor network.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, a machine might already have a web application running locally:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>127.0.0.1:8080\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Without Tor, that service is only accessible from the same machine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With an Onion Service:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.onion\n                        \u2193\n                    Tor Network\n                        \u2193\n                  Tor Service\n                        \u2193\n                  127.0.0.1:8080\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now a Tor user can reach that local application from anywhere.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The web application itself does not need to understand Tor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It may simply be:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Nginx<\/li>\n\n\n\n<li>Apache<\/li>\n\n\n\n<li>Caddy<\/li>\n\n\n\n<li>a Python application<\/li>\n\n\n\n<li>Node.js<\/li>\n\n\n\n<li>a self-hosted web interface<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Tor provides the anonymous transport layer around it.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">2. The Server Does Not Publish Its Public IP Address<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This is one of the most important differences from ordinary hosting.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A traditional public website usually exposes a chain such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Domain\n  \u2193\nDNS\n  \u2193\nPublic IP\n  \u2193\nRouter \/ Firewall\n  \u2193\nServer\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If a website is hosted at home, the architecture may look like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Internet\n   \u2193\nPublic IP\n   \u2193\nHome Router\n   \u2193\nPort Forwarding\n   \u2193\nInternal Server\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Anyone connecting to the server can normally determine the public IP address.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An Onion Service changes the model:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Tor Client\n    \u2193\nTor Network\n    \u2193\nOnion Service\n    \u2193\nLocal Application\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The client does not need to know the server\u2019s public IP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead, both sides communicate through Tor circuits.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This creates a very unusual property:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">A service can have a stable public address without publishing its physical network location.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">3. The <code>.onion<\/code> Address Is the Service Identity<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">On the ordinary web, a domain name and a server are conceptually separate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>example.com\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">is registered through the domain-name system and later configured to point toward a server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An Onion Service does not work that way.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Modern Onion Services use a cryptographic key pair.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conceptually:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Private Key\n    \u2193\nPublic Key\n    \u2193\nEncoded identity information\n    \u2193\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.onion\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>.onion<\/code> address is therefore closely related to the cryptographic identity of the service.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is no conventional process equivalent to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Buy domain\n\u2193\nRegister domain\n\u2193\nConfigure authoritative DNS\n\u2193\nPoint DNS record to IP\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Instead:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Generate Onion Service keys\n\u2193\nDerive .onion address\n\u2193\nPublish service through Tor\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is why <code>.onion<\/code> addresses are long and apparently random.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">They are not primarily human-readable names.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">They represent cryptographic identities.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">4. There Is No Ordinary DNS Lookup<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose a Tor Browser user enters:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.onion\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The browser does not send that address to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Google DNS\nCloudflare DNS\nISP DNS\nDNS Root Servers\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The normal DNS hierarchy is not responsible for <code>.onion<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead, Tor uses its own Onion Service discovery system.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This means the question is not:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u201cWhat IP address corresponds to this hostname?\u201d<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">The question is closer to:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u201cHow can a Tor client establish a secure anonymous connection with the service that owns this cryptographic identity?\u201d<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">That distinction is fundamental.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">5. The Onion Service First Creates Introduction Points<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">An Onion Service needs some way for clients to begin contacting it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But it cannot simply publish:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Onion address \u2192 Server IP\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That would immediately reveal the server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead, the Onion Service establishes Tor circuits to several relays called:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Introduction Points<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Conceptually:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> <code>            Introduction Point A\n            \/\nOnion Server \u2500 Introduction Point B\n            \\\n             Introduction Point C\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">More accurately:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Onion Service\n      \u2502\n      \u251c\u2500\u2500 Tor circuit \u2500\u2500 Introduction Point A\n      \u2502\n      \u251c\u2500\u2500 Tor circuit \u2500\u2500 Introduction Point B\n      \u2502\n      \u2514\u2500\u2500 Tor circuit \u2500\u2500 Introduction Point C\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The introduction points do not need to know the real-world identity of the service.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">They simply act as controlled contact points inside the Tor network.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">6. The Service Publishes a Descriptor<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The Onion Service then creates information describing how clients can initiate contact.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This information is called an:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Onion Service Descriptor<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">The descriptor contains information related to the service\u2019s introduction mechanism.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It does not simply publish the server\u2019s public IP address.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The descriptor is stored on selected Tor relays that perform the role of:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>HSDir \u2014 Hidden Service Directory<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Conceptually:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Onion Service\n      \u2502\n      \u2502 publish descriptor\n      \u25bc\n   HSDir Relays\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">These directories form part of a distributed system.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is somewhat analogous to a directory service, but it is fundamentally different from ordinary DNS.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">7. A Client Finds the Service Without Learning Its IP<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">When Tor Browser receives an Onion address, it uses information derived from that address and the Tor network state to locate the appropriate service descriptor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conceptually:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Tor Browser\n     \u2502\n     \u2502 .onion address\n     \u25bc\nTor Network\n     \u2502\n     \u25bc\nHSDir\n     \u2502\n     \u25bc\nService Descriptor\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The descriptor tells the client enough to begin communicating with the Onion Service.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Crucially, the descriptor does not need to reveal:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Server public IP\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The client learns how to contact the service <strong>through Tor<\/strong>, rather than where the server physically exists on the Internet.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">8. The Client Does Not Connect Directly to the Server<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This is the most elegant part of the Onion Service architecture.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The client chooses another Tor relay to become a:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Rendezvous Point<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">The client creates a Tor circuit toward it:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client\n   \u2502\n   \u2502 Tor Circuit\n   \u25bc\nRendezvous Point\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The client then sends information through one of the service\u2019s Introduction Points indicating where it would like the service to meet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conceptually:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client\n   \u2502\n   \u25bc\nIntroduction Point\n   \u2502\n   \u25bc\nOnion Service\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The Onion Service then independently creates its own Tor circuit toward the Rendezvous Point.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eventually:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client\n   \u2502\n   \u2502 Tor Circuit\n   \u25bc\nRendezvous Point\n   \u25b2\n   \u2502 Tor Circuit\n   \u2502\nOnion Service\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The two parties meet inside the Tor network.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Neither side needs to establish a direct Internet connection to the other.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">9. There Is No Tor Exit Relay<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This is another major difference between ordinary Tor browsing and Onion Services.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When accessing a normal public website through Tor:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client\n   \u2193\nTor Guard\n   \u2193\nTor Relay\n   \u2193\nTor Exit\n   \u2193\nNormal Website\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Eventually traffic must leave Tor and enter the ordinary Internet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That requires an <strong>Exit Relay<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With an Onion Service:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client\n   \u2193\nTor\n   \u2193\nRendezvous\n   \u2191\nTor\n   \u2191\nOnion Service\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The communication remains inside the Tor network.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is no conventional Tor exit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This brings several important consequences:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>the server does not see the client\u2019s real IP;<\/li>\n\n\n\n<li>the client does not see the server\u2019s real IP;<\/li>\n\n\n\n<li>no exit relay is needed;<\/li>\n\n\n\n<li>communication is protected by the Onion Service protocol;<\/li>\n\n\n\n<li>both sides communicate through Tor circuits.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This is why Onion Services are sometimes described as providing anonymity to <strong>both ends<\/strong> of the connection.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">10. Why Port Forwarding May Be Unnecessary<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This is one of the most practical consequences of the architecture.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Consider a normal server behind a home router.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Its internal address might be:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>192.168.x.x\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The server cannot normally accept connections directly from the Internet because NAT separates the private network from the public Internet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Traditional hosting therefore requires something like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Internet\n    \u2193\nPublic IP\n    \u2193\nRouter\n    \u2193\nPort Forwarding\n    \u2193\n192.168.x.x:443\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The router must explicitly allow inbound traffic.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An Onion Service does not work this way.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The server itself establishes <strong>outbound Tor connections<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conceptually:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Home Server\n     \u2502\n     \u2502 outbound connection\n     \u25bc\nTor Network\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A remote client also connects outbound into Tor:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Remote Client\n     \u2502\n     \u25bc\nTor Network\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The Tor network then brings the two sides together.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So the architecture becomes:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> <code>                Tor Network\n                \/           \\\n               \/             \\\n     Tor Client               Home Server\n                                  \u2502\n                              Local Service\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The home router does not necessarily need to accept a direct public inbound connection to the application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Therefore:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>An Onion Service can often expose a service globally without traditional port forwarding.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">This is particularly useful behind:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>NAT<\/li>\n\n\n\n<li>carrier-grade NAT<\/li>\n\n\n\n<li>changing public IP addresses<\/li>\n\n\n\n<li>restrictive inbound firewalls<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">provided outbound Tor connectivity is available.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">11. Dynamic Public IP Addresses Become Much Less Important<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Traditional self-hosting often depends heavily on a public IP address.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the address changes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Old IP\n   \u2193\nDisconnected\n   \u2193\nNew IP\n   \u2193\nUpdate Dynamic DNS\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is why many home servers use Dynamic DNS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An Onion Service is different.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Its identity is based on cryptographic keys rather than the current public IP address.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Therefore:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Public IP changes\n        \u2193\nTor reconnects\n        \u2193\nSame Onion Service identity\n        \u2193\nSame .onion address\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">As long as the Onion Service retains its private key, the Onion address can remain the same.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This effectively separates:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>service identity<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">from:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>network location<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">That is a major architectural difference from conventional Internet hosting.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">12. A Stable Address Without a Stable Location<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This property is worth emphasizing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Traditional hosting typically assumes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Stable service\n      \u2193\nStable DNS\n      \u2193\nKnown network destination\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tor allows:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Stable service identity\n        \u2193\nStable .onion address\n        \u2193\nChanging or hidden physical network location\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A server could theoretically:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>change ISP;<\/li>\n\n\n\n<li>move to another network;<\/li>\n\n\n\n<li>obtain another public IP;<\/li>\n\n\n\n<li>move behind another router;<\/li>\n\n\n\n<li>move from one machine to another;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">while retaining the same Onion Service identity, provided the necessary Onion Service private keys are transferred securely.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">From the client&#8217;s perspective, the Onion address remains unchanged.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">13. The Application Can Listen Only on Localhost<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Another useful security property is that the actual application does not necessarily need to listen on a public network interface.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Web Application\n127.0.0.1:8080\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tor can be configured conceptually as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.onion:80\n    \u2193\n127.0.0.1:8080\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The application remains bound to localhost:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Internet \u2500\u2500X\u2500\u2500&gt; 127.0.0.1:8080\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">but Tor can reach it locally:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Tor Process \u2500\u2500\u2500\u2500\u2500&gt; 127.0.0.1:8080\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This provides a clean separation:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>External world\n      \u2193\nTor\n      \u2193\nLocal service\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">instead of:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>External world\n      \u2193\nOpen firewall port\n      \u2193\nPublicly listening web server\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">It does not eliminate the need for normal application security, but it can significantly reduce direct network exposure.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">14. An Onion Service Does Not Have to Be a Website<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The word \u201cserver\u201d often creates the impression that Onion Services are only web servers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is not true.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tor transports TCP connections, so many TCP-based services can potentially be exposed through Onion Services.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conceptually:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Onion Service\n\u251c\u2500 HTTP website\n\u251c\u2500 HTTPS website\n\u251c\u2500 SSH\n\u251c\u2500 chat server\n\u251c\u2500 file transfer service\n\u251c\u2500 custom API\n\u2514\u2500 custom TCP application\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>xxxxxxxx...onion:22\n        \u2193\n       Tor\n        \u2193\n127.0.0.1:22\n        \u2193\n       SSH\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The Onion Service acts as an anonymous network-access layer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The underlying application may remain almost completely unaware that Tor exists.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">15. Client Anonymity and Server Anonymity Are Different Problems<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Ordinary Tor browsing mainly protects the client.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client\n   \u2193\nTor\n   \u2193\nExit\n   \u2193\nexample.com\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The website is public and its infrastructure can generally be located.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tor hides the client from the website.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An Onion Service protects both sides differently:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Anonymous Client\n       \u2193\n      Tor\n       \u2193\nAnonymous Service\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The client does not need to know the server\u2019s IP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The server does not need to know the client\u2019s IP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This creates a symmetrical architecture that ordinary web hosting does not provide.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">16. The Server Is Hidden, but Not Magically Invulnerable<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Hiding the network location does not make the application secure by itself.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An Onion Service can still contain:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>vulnerable software;<\/li>\n\n\n\n<li>weak passwords;<\/li>\n\n\n\n<li>application bugs;<\/li>\n\n\n\n<li>misconfigured permissions;<\/li>\n\n\n\n<li>outdated dependencies;<\/li>\n\n\n\n<li>information leaks;<\/li>\n\n\n\n<li>identifying metadata.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For example, an application might accidentally display:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>internal hostname\npublic hostname\nemail address\nsoftware paths\nserver metadata\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">or make separate outbound connections outside Tor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Such mistakes can reveal information independently of the Onion protocol.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Therefore:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Network-location anonymity and application security are separate problems.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Tor protects the transport architecture.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The service still needs normal security engineering.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">17. An Onion Service Is Not a VPN Tunnel<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">It is also useful to distinguish Onion Services from VPNs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A VPN typically creates:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Device\n   \u2193\nEncrypted Tunnel\n   \u2193\nVPN Server\n   \u2193\nInternet\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The VPN server acts as a network gateway.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An Onion Service instead creates a service endpoint inside Tor:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client\n   \u2193\nTor Network\n   \u2193\nRendezvous\n   \u2191\nTor Network\n   \u2191\nService\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">There is no requirement for a single central gateway that knows both endpoints.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The architecture and trust model are fundamentally different.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">18. Why This Architecture Is Unusual<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Traditional Internet architecture often exposes location as part of communication.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To connect to something, a client usually needs to know where it is.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conceptually:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Identity\n   \u2193\nAddress\n   \u2193\nLocation\n   \u2193\nConnection\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tor Onion Services break this relationship.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">They allow:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Identity\n   \u2193\nCryptographic Onion Address\n   \u2193\nAnonymous Rendezvous\n   \u2193\nConnection\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The physical server location does not have to be revealed as part of service discovery.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This can be summarized as:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Connect to an identity instead of connecting to a location.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">That is perhaps the most important conceptual difference between an Onion Service and an ordinary Internet server.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">19. Ordinary Hosting and Onion Hosting Compared<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Property<\/th><th>Ordinary Internet Server<\/th><th>Onion Service<\/th><\/tr><\/thead><tbody><tr><td>Address<\/td><td>Domain name<\/td><td><code>.onion<\/code> address<\/td><\/tr><tr><td>Name system<\/td><td>DNS<\/td><td>Tor Onion Service mechanism<\/td><\/tr><tr><td>Address registration<\/td><td>Usually required for domain<\/td><td>Not required<\/td><\/tr><tr><td>Public IP normally exposed<\/td><td>Yes<\/td><td>No<\/td><\/tr><tr><td>Server location discoverable<\/td><td>Usually<\/td><td>Designed to be hidden<\/td><\/tr><tr><td>Port forwarding behind NAT<\/td><td>Often required<\/td><td>Often unnecessary<\/td><\/tr><tr><td>Static public IP required<\/td><td>No, but useful<\/td><td>Not required<\/td><\/tr><tr><td>Dynamic DNS useful<\/td><td>Often<\/td><td>Usually unnecessary<\/td><\/tr><tr><td>Client knows server IP<\/td><td>Normally yes<\/td><td>No<\/td><\/tr><tr><td>Server knows client IP<\/td><td>Normally yes<\/td><td>No<\/td><\/tr><tr><td>Tor exit relay required<\/td><td>N\/A or yes when reached through Tor<\/td><td>No<\/td><\/tr><tr><td>Cryptographic service identity<\/td><td>Usually certificate-based<\/td><td>Built into Onion identity<\/td><\/tr><tr><td>Works behind NAT<\/td><td>With forwarding or tunneling<\/td><td>Often directly via outbound Tor<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The important difference is not simply encryption.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is the network architecture itself.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">20. The Deeper Idea: Separating Identity From Location<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The ordinary Internet tightly couples several concepts:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Domain\n   \u2193\nIP address\n   \u2193\nNetwork\n   \u2193\nPhysical server\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">An Onion Service deliberately weakens those relationships.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Cryptographic identity\n        \u2193\n    .onion address\n        \u2193\n      Tor\n        \u2193\nHidden network location\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The address represents <strong>who the service cryptographically is<\/strong>, not simply <strong>where the server currently resides<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is why Onion Services can provide capabilities that initially appear surprising:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>a server can be globally reachable without publicly advertising its IP address;<\/li>\n\n\n\n<li>it can operate behind NAT without conventional inbound port forwarding;<\/li>\n\n\n\n<li>its public IP can change without changing its Onion identity;<\/li>\n\n\n\n<li>both client and server can avoid directly learning each other&#8217;s IP addresses;<\/li>\n\n\n\n<li>no conventional DNS registration is necessary;<\/li>\n\n\n\n<li>the entire connection can remain inside the Tor network.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">An \u201cOnion server\u201d is therefore not really a special server at all.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is an ordinary service placed behind an extraordinary addressing and routing architecture.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The most important idea can be reduced to one sentence:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>An Onion Service allows the Internet to reach a service by cryptographic identity rather than by directly exposing its physical network location.<\/strong><\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>When people first encounter Tor Onion Services, one detail often seems almost paradoxical: How can a server be reachable from anywhere on the Internet if users do not know its IP address? On the ordinary Internet, a public server normally has to reveal where it is. A website such as: &hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[120],"tags":[245],"class_list":["post-6152","post","type-post","status-publish","format-standard","hentry","category-1s3b6h7r2zay02x","tag-tor"],"_links":{"self":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts\/6152","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/comments?post=6152"}],"version-history":[{"count":1,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts\/6152\/revisions"}],"predecessor-version":[{"id":6153,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts\/6152\/revisions\/6153"}],"wp:attachment":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/media?parent=6152"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/categories?post=6152"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/tags?post=6152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}