CGNAT के पीछे Starlink Mini 2: चलती साइट तक कैसे पहुँचें

CGNAT के पीछे Starlink Mini 2: चलती साइट तक कैसे पहुँचें

CGNAT के पीछे Starlink Mini 2: चलती साइट तक कैसे पहुँचें

संक्षेप में (2026-11-11 को जाँचा गया): SpaceX ने Starlink Mini 2 के प्री-ऑर्डर केवल निमंत्रण पर खोले हैं। यह हटाने योग्य बैटरी वाला पोर्टेबल डिश है। यह वहाँ और ज़्यादा कैमरे, सेंसर, फ़ील्ड लैपटॉप और अस्थायी दफ़्तर ऑनलाइन लाएगा जहाँ फ़ाइबर नहीं है। लेकिन सामान्य प्लान उन्हें ऐसा पता नहीं देता जिस तक इंटरनेट से पहुँचा जा सके: Starlink का IPv4 डिफ़ॉल्ट रूप से कैरियर-ग्रेड NAT (CGNAT) पर चलता है और आने वाले कनेक्शन ब्लॉक हैं। हमने Starlink नेटवर्क द्वारा घोषित IPv4 स्पेस गिना (12 मिलियन से ज़्यादा ग्राहकों के लिए 990,208 पते), एक स्क्रिप्ट लिखी जो बताती है कि कोई होस्ट CGNAT के पीछे है या नहीं, और चलती साइट तक पहुँचने के चार तरीकों की तुलना की।

स्रोत. Mini 2 की जानकारी Notebookcheck (Daniel Zlatev, 2026-11-10) और DishyTech (Colby Baber, 2026-11-09) से, Hacker News पर चर्चा: 2026-11-11 तक 369 पॉइंट और 380 टिप्पणियाँ। पता नीति: Starlink Help Center के लेख "What IP address does Starlink provide?" और "IP Address", 2026-11-11 को पढ़े गए। रूटिंग डेटा: RIPEstat, हमारी स्क्रिप्ट ने 2026-11-11 को पूछा।

Mini 2 में नया क्या है

विषय Mini 2, 2026-11-10 की रिपोर्टों के अनुसार
बैटरी हटाने योग्य, 71 Wh, 4.5 घंटे तक (SpaceX का आँकड़ा), USB-C से 60 W चार्जिंग
Wi-Fi Wi-Fi 6 (पहले Mini में Wi-Fi 5 था)
बनावट IP67, 314 x 263 x 23.1 mm, बैटरी और स्टैंड सहित 1.6 kg
उपलब्धता अमेरिका में चुने हुए ग्राहकों के लिए निमंत्रण पर प्री-ऑर्डर, बाकी देश बाद में
कीमत तय नहीं: Starlink साइट के कोड में $249 किट और $50 बैटरी (DishyTech), अन्य जगह बिना ब्योरे के $999

स्पीड के आँकड़े प्रकाशित नहीं हुए हैं। इस लेख के लिए बैटरी ही मुख्य बात है: जो डिश बिना बिजली के चार घंटे चलता है, उसे एक साइट से दूसरी साइट ले जाया जाता है, और इससे बदलता है कि आप उसके पीछे की चीज़ों तक कैसे पहुँचते हैं।

पते की समस्या: डिफ़ॉल्ट रूप से CGNAT

Starlink के सहायता पेज दो IPv4 नीतियाँ बताते हैं। डिफ़ॉल्ट नीति CGNAT है: राउटर को 100.64.0.0/10 से पता मिलता है, जो RFC 6598 की साझा रेंज है, कई ग्राहक हर सार्वजनिक पता साझा करते हैं, और आने वाला IPv4 ट्रैफ़िक अनुमत नहीं है। सार्वजनिक IPv4 पता केवल Priority प्लान पर विकल्प के रूप में मिलता है (दोनों सहायता पेज उन्हें अलग नाम देते हैं: एक में Local और Global Priority, दूसरे में Priority, Mobile Priority और Maritime)। हर लाइन को DHCPv6-PD से /56 IPv6 प्रीफ़िक्स भी मिलता है, और Starlink कहता है कि नेटिव IPv6 उसके सभी राउटर, किट और प्लान पर चलता है।

पोर्टेबल डिश के लिए दो और बातें मायने रखती हैं। Starlink के अपने Wi-Fi राउटर न पोर्ट फ़ॉरवर्डिंग सपोर्ट करते हैं, न फ़ायरवॉल नियम, न IPv4 के लिए, न IPv6 के लिए। और आरक्षित IPv4 पता और IPv6 प्रीफ़िक्स रीबूट के बाद बने रहते हैं, लेकिन डिश की जगह बदलने या सॉफ़्टवेयर अपडेट होने पर बदल सकते हैं। जो डिश चलता है, उसका पता भी चलता है।

सबके लिए पता क्यों नहीं: हमारी गिनती

हमारी स्क्रिप्ट ने RIPEstat से पूछा कि AS14593 (SPACEX-STARLINK) क्या घोषित करता है: 2,274 IPv4 प्रीफ़िक्स, जो 990,208 अनोखे पते कवर करते हैं, ज़्यादातर /23 और /24। जून 2026 में Starlink ने 12 मिलियन से ज़्यादा सक्रिय ग्राहक बताए (Mezha)। यानी लगभग हर 12 ग्राहकों पर एक सार्वजनिक IPv4 पता। /24 के लिए ip4.market के 90 दिन के मीडियन, $25.25 प्रति पता (इंडेक्स 2026-11-02 को अपडेट, देखें IPv4 कीमतें), पर हर ग्राहक को एक पता देने की लागत लगभग $303 मिलियन होगी; AS14593 जो स्पेस घोषित करता है उसकी कीमत इस दर पर लगभग $25 मिलियन है। IPv6 में तस्वीर उलटी है: 1,130 प्रीफ़िक्स, जिनमें 668 /40 हैं, और एक /40 में 65,536 ग्राहक /56 आते हैं, तो सिर्फ़ इन /40 में लगभग 43.8 मिलियन आते हैं।

गिनती की सीमाएँ: RIPEstat उन रूट को छोड़ देता है जिन्हें 10 से कम RIS पीयर देखते हैं, Starlink कुछ ट्रैफ़िक दूसरे AS नंबरों से ले जा सकता है, और घोषित स्पेस इस्तेमाल किए गए स्पेस के बराबर नहीं है। फिर भी यही अनुपात बताता है कि CGNAT डिफ़ॉल्ट क्यों है।

स्क्रिप्ट: क्या यह होस्ट CGNAT के पीछे है?

cgnat_check.js होस्ट के पते और उनका प्रकार (सार्वजनिक, RFC 1918, 100.64.0.0/10) दिखाती है, एक सार्वजनिक एंडपॉइंट से पूछती है कि उसे कौन सा पता दिखता है, उस पते को घोषित करने वाला नेटवर्क ढूँढती है और बताती है कि आने वाला IPv4 काम कर सकता है या नहीं। AS नंबर देने पर यह उस नेटवर्क का घोषित स्पेस भी जोड़ती है और ओवरलैप होने वाले प्रीफ़िक्स मिला देती है।

// cgnat_check.js - am I behind CGNAT, and can anything reach me from outside?
// Usage: bun cgnat_check.js [ASN]    (Bun or Node 18+, no dependencies)
import os from 'node:os'

const v4n = (ip) => ip.split('.').reduce((a, o) => a * 256 + Number(o), 0)
const inV4 = (ip, cidr) => {
  const [net, bits] = cidr.split('/')
  const size = 2 ** (32 - Number(bits))
  return Math.floor(v4n(ip) / size) === Math.floor(v4n(net) / size)
}
const kindV4 = (ip) =>
  inV4(ip, '100.64.0.0/10') ? 'CGNAT (RFC 6598)'
  : ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16'].some((c) => inV4(ip, c)) ? 'private (RFC 1918)'
  : inV4(ip, '169.254.0.0/16') ? 'link-local'
  : inV4(ip, '127.0.0.0/8') ? 'loopback' : 'public'
const kindV6 = (ip) => {
  const h = parseInt(ip.split(':')[0] || '0', 16)
  return (h & 0xe000) === 0x2000 ? 'global' : (h & 0xfe00) === 0xfc00 ? 'ULA' : (h & 0xffc0) === 0xfe80 ? 'link-local' : 'other'
}

async function trace(url) {
  try {
    const r = await fetch(url, { signal: AbortSignal.timeout(5000) })
    return Object.fromEntries((await r.text()).trim().split('\n').map((l) => l.split('=')))
  } catch { return null }
}
async function ripestat(call, res) { // RIPEstat sometimes answers an HTML error page: retry
  for (let i = 0; i < 3; i++) {
    try {
      const r = await fetch(`https://stat.ripe.net/data/${call}/data.json?resource=${res}&sourceapp=cgnat-check`, { signal: AbortSignal.timeout(15000) })
      return (await r.json()).data
    } catch { await new Promise((ok) => setTimeout(ok, 2000)) }
  }
  return null
}
async function origin(ip) {
  const d = await ripestat('prefix-overview', ip)
  return d ? { prefix: d.resource, asn: d.asns?.[0]?.asn, holder: d.asns?.[0]?.holder } : {}
}

const local = Object.entries(os.networkInterfaces()).flatMap(([dev, list]) =>
  list.filter((a) => !a.internal).map((a) => ({ dev, ip: a.address, fam: a.family === 'IPv4' || a.family === 4 ? 4 : 6 })))
console.log('Local addresses:')
for (const a of local) console.log(`  ${a.dev.padEnd(8)} ${a.ip.padEnd(40)} ${a.fam === 4 ? kindV4(a.ip) : kindV6(a.ip)}`)

const t4 = await trace('https://1.1.1.1/cdn-cgi/trace')
const t6 = await trace('https://[2606:4700:4700::1111]/cdn-cgi/trace')
const pub4 = t4?.ip, pub6 = t6?.ip
console.log(`\nSeen from outside: IPv4 ${pub4 ?? 'none'}, IPv6 ${pub6 ?? 'none'}`)
if (pub4) {
  const o = await origin(pub4)
  console.log(`  ${pub4} in ${o.prefix ?? '?'} originated by AS${o.asn ?? '?'} ${o.holder ?? ''}`)
  if (o.asn === 14593) console.log('  AS14593 = SpaceX Starlink')
}

const v4local = local.filter((a) => a.fam === 4)
let verdict
if (pub4 && v4local.some((a) => a.ip === pub4)) verdict = 'IPv4: public address on this host, inbound possible (firewall permitting)'
else if (v4local.some((a) => kindV4(a.ip).startsWith('CGNAT'))) verdict = 'IPv4: CGNAT on this host, no inbound IPv4'
else if (pub4) verdict = 'IPv4: behind NAT (home router and maybe CGNAT upstream): inbound only via port forward on every NAT layer'
else verdict = 'IPv4: no IPv4 path out'
console.log(`\n${verdict}`)
if (pub6 && local.some((a) => a.ip === pub6)) console.log('IPv6: global address on this host, inbound depends on the router firewall')
else console.log('IPv6: no global IPv6 path seen')

// Optional: bun cgnat_check.js AS14593 - how much address space does a network announce?
const asArg = process.argv[2]
if (asArg) {
  const ps = (await ripestat('announced-prefixes', asArg)).prefixes.map((p) => p.prefix)
  const v4 = ps.filter((p) => !p.includes(':')).map((p) => { const [n, b] = p.split('/'); return { s: v4n(n), e: v4n(n) + 2 ** (32 - b) } })
    .sort((a, b) => a.s - b.s || b.e - a.e)
  let total = 0, end = -1
  for (const p of v4) { if (p.e > end) { total += p.e - Math.max(p.s, end); end = p.e } }
  const v6 = ps.filter((p) => p.includes(':'))
  const by = (l) => Object.entries(l.reduce((m, p) => ((m[p.split('/')[1]] = (m[p.split('/')[1]] || 0) + 1), m), {})).sort((a, b) => a[0] - b[0]).map(([k, n]) => `/${k} x${n}`).join(', ')
  console.log(`\n${asArg}: ${v4.length} IPv4 prefixes, ${total.toLocaleString('en')} unique addresses; ${v6.length} IPv6 prefixes`)
  console.log(`  IPv4 sizes: ${by(ps.filter((p) => !p.includes(':')))}`)
  console.log(`  IPv6 sizes: ${by(v6)}`)
}
bun cgnat_check.js            # this host only
bun cgnat_check.js AS14593    # plus the space a network announces

आउटपुट, DCXV Cloud सर्वर पर Bun 1.4.4 के साथ 2026-11-11 को चलाया गया (होस्ट ऑक्टेट छिपाए गए):

Local addresses:
  eth0     178.23.189.x                             public
  eth0     fe80::x                                  link-local
  int0     10.10.x.x                                private (RFC 1918)
  int0     fe80::x                                  link-local

Seen from outside: IPv4 178.23.189.x, IPv6 none
  178.23.189.x in 178.23.189.0/24 originated by AS204057 DCXV-AS DCXV INTERNATIONAL LTD

IPv4: public address on this host, inbound possible (firewall permitting)
IPv6: no global IPv6 path seen

AS14593: 2274 IPv4 prefixes, 990,208 unique addresses; 1130 IPv6 prefixes
  IPv4 sizes: /20 x2, /21 x28, /22 x58, /23 x1434, /24 x752
  IPv6 sizes: /36 x1, /38 x67, /40 x668, /41 x173, /42 x11, /44 x4, /45 x4, /46 x11, /47 x20, /48 x171

हमारे सर्वर का सार्वजनिक पता eth0 पर है, इसलिए फ़ायरवॉल अनुमति देते ही आने वाले कनेक्शन उस तक पहुँचते हैं; इस मशीन पर IPv6 बस कॉन्फ़िगर नहीं है। हमारे पास Starlink लाइन नहीं है, इसलिए हम Starlink का आउटपुट नहीं दिखाते और उसके बारे में कोई दावा नहीं करते। वहाँ स्क्रिप्ट क्या करती है: Starlink राउटर के पीछे लैपटॉप पर लोकल पता निजी होता है और सार्वजनिक पता AS14593 के प्रीफ़िक्स में होता है, तो यह NAT बताती है और Starlink वाली लाइन छापती है; किसी दूसरे राउटर के WAN पोर्ट पर यह 100.64.0.0/10 का पता सीधे देखती है और CGNAT बताती है।

Starlink के पीछे की साइट तक पहुँचने के चार तरीके

तरीका कोई भी अंदर आ सके? क्या चाहिए क्या तोड़ता है
साइट तक सीधा IPv6 केवल IPv6 विज़िटर अपना राउटर (Starlink के राउटर में फ़ायरवॉल नियम नहीं) जगह बदलने पर /56 बदल सकता है; कई नेटवर्क अब भी केवल IPv4 हैं
Priority प्लान, सार्वजनिक IPv4 हाँ Priority प्लान जगह बदलने या अपडेट के बाद पता बदल सकता है
मेश VPN (Tailscale, ZeroTier) केवल आपके डिवाइस हर डिवाइस पर एजेंट सार्वजनिक विज़िटर या बिना एजेंट वाले डिवाइस के लिए नहीं
क्लाउड सर्वर पर WireGuard रिले हाँ, स्थिर IPv4 स्टैटिक IPv4 वाला छोटा सर्वर एक और हॉप और चलाने के लिए एक और मशीन

रिले इसलिए काम करता है क्योंकि CGNAT वही अनुमति देता है जिसके लिए बना है: बाहर जाने वाले कनेक्शन। साइट खुद रिले से जुड़ती है, और PersistentKeepalive = 25 हर 25 सेकंड में एक पैकेट भेजता है ताकि NAT एंट्री खुली रहे (WireGuard का quick start 25 s को ऐसा अंतराल बताता है जो बहुत तरह के फ़ायरवॉल के साथ चलता है)। विज़िटर रिले के पते से जुड़ते हैं, जो डेटा सेंटर में रहता है और डिश के साथ नहीं चलता।

रिले: दो कॉन्फ़िग फ़ाइलें

यहाँ नहीं चलाया गया: इसके लिए दो मशीनों पर root और एक दूर की साइट चाहिए। ये wg-quick के मानक रूप हैं; 192.0.2.10 डॉक्यूमेंटेशन पता है, उसकी जगह अपने रिले का पता डालें।

# /etc/wireguard/wg0.conf on the cloud server (public IPv4 192.0.2.10)
[Interface]
Address = 10.99.0.1/24
ListenPort = 51820
PrivateKey = <relay-private-key>
# forward TCP 443 that arrives on the public address to the site
PostUp = sysctl -w net.ipv4.ip_forward=1
PostUp = iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 10.99.0.2:443
PostUp = iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
PostUp = iptables -A FORWARD -i eth0 -o wg0 -p tcp --dport 443 -j ACCEPT
PostUp = iptables -A FORWARD -i wg0 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
PostDown = iptables -t nat -D PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 10.99.0.2:443
PostDown = iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE
PostDown = iptables -D FORWARD -i eth0 -o wg0 -p tcp --dport 443 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

[Peer]
# the site behind Starlink
PublicKey = <site-public-key>
AllowedIPs = 10.99.0.2/32
# /etc/wireguard/wg0.conf at the site (behind CGNAT)
[Interface]
Address = 10.99.0.2/24
PrivateKey = <site-private-key>

[Peer]
PublicKey = <relay-public-key>
Endpoint = 192.0.2.10:51820
AllowedIPs = 10.99.0.1/32
PersistentKeepalive = 25
wg genkey | tee private.key | wg pubkey > public.key
wg-quick up wg0

तीन बातें। MASQUERADE से हर कनेक्शन साइट पर 10.99.0.1 से आता है, इसलिए साइट के लॉग में विज़िटर का पता नहीं रहता; अगर चाहिए तो यह नियम हटाएँ और साइट के जवाब wg0 से वापस रूट करें। अब हर पैकेट सैटेलाइट लिंक और रिले दोनों से गुज़रता है, इसलिए आवाज़ या कंट्रोल लूप चलाने से पहले लेटेंसी मापें। और लिंक के खुद बंद होने की योजना बनाएँ: जुलाई 2025 का Starlink का वैश्विक आउटेज दो घंटे से ज़्यादा चला।

रिले का आकार और कीमत

रिले पैकेट आगे भेजता है और इससे ज़्यादा कुछ खास नहीं करता। हमारा Small क्लाउड प्लान (2 vCPU, 4 GB RAM, 40 GB, EUR 15.00 प्रति माह, एक स्टैटिक IPv4 शामिल) हमारी अपनी टास्क सूची में 25 टनल तक के WireGuard के लिए रखा गया है; VPN सर्वर पेज टीमों के लिए यही सेटअप बताता है। जिन डिवाइस बेड़ों में हर डिवाइस को पता चाहिए, उनके लिए देखें IoT और IPv4 की कमी।

हमारे साथ रिले शुरू करें

प्राग और कोविल्हा में हमारे Tier III डेटा सेंटर क्लाउड सर्वर चलाते हैं, हर एक के साथ स्टैटिक IPv4। एक सर्वर शुरू करें, दूर की साइट पर cgnat_check.js चलाएँ और आउटपुट sales@dcxv.com पर भेजें: हम रिले सेट करने में मदद करेंगे।

CGNAT के पीछे Starlink Mini 2: चलती साइट तक कैसे पहुँचें
networkingcloudinfrastructure

CGNAT के पीछे Starlink Mini 2: चलती साइट तक कैसे पहुँचें

Starlink Mini 2 आ गया, पर सामान्य प्लान CGNAT के पीछे हैं। हमने 12M+ ग्राहकों के लिए 990,208 IPv4 पते गिने और दूर की साइट तक पहुँचने के चार तरीके तुलना किए।

2026 में LACNIC IPv4 ट्रांसफर: नियम, फीस और एक साल की रोक
ipv4transfernetworking

2026 में LACNIC IPv4 ट्रांसफर: नियम, फीस और एक साल की रोक

2026 में LACNIC IPv4 ट्रांसफर: धारा 2.3.2.18 के नियम, US$ 1,037 फीस, NIC.br और NIC México, और 2016 से 2026 तक दर्ज 1,929 ट्रांसफर पर चलने वाली एक स्क्रिप्ट।

यूरोप में डेटा सेंटर विरोध: सर्वर खरीदार क्या करें
clouddedicatedinfrastructure

यूरोप में डेटा सेंटर विरोध: सर्वर खरीदार क्या करें

6 नवंबर को सैकड़ों लोग एम्स्टर्डम में Microsoft के डेटा सेंटर निर्माण स्थल में घुसे। डच बिजली ग्रिड के आंकड़े, यूरोपीय हब तक मापी गई लेटेंसी और खरीदार की सलाह।

अमेरिकी वोटरों ने डेटा सेंटर 45-1 से ठुकराए: खरीदारों के सबक
clouddedicatedinfrastructure

अमेरिकी वोटरों ने डेटा सेंटर 45-1 से ठुकराए: खरीदारों के सबक

अमेरिका में डेटा सेंटर पर 47 मतदान, प्रतिबंध वाला पक्ष 45 में जीता। हमने कच्चे आंकड़े फिर गिने और बताया कि सर्वर किराए पर लेने वालों के लिए इसका अर्थ क्या है।

AWS BYOIP 2026: हर IPv4 पर $43.80 या अपना /24 ब्लॉक
ipv4pricingcloud

AWS BYOIP 2026: हर IPv4 पर $43.80 या अपना /24 ब्लॉक

AWS हर पब्लिक IPv4 के लिए $0.005 प्रति घंटा, साल में $43.80 लेता है। BYOIP पते मुफ्त हैं: खरीदा या लीज़ किया /24 कब वसूल होता है, ROA जांच स्क्रिप्ट के साथ।