
Debian, Ubuntu, Fedora, CentOS, Arch Linux और अन्य पर अपना खुद का OpenVPN सर्वर सेट अप करें
Debian, Ubuntu, Fedora, openSUSE, CentOS, Amazon Linux, Arch Linux, Oracle Linux, Rocky Linux और AlmaLinux के लिए OpenVPN इंस्टॉलर।
यह स्क्रिप्ट आपको कुछ ही सेकंडों में अपना स्वयं का सुरक्षित VPN सर्वर सेटअप और प्रबंधित करने देगी।
यह स्क्रिप्ट आपके अपने सर्वर पर चलाने के लिए है, चाहे वह VPS हो, समर्पित सर्वर हो, या घर का कोई कंप्यूटर भी हो।
सेटअप हो जाने के बाद, आप हर उस डिवाइस के लिए क्लाइंट कॉन्फ़िगरेशन फ़ाइलें उत्पन्न कर पाएंगे जिसे आप कनेक्ट करना चाहते हैं।
प्रत्येक क्लाइंट अपने इंटरनेट ट्रैफ़िक को पूरी तरह एन्क्रिप्टेड रूप से सर्वर के माध्यम से रूट कर पाएगा।```mermaid graph LR A[Phone] -->|Encrypted| VPN B[Laptop] -->|Encrypted| VPN C[Computer] -->|Encrypted| VPN
VPN[OpenVPN Server]
VPN --> I[Internet]
## OpenVPN क्यों?
जब यह स्क्रिप्ट बनाई गई थी, तब OpenVPN ओपन-सोर्स VPNs के लिए डी फैक्टो मानक था। WireGuard बाद में आया और अधिकांश उपयोग मामलों के लिए सरल और तेज़ है। [wireguard-install](https://github.com/angristan/wireguard-install) देखें।
फिर भी, OpenVPN तब समझ में आता है जब आपको चाहिए:
- **TCP समर्थन**: प्रतिबंधात्मक वातावरणों में काम करता है जहाँ UDP अवरुद्ध है (कॉर्पोरेट नेटवर्क, हवाई अड्डे, होटल, आदि)
- **पासवर्ड-संरक्षित निजी कुंजियाँ**: WireGuard कॉन्फ़िग में निजी कुंजी सादे पाठ में संग्रहीत होती है
- **लीगेसी संगतता**: लगभग हर प्लेटफ़ॉर्म, जिसमें पुराने सिस्टम शामिल हैं, के लिए क्लाइंट मौजूद हैं
## विशेषताएँ
- उपयोग के लिए तैयार OpenVPN सर्वर स्थापित और कॉन्फ़िगर करता है
- स्वचालन और स्क्रिप्टिंग के लिए CLI इंटरफ़ेस (JSON आउटपुट के साथ गैर-इंटरैक्टिव मोड)
- क्लाइंट और सर्वर दोनों प्रमाणपत्रों के लिए प्रमाणपत्र नवीनीकरण
- कनेक्टेड क्लाइंट की सूची बनाएं और उनकी निगरानी करें
- प्रमाणपत्र निरस्तीकरण पर क्लाइंट को तुरंत डिस्कनेक्ट करें (प्रबंधन इंटरफ़ेस के माध्यम से)
- जब संभव हो, नवीनतम स्थिर रिलीज़ के लिए [आधिकारिक OpenVPN रिपॉज़िटरी](https://community.openvpn.net/openvpn/wiki/OpenvpnSoftwareRepos) का उपयोग करता है
- फ़ायरवॉल नियम और फ़ॉरवर्डिंग सहजता से प्रबंधित किए जाते हैं (नेटिव firewalld और nftables समर्थन, iptables फ़ॉलबैक)
- कॉन्फ़िगर करने योग्य VPN सबनेट (IPv4: डिफ़ॉल्ट `10.8.0.0/24`, IPv6: डिफ़ॉल्ट `fd42:42:42:42::/112`)
- कॉन्फ़िगर करने योग्य टनल MTU (डिफ़ॉल्ट: `1500`)
- यदि आवश्यक हो, स्क्रिप्ट OpenVPN को कॉन्फ़िगरेशन और फ़ायरवॉल नियमों सहित साफ-सुथरा हटा सकती है
- अनुकूलन योग्य एन्क्रिप्शन सेटिंग्स, बेहतर डिफ़ॉल्ट सेटिंग्स (नीचे [सुरक्षा और एन्क्रिप्शन](#security-and-encryption) देखें)
- उपलब्ध होने पर नवीनतम OpenVPN सुविधाओं का उपयोग करता है (नीचे [सुरक्षा और एन्क्रिप्शन](#security-and-encryption) देखें)
- क्लाइंट्स को पुश करने के लिए विभिन्न DNS रिज़ॉल्वर
- Unbound के साथ सेल्फ-होस्टेड रिज़ॉल्वर उपयोग करने का विकल्प (पहले से मौजूद Unbound इंस्टॉलेशन का समर्थन करता है)
- TCP और UDP के बीच विकल्प
- लचीला IPv4/IPv6 समर्थन:
- IPv4 या IPv6 सर्वर एंडपॉइंट (क्लाइंट कैसे कनेक्ट होते हैं)
- केवल IPv4, केवल IPv6, या डुअल-स्टैक क्लाइंट (VPN एड्रेसिंग और इंटरनेट एक्सेस)
- सभी संयोजन समर्थित: 4→4, 4→4/6, 4→6, 6→4, 6→6, 6→4/6
- स्वचालित लीक रोकथाम: सिंगल-स्टैक मोड में अवांछित प्रोटोकॉल को ब्लॉक करता है
- विशेषाधिकार-रहित मोड: `nobody`/`nogroup` के रूप में चलाएँ
- Windows 10 पर DNS लीक ब्लॉक करें
- यादृच्छिकृत सर्वर प्रमाणपत्र नाम
- क्लाइंट्स को पासवर्ड से सुरक्षित रखने का विकल्प (निजी कुंजी एन्क्रिप्शन)
- कई डिवाइसों को एक ही क्लाइंट प्रोफ़ाइल का एक साथ उपयोग करने की अनुमति देने का विकल्प (स्थायी IP पते अक्षम करता है)
- **पीयर फ़िंगरप्रिंट प्रमाणीकरण** (OpenVPN 2.6+): CA के बिना सरलीकृत WireGuard-जैसा प्रमाणीकरण
- और भी बहुत सी छोटी चीज़ें!
## संगतता
यह स्क्रिप्ट निम्नलिखित Linux डिस्ट्रिब्यूशन का समर्थन करती है:
| | समर्थन |
| ------------------- | ------- |
| AlmaLinux >= 8 | ✅ 🤖 |
| Amazon Linux 2023 | ✅ 🤖 |
| Arch Linux | ✅ 🤖 |
| CentOS Stream >= 8 | ✅ 🤖 |
| Debian >= 11 | ✅ 🤖 |
| Fedora >= 40 | ✅ 🤖 |
| openSUSE Leap >= 16 | ✅ 🤖 |
| openSUSE Tumbleweed | ✅ 🤖 |
| Oracle Linux >= 8 | ✅ 🤖 |
| Rocky Linux >= 8 | ✅ 🤖 |
| Ubuntu >= 18.04 | ✅ 🤖 |
नोट:
- स्क्रिप्ट का नियमित रूप से केवल 🤖 से चिह्नित डिस्ट्रिब्यूशन पर परीक्षण किया जाता है।
- इसका परीक्षण केवल `amd64` आर्किटेक्चर पर किया गया है।
- स्क्रिप्ट को `systemd` की आवश्यकता है।
### अनुशंसित प्रदाता
- [Vultr](https://umami.stanislas.cloud/q/1HH9Thp8i): विश्वव्यापी स्थान, IPv6 समर्थन, \$2.5/माह से शुरू
- [Hetzner](https://umami.stanislas.cloud/q/HdzaOJWq7): विश्वव्यापी स्थान, IPv6, 20 TB ट्रैफ़िक, €3.59/माह से शुरू
- [Digital Ocean](https://umami.stanislas.cloud/q/sEVh1l79B): विश्वव्यापी स्थान, IPv6 समर्थन, \$4/माह से शुरू
## उपयोग
सबसे पहले, अपने सर्वर पर स्क्रिप्ट डाउनलोड करें और उसे निष्पादन योग्य बनाएँ:```bash
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh
आपको स्क्रिप्ट को root के रूप में चलाने की आवश्यकता है और TUN मॉड्यूल सक्षम होना चाहिए।
शुरू करने का सबसे आसान तरीका इंटरैक्टिव मेनू है:```bash ./openvpn-install.sh interactive
This will guide you through installation and client management.
In your home directory, you will have `.ovpn` files. These are the client configuration files. Download them from your server (using `scp` for example) and connect using your favorite OpenVPN client.
If you have any question, head to the [FAQ](#faq) first. And if you need help, you can open a [discussion](https://github.com/angristan/openvpn-install/discussions). Please search existing issues and discussions first.
### CLI मोड
> [!WARNING]
> API संगतता की गारंटी नहीं है। संस्करणों के बीच ब्रेकिंग परिवर्तन हो सकते हैं। यदि आप इस स्क्रिप्ट का प्रोग्रामेटिक रूप से उपयोग करते हैं (जैसे, ऑटोमेशन या CI/CD में), तो master ब्रांच का उपयोग करने के बजाय एक विशिष्ट commit पर पिन करें।
ऑटोमेशन और स्क्रिप्टिंग के लिए, CLI इंटरफ़ेस का उपयोग करें:```bash
# Install with defaults
./openvpn-install.sh install
# Add a client
./openvpn-install.sh client add alice
# List clients
./openvpn-install.sh client list
# Revoke a client (immediately disconnects if connected)
./openvpn-install.sh client revoke alice
openvpn-install [options]
Commands: install Install and configure OpenVPN server uninstall Remove OpenVPN server client Manage client certificates server Server management interactive Launch interactive menu
Global Options: --verbose Show detailed output --log Log file path (default: openvpn-install.log) --no-log Disable file logging --no-color Disable colored output -h, --help Show help
कमांड-विशिष्ट विकल्पों के लिए `./openvpn-install.sh <command> --help` चलाएँ।
#### क्लाइंट प्रबंधन```bash
# Add a new client
./openvpn-install.sh client add alice
# Add a password-protected client
./openvpn-install.sh client add bob --password
# Revoke a client
./openvpn-install.sh client revoke alice
# Renew a client certificate
./openvpn-install.sh client renew bob --cert-days 365
सभी क्लाइंट सूचीबद्ध करें:```text $ ./openvpn-install.sh client list ══ Client Certificates ══ [INFO] Found 3 client certificate(s)
Name Status Expiry Remaining
alice Valid 2035-01-15 3650 days bob Valid 2035-01-15 3650 days charlie Revoked 2035-01-15 unknown
स्क्रिप्टिंग के लिए JSON आउटपुट:```text
$ ./openvpn-install.sh client list --format json | jq
{
"clients": [
{
"name": "alice",
"status": "valid",
"expiry": "2035-01-15",
"days_remaining": 3650
},
{
"name": "bob",
"status": "valid",
"expiry": "2035-01-15",
"days_remaining": 3650
},
{
"name": "charlie",
"status": "revoked",
"expiry": "2035-01-15",
"days_remaining": null
}
]
}
./openvpn-install.sh server renew
./openvpn-install.sh uninstall
कनेक्टेड क्लाइंट दिखाएँ (डेटा हर 60 सेकंड में रीफ़्रेश होता है):```text
$ ./openvpn-install.sh server status
══ Connected Clients ══
[INFO] Found 2 connected client(s)
Name Real Address VPN IP Connected Since Transfer
---- ------------ ------ --------------- --------
alice 203.0.113.45:52341 10.8.0.2 2025-01-15 14:32 ↓1.2M ↑500K
bob 198.51.100.22:41892 10.8.0.3 2025-01-15 09:15 ↓800K ↑200K
[INFO] Note: Data refreshes every 60 seconds.
install कमांड अनुकूलन के लिए कई विकल्पों का समर्थन करता है:```bash
./openvpn-install.sh install --port 443 --protocol tcp
./openvpn-install.sh install --dns quad9
./openvpn-install.sh install --cipher AES-256-GCM --cert-type rsa --rsa-bits 4096
./openvpn-install.sh install --subnet-ipv4 10.9.0.0
./openvpn-install.sh install --client-ipv4 --client-ipv6
./openvpn-install.sh install --no-client-ipv4 --client-ipv6
./openvpn-install.sh install --endpoint-type 6 --endpoint 2001:db8::1
./openvpn-install.sh install --client-ipv6 --subnet-ipv6 fd00🔢5678::
./openvpn-install.sh install --no-client
./openvpn-install.sh install
--port 443
--protocol tcp
--dns cloudflare
--cipher AES-256-GCM
--client mydevice
--client-cert-days 365
**नेटवर्क विकल्प:**
- `--endpoint <host>` - क्लाइंट्स के लिए सार्वजनिक IP या होस्टनाम (डिफ़ॉल्ट: स्वतः पता लगाया गया)
- `--endpoint-type <4|6>` - एंडपॉइंट IP संस्करण (डिफ़ॉल्ट: `4`)
- `--ip <addr>` - सर्वर की लिसनिंग IP (डिफ़ॉल्ट: स्वतः पता लगाया गया)
- `--client-ipv4` - VPN क्लाइंट्स के लिए IPv4 सक्षम करें (डिफ़ॉल्ट: सक्षम)
- `--no-client-ipv4` - VPN क्लाइंट्स के लिए IPv4 अक्षम करें
- `--client-ipv6` - VPN क्लाइंट्स के लिए IPv6 सक्षम करें (डिफ़ॉल्ट: अक्षम)
- `--no-client-ipv6` - VPN क्लाइंट्स के लिए IPv6 अक्षम करें
- `--subnet-ipv4 <x.x.x.0>` - IPv4 VPN सबनेट (डिफ़ॉल्ट: `10.8.0.0`)
- `--subnet-ipv6 <prefix>` - IPv6 VPN सबनेट (डिफ़ॉल्ट: `fd42:42:42:42::`)
- `--port <num>` - OpenVPN पोर्ट (डिफ़ॉल्ट: `1194`)
- `--port-random` - यादृच्छिक पोर्ट उपयोग करें (49152-65535)
- `--protocol <udp|tcp>` - प्रोटोकॉल (डिफ़ॉल्ट: `udp`)
- `--mtu <size>` - टनल MTU (डिफ़ॉल्ट: `1500`)
**DNS विकल्प:**
- `--dns <provider>` - DNS प्रदाता (डिफ़ॉल्ट: `cloudflare`). विकल्प: `system`, `unbound`, `cloudflare`, `quad9`, `quad9-uncensored`, `fdn`, `dnswatch`, `opendns`, `google`, `yandex`, `adguard`, `nextdns`, `custom`
- `--dns-primary <ip>` - कस्टम प्राथमिक DNS (`--dns custom` आवश्यक है)
- `--dns-secondary <ip>` - कस्टम द्वितीयक DNS (`--dns custom` आवश्यक है)
**सुरक्षा विकल्प:**
- `--cipher <cipher>` - डेटा सिफर (डिफ़ॉल्ट: `AES-128-GCM`). विकल्प: `AES-128-GCM`, `AES-192-GCM`, `AES-256-GCM`, `AES-128-CBC`, `AES-192-CBC`, `AES-256-CBC`, `CHACHA20-POLY1305`
- `--cert-type <ecdsa|rsa>` - प्रमाणपत्र प्रकार (डिफ़ॉल्ट: `ecdsa`)
- `--cert-curve <curve>` - ECDSA वक्र (डिफ़ॉल्ट: `prime256v1`). विकल्प: `prime256v1`, `secp384r1`, `secp521r1`
- `--rsa-bits <2048|3072|4096>` - RSA कुंजी आकार (डिफ़ॉल्ट: `2048`)
- `--hmac <alg>` - HMAC एल्गोरिथ्म (डिफ़ॉल्ट: `SHA256`). विकल्प: `SHA256`, `SHA384`, `SHA512`
- `--tls-sig <mode>` - TLS मोड (डिफ़ॉल्ट: `crypt-v2`). विकल्प: `crypt-v2`, `crypt`, `auth`
- `--auth-mode <mode>` - प्रमाणीकरण मोड (डिफ़ॉल्ट: `pki`). विकल्प: `pki` (CA-आधारित), `fingerprint` (पीयर-फिंगरप्रिंट, OpenVPN 2.6+ आवश्यक है)
- `--tls-version-min <1.2|1.3>` - न्यूनतम TLS संस्करण (डिफ़ॉल्ट: `1.2`)
- `--tls-ciphersuites <list>` - TLS 1.3 सिफर सूट, कोलन से अलग किए गए (डिफ़ॉल्ट: `TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256`)
- `--tls-groups <list>` - कुंजी विनिमय समूह, कोलन से अलग किए गए (डिफ़ॉल्ट: `X25519:prime256v1:secp384r1:secp521r1`)
- `--server-cert-days <n>` - सर्वर प्रमाणपत्र की वैधता दिनों में (डिफ़ॉल्ट: `3650`)
**क्लाइंट विकल्प:**
- `--client <name>` - प्रारंभिक क्लाइंट नाम (डिफ़ॉल्ट: `client`)
- `--client-password [pass]` - क्लाइंट कुंजी को पासवर्ड-सुरक्षित करें (डिफ़ॉल्ट: कोई पासवर्ड नहीं)
- `--client-cert-days <n>` - क्लाइंट प्रमाणपत्र की वैधता दिनों में (डिफ़ॉल्ट: `3650`)
- `--no-client` - प्रारंभिक क्लाइंट निर्माण छोड़ें
**अन्य विकल्प:**
- `--multi-client` - एकाधिक डिवाइसों पर समान प्रमाणपत्र की अनुमति दें (डिफ़ॉल्ट: अक्षम)
#### स्वचालन उदाहरण
**बैच क्लाइंट निर्माण:**```bash
#!/bin/bash
for user in alice bob charlie; do
./openvpn-install.sh client add "$user"
done
फ़ाइल से क्लाइंट बनाएँ:```bash #!/bin/bash while read -r user; do ./openvpn-install.sh client add "$user" done < users.txt
**स्क्रिप्टिंग के लिए JSON आउटपुट:**```bash
# Get client list as JSON
./openvpn-install.sh client list --format json | jq '.clients[] | select(.status == "valid")'
# Get connected clients as JSON
./openvpn-install.sh server status --format json
यह स्क्रिप्ट Nyr और इसके योगदानकर्ताओं के शानदार कार्य पर आधारित है।
2016 से, दोनों स्क्रिप्टें अलग-अलग दिशाओं में बढ़ी हैं और अब एक-जैसी नहीं रहीं, खासकर अंदरूनी तौर पर। स्क्रिप्ट का मुख्य उद्देश्य बेहतर सुरक्षा था। लेकिन तब से, स्क्रिप्ट को पूरी तरह से फिर से लिखा गया है और बहुत सारी सुविधाएँ जोड़ी गई हैं। हालाँकि, स्क्रिप्ट केवल हाल के वितरणों (distributions) के साथ संगत है, इसलिए यदि आपको बहुत पुराने सर्वर या क्लाइंट का उपयोग करना है, तो मैं Nyr की स्क्रिप्ट का उपयोग करने की सलाह देता हूँ।
अधिक प्रश्नोत्तर के लिए FAQ.md देखें।
प्रश्न: आप किस प्रदाता की अनुशंसा करते हैं?
उत्तर: मैं इनकी अनुशंसा करता हूँ:
प्रश्न: आप किस OpenVPN क्लाइंट की अनुशंसा करते हैं?
उत्तर: यदि संभव हो, तो एक आधिकारिक OpenVPN 2.4 क्लाइंट।
openvpn पैकेज। Debian/Ubuntu आधारित वितरणों के लिए एक आधिकारिक APT रिपॉजिटरी मौजूद है।प्रश्न: क्या आपकी स्क्रिप्ट का उपयोग करके मैं NSA से सुरक्षित हूँ?
उत्तर: कृपया अपने खतरे के मॉडल (threat models) की समीक्षा करें। भले ही यह स्क्रिप्ट सुरक्षा को ध्यान में रखकर बनाई गई है और अत्याधुनिक एन्क्रिप्शन का उपयोग करती है, अगर आप NSA से छिपना चाहते हैं तो आपको VPN का उपयोग नहीं करना चाहिए।
प्रश्न: क्या OpenVPN के लिए कोई दस्तावेज़ है?
उत्तर: हाँ, कृपया OpenVPN मैनुअल पर जाएँ, जो सभी विकल्पों का संदर्भ देता है।
अधिक प्रश्नोत्तर के लिए FAQ.md देखें।
कृपया PR जमा करने से पहले एक issue खोलें यदि आप किसी बदलाव पर चर्चा करना चाहते हैं, खासकर यदि वह बड़ा बदलाव है।
[!NOTE] यह स्क्रिप्ट 2016 में बनाई गई थी जब OpenVPN के डिफ़ॉल्ट काफी कमज़ोर थे। उस समय, एक सुरक्षित सेटअप के लिए एन्क्रिप्शन सेटिंग्स को अनुकूलित करना आवश्यक था। तब से, OpenVPN ने अपने डिफ़ॉल्ट में काफी सुधार किया है, लेकिन स्क्रिप्ट अब भी अनुकूलन विकल्प प्रदान करती है।
OpenVPN 2.3 और पुराने संस्करण Blowfish (BF-CBC), TLS 1.0, और SHA1 जैसे पुराने डिफ़ॉल्ट के साथ आते थे। तब से हर प्रमुख रिलीज़ में महत्वपूर्ण सुधार हुए हैं:
--peer-fingerprint, और DCO कर्नेल त्वरणयदि आप नीचे उल्लिखित किसी विकल्प के बारे में अधिक जानकारी चाहते हैं, तो OpenVPN मैनुअल पर जाएँ। यह बहुत संपूर्ण है।
प्रमाणपत्र और PKI प्रबंधन Easy-RSA द्वारा किया जाता है। डिफ़ॉल्ट पैरामीटर vars.example फ़ाइल में हैं।
यह स्क्रिप्ट पहले LZ4 और LZO कम्प्रेशन एल्गोरिदम का समर्थन करती थी, लेकिन VORACLE attack भेद्यता के कारण उनके उपयोग को हतोत्साहित करती थी।
OpenVPN 2.6+ में --allow-compression का डिफ़ॉल्ट मान no है, जो सर्वर-पुश कम्प्रेशन को भी अवरुद्ध करता है। अब जब OpenVPN कम्प्रेशन समर्थन को पूरी तरह से हटा रहा है, यह स्क्रिप्ट अब इसका समर्थन नहीं करती।
[!NOTE] OpenVPN 2.6+ में डिफ़ॉल्ट रूप से न्यूनतम TLS 1.2 है। पिछले संस्करण डिफ़ॉल्ट रूप से TLS 1.0 स्वीकार करते थे।
OpenVPN 2.5 और पुराने संस्करण डिफ़ॉल्ट रूप से TLS 1.0 स्वीकार करते थे, जो लगभग 20 साल पुराना है।
यह स्क्रिप्ट सभी OpenVPN 2.4+ क्लाइंट के साथ संगतता के लिए डिफ़ॉल्ट रूप से tls-version-min 1.2 का उपयोग करती है। आप उन वातावरणों के लिए वैकल्पिक रूप से tls-version-min 1.3 सेट कर सकते हैं जहाँ सभी क्लाइंट TLS 1.3 का समर्थन करते हैं।
TLS 1.3 समर्थन OpenVPN 2.5 में जोड़ा गया था और इसके लिए OpenSSL 1.1.1+ की आवश्यकता होती है। TLS 1.3 सरलीकृत हैंडशेक के साथ बेहतर सुरक्षा और प्रदर्शन प्रदान करता है।
स्क्रिप्ट --tls-ciphersuites के माध्यम से TLS 1.3 सिफर सूट कॉन्फ़िगर करती है (यह TLS 1.2 के --tls-cipher विकल्प से अलग है)। डिफ़ॉल्ट TLS 1.3 सिफर सूट हैं:
TLS_AES_256_GCM_SHA384TLS_AES_128_GCM_SHA256TLS_CHACHA20_POLY1305_SHA256TLS 1.2 OpenVPN 2.3.3 से समर्थित है। TLS 1.3 OpenVPN 2.5 से समर्थित है।
OpenVPN डिफ़ॉल्ट रूप से 2048 बिट कुंजी के साथ RSA प्रमाणपत्र का उपयोग करता है।
OpenVPN 2.4 में ECDSA के लिए समर्थन जोड़ा गया। एलिप्टिक कर्व क्रिप्टोग्राफी तेज़, हल्की और अधिक सुरक्षित है।
यह स्क्रिप्ट प्रदान करती है:
prime256v1/secp384r1/secp521r1 वक्र (curves)2048/3072/4096 बिट कुंजियाँयह डिफ़ॉल्ट रूप से prime256v1 के साथ ECDSA का उपयोग करता है।
OpenVPN डिफ़ॉल्ट रूप से हस्ताक्षर हैश के रूप में SHA-256 का उपयोग करता है, और स्क्रिप्ट भी ऐसा ही करती है। फिलहाल यह कोई अन्य विकल्प प्रदान नहीं करती।
स्क्रिप्ट दो प्रमाणीकरण मोड का समर्थन करती है:
पारंपरिक प्रमाणपत्र प्राधिकरण (CA) आधारित प्रमाणीकरण। सर्वर और सभी क्लाइंट के पास एक ही CA द्वारा हस्ताक्षरित प्रमाणपत्र होते हैं। क्लाइंट रद्दीकरण प्रमाणपत्र रद्दीकरण सूची (CRL) के माध्यम से किया जाता है।
यह बड़े डिप्लॉयमेंट के लिए अनुशंसित मोड है जहाँ आपको आवश्यकता हो:
एक सरलीकृत WireGuard-जैसा प्रमाणीकरण मॉडल जो CA श्रृंखला के बजाय SHA256 प्रमाणपत्र फ़िंगरप्रिंट का उपयोग करता है। प्रत्येक पीयर (सर्वर और क्लाइंट) के पास एक स्व-हस्ताक्षरित प्रमाणपत्र होता है, और पीयर फ़िंगरप्रिंट सत्यापित करके एक-दूसरे को प्रमाणित करते हैं।```bash
./openvpn-install.sh install --auth-mode fingerprint
लाभ:
- सरल सेटअप: CA इंफ्रास्ट्रक्चर की आवश्यकता नहीं
- समझने में आसान: SSH के `known_hosts` मॉडल के समान
- छोटे सेटअप के लिए आदर्श: होम नेटवर्क, लैब, छोटी टीमें
यह कैसे काम करता है:
1. सर्वर एक स्व-हस्ताक्षरित प्रमाणपत्र उत्पन्न करता है और उसका फिंगरप्रिंट संग्रहीत करता है
2. प्रत्येक क्लाइंट एक स्व-हस्ताक्षरित प्रमाणपत्र उत्पन्न करता है
3. क्लाइंट फिंगरप्रिंट सर्वर के `<peer-fingerprint>` ब्लॉक में जोड़े जाते हैं
4. क्लाइंट सर्वर के फिंगरप्रिंट का उपयोग करके सर्वर को सत्यापित करते हैं
5. निरस्तीकरण सर्वर कॉन्फ़िग से फिंगरप्रिंट हटा देता है (किसी CRL की आवश्यकता नहीं)
ट्रेड-ऑफ़: किसी क्लाइंट को निरस्त करने के लिए OpenVPN को पुनः लोड करना आवश्यक है (फिंगरप्रिंट server.conf में होते हैं)। PKI मोड में, CRL फ़ाइल नए कनेक्शनों पर स्वचालित रूप से पुनः पढ़ी जाती है।
### डेटा चैनल
> [!NOTE]
> डिफ़ॉल्ट डेटा चैनल साइफर OpenVPN 2.5 में बदल गया। पुराने संस्करण `BF-CBC` डिफ़ॉल्ट रखते थे, जबकि OpenVPN 2.5+ `AES-256-GCM:AES-128-GCM` डिफ़ॉल्ट रखता है। OpenVPN 2.6+ उपलब्ध होने पर डिफ़ॉल्ट साइफर सूची में `CHACHA20-POLY1305` भी शामिल करता है।
डिफ़ॉल्ट रूप से, OpenVPN 2.4 और पुराने संस्करण डेटा चैनल साइफर के रूप में `BF-CBC` का उपयोग करते थे। ब्लोफिश एक पुराना (1993) और कमज़ोर एल्गोरिदम है। यहाँ तक कि आधिकारिक OpenVPN दस्तावेज़ भी इसे स्वीकार करता है।
> डिफ़ॉल्ट BF-CBC है, जो Cipher Block Chaining मोड में ब्लोफिश का संक्षिप्त रूप है।
>
> BF-CBC का उपयोग अब अनुशंसित नहीं है, क्योंकि इसका ब्लॉक आकार 64-bit है। यह छोटा ब्लॉक आकार कोलिजन-आधारित हमलों की अनुमति देता है, जैसा कि SWEET32 द्वारा प्रदर्शित किया गया है। विवरण के लिए <https://community.openvpn.net/openvpn/wiki/SWEET32> देखें।
> INRIA के सुरक्षा शोधकर्ताओं ने 64-bit ब्लॉक साइफर, जैसे 3DES और ब्लोफिश, पर एक हमला प्रकाशित किया। वे दिखाते हैं कि जब समान डेटा पर्याप्त बार भेजा जाता है तो वे प्लेनटेक्स्ट पुनर्प्राप्त कर सकते हैं, और दिखाते हैं कि वे रुचि के डेटा को पर्याप्त बार भेजने के लिए क्रॉस-साइट स्क्रिप्टिंग कमजोरियों का उपयोग कैसे कर सकते हैं। यह HTTPS पर काम करता है, लेकिन HTTP-over-OpenVPN पर भी काम करता है। अधिक बेहतर और विस्तृत व्याख्या के लिए <https://sweet32.info/> देखें।
>
> OpenVPN का डिफ़ॉल्ट साइफर, BF-CBC, इस हमले से प्रभावित है।
वास्तव में, AES आज का मानक है। यह आज उपलब्ध सबसे तेज़ और अधिक सुरक्षित साइफर है। [SEED](https://en.wikipedia.org/wiki/SEED) और [Camellia](https://github.com/angristan/openvpn-install/blob/master/%3Chttps%3A/en.wikipedia.org/wiki/Camellia_%28cipher)>) आज तक भेद्य नहीं हैं, लेकिन AES की तुलना में धीमे हैं और अपेक्षाकृत कम विश्वसनीय हैं।
> वर्तमान में समर्थित साइफरों में से, OpenVPN वर्तमान में AES-256-CBC या AES-128-CBC उपयोग करने की अनुशंसा करता है। OpenVPN 2.4 और नए संस्करण GCM का भी समर्थन करेंगे। 2.4+ के लिए, हम AES-256-GCM या AES-128-GCM उपयोग करने की अनुशंसा करते हैं।
AES-256, AES-128 की तुलना में 40% धीमा है, और AES के साथ 128-bit कुंजी की जगह 256-bit कुंजी उपयोग करने का कोई वास्तविक कारण नहीं है। (स्रोत: [1](http://security.stackexchange.com/questions/14068/why-most-people-use-256-bit-encryption-instead-of-128-bit),[2](http://security.stackexchange.com/questions/6141/amount-of-simple-operations-that-is-safely-out-of-reach-for-all-humanity/6149#6149))। इसके अलावा, AES-256 [Timing attacks](https://en.wikipedia.org/wiki/Timing_attack) के प्रति अधिक संवेदनशील है।
AES-GCM एक [AEAD साइफर](https://en.wikipedia.org/wiki/Authenticated_encryption) है, जिसका अर्थ है कि यह डेटा पर एक साथ गोपनीयता, अखंडता और प्रामाणिकता की आश्वासन प्रदान करता है।
ChaCha20-Poly1305 एक और AEAD साइफर है जो AES-GCM के समान सुरक्षा प्रदान करता है। यह विशेष रूप से उन डिवाइसों पर उपयोगी है जिनमें हार्डवेयर AES त्वरण (AES-NI) नहीं है, जैसे पुराने CPU और कई ARM-आधारित डिवाइस, जहाँ यह AES की तुलना में काफी तेज़ हो सकता है।
स्क्रिप्ट निम्नलिखित साइफरों का समर्थन करती है:
- `AES-128-GCM`
- `AES-192-GCM`
- `AES-256-GCM`
- `AES-128-CBC`
- `AES-192-CBC`
- `AES-256-CBC`
- `CHACHA20-POLY1305` (OpenVPN 2.5+ की आवश्यकता है)
और डिफ़ॉल्ट रूप से `AES-128-GCM` का उपयोग करती है।
OpenVPN 2.4 ने "NCP" नामक एक सुविधा जोड़ी: _Negotiable Crypto Parameters_. इसका मतलब है कि आप HTTPS की तरह एक साइफर सूट प्रदान कर सकते हैं। यह डिफ़ॉल्ट रूप से `AES-256-GCM:AES-128-GCM` पर सेट है और OpenVPN 2.4 क्लाइंट के साथ उपयोग किए जाने पर `--cipher` पैरामीटर को ओवरराइड करता है। सरलता के लिए, स्क्रिप्ट `--cipher` (गैर-NCP क्लाइंटों के लिए फ़ॉलबैक), `--data-ciphers` (आधुनिक OpenVPN 2.5+ नामकरण), और `--ncp-ciphers` (OpenVPN 2.4 संगतता के लिए लीगेसी उपनाम) को ऊपर चुने गए साइफर पर सेट करती है।
### कंट्रोल चैनल
OpenVPN 2.4 डिफ़ॉल्ट रूप से उपलब्ध सर्वोत्तम साइफर पर बातचीत करेगा (जैसे ECDHE+AES-256-GCM)
#### TLS 1.2 साइफर (`--tls-cipher`)
स्क्रिप्ट प्रमाणपत्र के आधार पर निम्नलिखित विकल्प प्रस्तावित करती है:
- ECDSA:
- `TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256`
- `TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384`
- `TLS-ECDHE-ECDSA-WITH-CHACHA20-POLY1305-SHA256` (OpenVPN 2.5+ की आवश्यकता है)
- RSA:
- `TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256`
- `TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384`
- `TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256` (OpenVPN 2.5+ की आवश्यकता है)
यह डिफ़ॉल्ट रूप से `TLS-ECDHE-*-WITH-AES-128-GCM-SHA256` का उपयोग करता है।
#### TLS 1.3 साइफर (`--tls-ciphersuites`)
जब TLS 1.3 पर बातचीत होती है, तो साइफर सूटों का एक अलग सेट उपयोग किया जाता है। इन्हें `--tls-ciphersuites` के माध्यम से कॉन्फ़िगर किया जाता है और ये OpenSSL नामकरण परंपराओं का उपयोग करते हैं:
- `TLS_AES_256_GCM_SHA384`
- `TLS_AES_128_GCM_SHA256`
- `TLS_CHACHA20_POLY1305_SHA256`
डिफ़ॉल्ट रूप से, तीनों साइफर सूट सक्षम हैं। TLS 1.3 साइफर सूट सरल हैं क्योंकि उनमें कुंजी विनिमय एल्गोरिदम शामिल नहीं होता (जिस पर की शेयरों के माध्यम से अलग से बातचीत होती है)।
### कुंजी विनिमय
OpenVPN ऐतिहासिक रूप से कुंजी विनिमय के लिए 2048-bit DH पैरामीटर डिफ़ॉल्ट रखता था। यह स्क्रिप्ट पहले विकल्प के रूप में DH (कॉन्फ़िगर करने योग्य कुंजी आकारों के साथ) और ECDH दोनों प्रदान करती थी।
OpenVPN 2.4 ने ECDH समर्थन जोड़ा, और OpenVPN 2.7 ने `dh none` (ECDH) को डिफ़ॉल्ट बना दिया, क्योंकि finite-field DH को पदावनत (deprecated) किया जा रहा है। चूँकि ECDH अब सार्वभौमिक रूप से समर्थित और पसंदीदा है, यह स्क्रिप्ट अब पारंपरिक DH की पेशकश नहीं करती।
स्क्रिप्ट `tls-groups` को निम्नलिखित प्राथमिकता सूची के साथ कॉन्फ़िगर करती है:```
X25519:prime256v1:secp384r1:secp521r1
आप इसे --tls-groups के साथ अनुकूलित कर सकते हैं।
OpenVPN विकि से, --auth के बारे में:
डेटा चैनल पैकेटों और (यदि सक्षम हो) tls-auth नियंत्रण चैनल पैकेटों को HMAC के साथ प्रमाणित करें, जिसमें मैसेज डाइजेस्ट एल्गोरिथम alg का उपयोग किया जाता है। (डिफ़ॉल्ट SHA1 है)। HMAC एक सामान्य रूप से उपयोग किया जाने वाला मैसेज प्रमाणीकरण एल्गोरिथम (MAC) है जो डिजिटल हस्ताक्षर उत्पन्न करने के लिए एक डेटा स्ट्रिंग, एक सुरक्षित हैश एल्गोरिथम और एक कुंजी का उपयोग करता है।
यदि कोई AEAD सिफर मोड (जैसे GCM) चुना जाता है, तो डेटा चैनल के लिए निर्दिष्ट --auth एल्गोरिथम को अनदेखा कर दिया जाता है, और इसके बजाय AEAD सिफर की प्रमाणीकरण विधि का उपयोग किया जाता है। ध्यान दें कि alg अभी भी tls-auth के लिए उपयोग किए जाने वाले डाइजेस्ट को निर्दिष्ट करता है।
स्क्रिप्ट निम्नलिखित विकल्प प्रदान करती है:
SHA256SHA384SHA512इसका डिफ़ॉल्ट मान SHA256 है।
tls-auth, tls-crypt, और tls-crypt-v2OpenVPN विकि से, tls-auth के बारे में:
TLS नियंत्रण चैनल के ऊपर HMAC प्रमाणीकरण की एक अतिरिक्त परत जोड़ता है ताकि DoS हमलों और TLS स्टैक पर हमलों को कम किया जा सके।
संक्षेप में, --tls-auth OpenVPN के TCP/UDP पोर्ट पर एक प्रकार का "HMAC फ़ायरवॉल" सक्षम करता है, जहाँ गलत HMAC हस्ताक्षर वाले TLS नियंत्रण चैनल पैकेटों को बिना किसी प्रतिक्रिया के तुरंत गिराया जा सकता है।
tls-crypt के बारे में:
keyfile से कुंजी के साथ सभी नियंत्रण चैनल पैकेटों को एन्क्रिप्ट और प्रमाणित करें। (अधिक पृष्ठभूमि के लिए --tls-auth देखें।)
नियंत्रण चैनल पैकेटों को एन्क्रिप्ट करना (और प्रमाणित करना):
- TLS कनेक्शन के लिए उपयोग किए जाने वाले प्रमाणपत्र को छिपाकर अधिक गोपनीयता प्रदान करता है,
- OpenVPN ट्रैफ़िक को इस रूप में पहचानना कठिन बनाता है,
- उन हमलावरों के विरुद्ध "गरीब-आदमी" पोस्ट-क्वांटम सुरक्षा प्रदान करता है, जो पूर्व-साझा कुंजी को कभी नहीं जान पाएंगे (अर्थात कोई फॉरवर्ड सीक्रेसी नहीं)।
इसलिए दोनों सुरक्षा की एक अतिरिक्त परत प्रदान करते हैं और DoS हमलों को कम करते हैं। OpenVPN द्वारा डिफ़ॉल्ट रूप से इनका उपयोग नहीं किया जाता है।
tls-crypt OpenVPN 2.4 की एक विशेषता है जो प्रमाणीकरण के अतिरिक्त एन्क्रिप्शन भी प्रदान करती है (tls-auth के विपरीत)। यह अधिक गोपनीयता-अनुकूल है।
tls-crypt-v2 OpenVPN 2.5 की एक विशेषता है जो साझा कुंजी के बजाय प्रति-क्लाइंट कुंजियों का उपयोग करके tls-crypt पर आधारित है। प्रत्येक क्लाइंट को सर्वर कुंजी से व्युत्पन्न एक अद्वितीय कुंजी प्राप्त होती है। यह प्रदान करता है:
स्क्रिप्ट तीनों विकल्पों का समर्थन करती है:
tls-crypt-v2 (डिफ़ॉल्ट): बेहतर सुरक्षा के लिए प्रति-क्लाइंट कुंजियाँtls-crypt: सभी क्लाइंटों के लिए साझा कुंजी, OpenVPN 2.4+ के साथ संगतtls-auth: केवल HMAC प्रमाणीकरण (कोई एन्क्रिप्शन नहीं), पुराने क्लाइंटों के साथ संगतremote-cert-tls)सर्वर को remote-cert-tls client के साथ कॉन्फ़िगर किया गया है, जिसके लिए कनेक्ट होने वाले पीयर के पास "TLS Web Client Authentication" एक्सटेंडेड कुंजी उपयोग वाला प्रमाणपत्र होना आवश्यक है। यह सर्वर प्रमाणपत्र को क्लाइंट के रूप में प्रस्तुत करने से रोकता है।
इसी तरह, क्लाइंटों को remote-cert-tls server के साथ कॉन्फ़िगर किया जाता है ताकि यह सुनिश्चित हो सके कि वे केवल वैध सर्वर प्रमाणपत्र प्रस्तुत करने वाले सर्वरों से कनेक्ट होते हैं। यह एक वैध क्लाइंट प्रमाणपत्र रखने वाले हमलावर को नकली सर्वर स्थापित करने से बचाता है।
डेटा चैनल ऑफलोड (DCO) एक कर्नेल त्वरण सुविधा है जो डेटा चैनल एन्क्रिप्शन/डिक्रिप्शन को कर्नेल स्पेस में रखकर OpenVPN प्रदर्शन में उल्लेखनीय सुधार करती है, जिससे प्रत्येक पैकेट के लिए यूज़र और कर्नेल स्पेस के बीच महंगे कॉन्टेक्स्ट स्विच समाप्त हो जाते हैं।
DCO को लिनक्स कर्नेल 6.16 (अप्रैल 2025) में विलय कर दिया गया।
आवश्यकताएँ:
ovpn-dco कर्नेल मॉड्यूलAES-128-GCM, AES-256-GCM, या CHACHA20-POLY1305)स्क्रिप्ट की डिफ़ॉल्ट सेटिंग्स (AES-128-GCM, UDP) DCO-संगत हैं। जब DCO उपलब्ध हो और कॉन्फ़िगरेशन संगत हो, तो OpenVPN बेहतर प्रदर्शन के लिए स्वचालित रूप से इसका उपयोग करेगा।
नोट: पूर्ण त्वरण के लिए DCO को सर्वर और क्लाइंट दोनों पर समर्थित होना चाहिए। क्लाइंट समर्थन OpenVPN 2.6+ (लिनक्स, विंडोज़, फ्रीबीएसडी) और OpenVPN Connect 3.4+ (विंडोज़) में उपलब्ध है। macOS वर्तमान में DCO का समर्थन नहीं करता है, लेकिन क्लाइंट अभी भी DCO-सक्षम सर्वरों से कनेक्ट हो सकते हैं, जिसमें सर्वर-साइड पर आंशिक प्रदर्शन लाभ होता है।
स्क्रिप्ट इंस्टॉलेशन के दौरान DCO उपलब्धता स्थिति प्रदर्शित करेगी।
यदि आप चाहें तो धन्यवाद कह सकते हैं!
योगदानकर्ताओं और Nyr के मूल कार्य के लिए बहुत धन्यवाद।
यह प्रोजेक्ट MIT लाइसेंस के अंतर्गत है।