OpenVPN — sing-box
sing-box بهطور بومی OpenVPN را از راه دو نقطهانتهایی پشتیبانی میکند — openvpn-client و openvpn-server زیر endpoints[] — بهعلاوهٔ یک سرور DNS از نوع openvpn که از طریق حلکنندههایی که سرور به کلاینت ارسال میکند، نامها را حل میکند. هر دو نقطهانتهایی با همتایان استاندارد OpenVPN سازگارند، از جمله حالت کلید ایستا، رمزها و چکیدههای قدیمی و بررسیهای گواهی به سبک OpenVPN.
برچسبهای ساخت
OpenVPN فقط با برچسب ساخت with_openvpn کامپایل میشود؛ پشتهٔ شبکهٔ داخلی پیشفرض (system: false) به with_gvisor هم نیاز دارد. بدون آنها نقطهانتهاییها و سرور DNS هنگام راهاندازی با پیشنهاد ساخت دوباره خطا میدهند.
فیلدهای مشترک رابط
هر دو نقطهانتهایی این فیلدها را در خود دارند:
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
system | bool | false | true | false | استفاده از رابط سیستمی (به امتیاز نیاز دارد و نباید با رابط موجود تداخل کند). آدرسها و MTU روی آن پیکربندی میشوند، اما هیچ مسیر یا DNS سیستمعامل نصب نمیشود. false از پشتهٔ شبکهٔ داخلی استفاده میکند. |
name | string | (auto, ovpn…) | <interface name> | نام رابط وقتی system برابر true است. |
mtu | uint32 | 1500 | <bytes> | MTU رابط تونل. در کلاینت تا وقتی سرور مقداری ارسال نکرده، 1500 به کار میرود. |
udp_mapping | UDPNATBehavior | endpoint_independent | endpoint_independent | address_dependent | address_and_port_dependent | رفتار نگاشت UDP NAT: برای هر آدرس و پورت مبدأ یک نگاشت برای همهٔ مقصدها (پیشفرض)، یا نگاشت جداگانه برای هر آدرس مقصد / هر آدرس و پورت مقصد. |
udp_filtering | UDPNATBehavior | endpoint_independent | endpoint_independent | address_dependent | address_and_port_dependent | رفتار فیلتر UDP NAT: پذیرفتن بسته از هر نقطهٔ دور (پیشفرض)، یا فقط از آدرسها / جفتهای آدرس و پورتی که پیشتر به آنها بسته فرستاده شده است. |
udp_nat_max | uint32 | 0 (auto) | <uint32> | بیشینهٔ نشستهای UDP NAT؛ با رسیدن به حد، نشستی که مدت بیشتری استفاده نشده بسته میشود. مقدار 0: در iOS برابر 4096 و در دیگر پلتفرمها بر اساس کل حافظه بین 4096 تا 16384. |
منبع: option/openvpn.go:10-17 · ثابتشده در v1.14.2 (af6e64c)
نقطهانتهایی کلاینت (openvpn-client)
type: "openvpn-client" زیر endpoints[]. علاوه بر فیلدهای زیر، server / server_port (در تعارض با servers) و فیلدهای شمارهگیری را میپذیرد که بر اتصال به سرور OpenVPN اعمال میشوند.
اتصال و آدرسدهی
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
mode | string | tls | tls | static_key | حالت نشست. static_key یک حالت سازگاری منسوخ است، بدون کانال کنترل TLS و بدون محرمانگی پیشرو؛ tls، نام کاربری/گذرواژه، گزینههای دریافتی و مذاکرهٔ دوباره را نادیده میگیرد. |
network | string | udp | udp | tcp | udp4 | udp6 | tcp4 | tcp6 | ترابرد پیشفرض به سرور. برای server و برای مدخلهای servers که network خودشان را ندارند اعمال میشود. |
servers | []OpenVPNRemoteOptions | [] | [{server, server_port, network}] | سرورهایی که به ترتیب امتحان میشوند و با شکست اتصال به بعدی میروند. هر مدخل به server و server_port نیاز دارد و میتواند network را بازنویسی کند. با server سطح بالا تعارض دارد؛ یکی از این دو لازم است. |
remote_random | bool | false | true | false | ترتیب servers را پیش از اتصال بر هم میزند. |
address | badoption.Listable[netip.Prefix] | [] | [<CIDR>] | پیشوندهای محلی IPv4 / IPv6 تونل. در حالت static_key لازم است؛ در حالت TLS اختیاری است و سرور میتواند آن را ارسال کند. |
peer_address | *badoption.Addr | (unset) | <IPv4> | همتای IPv4 تونل و دروازهٔ VPN. در حالت static_key با یک address از نوع IPv4 لازم است. |
peer_address_ipv6 | *badoption.Addr | (unset) | <IPv6> | همتای IPv6 تونل و دروازهٔ VPN. در حالت static_key با یک address از نوع IPv6 لازم است. |
topology | string | (pushed) | net30 | p2p | subnet | توپولوژی تونل. اگر خالی باشد در حالت TLS توپولوژی ارسالی سرور به کار میرود. |
udp_timeout | UDPTimeoutCompat | 5m | <duration> | مهلت نشست UDP NAT برای ترافیک درون تونل. |
explicit_exit_notify | uint32 | 0 | <count> | تعداد اعلانهای خروج که هنگام بستن اتصال UDP با فاصلهٔ یک ثانیه فرستاده میشوند. 0 آنها را غیرفعال میکند. |
منبع: option/openvpn.go:19-73 · ثابتشده در v1.14.2 (af6e64c)
احراز هویت و کلیدها
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
username | string | (unset) | <string> | نام کاربری برای احراز هویت نام کاربری/گذرواژهٔ OpenVPN. فقط در حالت TLS. |
password | string | (unset) | <string> | گذرواژه برای احراز هویت نام کاربری/گذرواژه. |
auth_retry | string | none | none | nointeract | interact | رفتار پس از شکست احراز هویت: none آن را نهایی میداند؛ nointeract و interact اجازهٔ تلاش دوباره میدهند. |
static_challenge | string | (unset) | <text> | متن چالش ایستا که هنگام درخواست پاسخ احراز هویت (مثلاً رمز یکبارمصرف) نمایش داده میشود. |
static_challenge_echo | bool | false | true | false | پاسخ چالش ایستا هنگام وارد کردن بهصورت متن ساده نمایش داده شود. |
static_key | badoption.Listable[string] | (unset) | <key content> | محتوای کلید ایستای OpenVPN. در حالت static_key لازم است مگر اینکه static_key_path تنظیم شده باشد؛ با آن تعارض دارد. |
static_key_path | string | (unset) | <path> | مسیر فایل کلید ایستای OpenVPN. با static_key تعارض دارد. |
key_direction | string | (bidirectional) | server | client | جهت کلید ایستا، فقط در حالت static_key. اگر خالی باشد کلید در هر دو جهت به کار میرود. |
tls | *OpenVPNOutboundTLSOptions | (required in tls mode) | OpenVPNOutboundTLSOptions | پیکربندی TLS کانال کنترل؛ جدول tls در پایین را ببینید. |
منبع: option/openvpn.go:19-73 · ثابتشده در v1.14.2 (af6e64c)
کانال داده
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
cipher | string | BF-CBC | <cipher name> | مجموعهرمز کانال داده فقط برای حالت static_key. پیشفرض بالادست یعنی BF-CBC یک رمز قدیمی با بلوک 64 بیتی است — رمز سرور را صریحاً تنظیم کنید. NONE هیچ محرمانگیای ندارد. |
data_ciphers | badoption.Listable[string] | AES-256-GCM, AES-128-GCM, CHACHA20-POLY1305 | [<cipher name>] | مجموعهرمزهای مجاز کانال داده در مذاکره. فقط در حالت TLS. رمزهای قدیمی CBC / CFB / OFB و NONE وجود دارند اما بهطور پیشفرض فعال نیستند. |
data_ciphers_fallback | string | (disabled) | <cipher name> | رمزی که با سرورهای ناتوان از مذاکره به کار میرود. فقط در حالت TLS. |
auth | string | SHA1 | <digest name> | چکیدهٔ HMAC کانال داده. فقط بر رمزهای غیر AEAD و tls_auth اثر دارد؛ چکیدههای قدیمی مانند MD5 و RIPEMD160 در صورت تنظیم صریح پذیرفته میشوند. |
mss_fix | uint32 | (OpenVPN default) | <bytes> | بیشینهٔ اندازهٔ بستهٔ OpenVPN برای محدود کردن MSS اتصالهای TCP درون تونل. اگر خالی باشد پیشفرض بالادست به کار میرود: fragment در صورت تنظیم، وگرنه 1492 یا MTU پیکربندیشدهٔ تونل. |
mss_fix_disabled | bool | false | true | false | محدودسازی MSS را کاملاً غیرفعال میکند، از جمله پیشفرض. با mss_fix و mss_fix_mode تعارض دارد. |
mss_fix_mode | string | (encapsulation-aware) | mtu | fixed | نحوهٔ تفسیر mss_fix صریح: mtu سرآیندهای IP بیرونی و UDP/TCP را هم حساب میکند؛ fixed آن را اندازهٔ بستهٔ IPv4 درونی میداند. به mss_fix نیاز دارد. |
fragment | uint32 | 0 | 0 | >= 68 | بیشینهٔ اندازهٔ بستهٔ UDP برای قطعهبندی کانال دادهٔ خود OpenVPN. 0 آن را غیرفعال میکند؛ با ترابرد TCP مجاز نیست. |
replay_window | uint32 | 64 | <= 65536 | اندازهٔ پنجرهٔ بازپخش کانال دادهٔ UDP. TCP همیشه شناسههای بستهٔ پیاپی میخواهد. |
replay_window_time | badoption.Duration | 15s | <= 10m, whole seconds | مدت پنجرهٔ بازپخش کانال دادهٔ UDP. |
compression | string | (disabled) | none | no | lz4 | lz4-v2 | stub | stub-v2 | disabled | off | قاببندی compress در OpenVPN. فشردهسازی میتواند محرمانگی را تضعیف کند؛ وقتی فقط سازگاری قاببندی لازم است stub / stub-v2 را ترجیح دهید. |
compression_lzo | string | (disabled) | none | no | yes | adaptive | asym | disabled | off | حالت comp-lzo در OpenVPN. فقط وقتی سرور لازم دارد فعال کنید. |
allow_compression | string | no | no | asym | yes | سیاست در برابر فشردهسازی ارسالی سرور: no فقط قاببندی stub را مجاز میکند؛ asym بستههای فشرده را میپذیرد ولی بستههای خروجی را هرگز فشرده نمیکند؛ yes نام مستعار قدیمی asym است. |
منبع: option/openvpn.go:19-73 · ثابتشده در v1.14.2 (af6e64c)
گزینههای ارسالی و مسیریابی
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
route_no_pull | bool | false | true | false | مسیرها، گزینههای DNS / DHCP، معیارهای مسیر، redirect-gateway، redirect-private، block-ipv6 و block-outside-dns ارسالی سرور را نادیده میگیرد. آدرسدهی، توپولوژی و MTU همچنان اعمال میشوند. |
pull_filters | []OpenVPNPullFilterOptions | [] | [{action, text}] | فیلترهای ترتیبی برای گزینههای ارسالی؛ جدول pull_filters[] در پایین را ببینید. |
routes | badoption.Listable[netip.Prefix] | [] | [<CIDR>] | پیشوندهای اضافهای که علاوه بر مسیرهای پذیرفتهشده از سرور، در مسیریابی sing-box برای این نقطهانتهایی ترجیح داده میشوند. هیچ مسیر سیستمعاملی نصب نمیشود. |
route_gateway | *badoption.Addr | (pushed gateway) | <IPv4> | دروازهٔ IPv4 برای مسیرهای گذرنده از نقطهانتهایی. برای سازگاری با OpenVPN حفظ شده است؛ ترجیح مسیر بر پایهٔ پیشوند است. |
route_metric | int | 0 | <int> | معیار پیشفرض مسیر. برای سازگاری با OpenVPN حفظ شده است؛ هیچ مسیر سیستمی نصب نمیشود. |
redirect_gateway | bool | false | true | false | در مسیریابی sing-box این نقطهانتهایی را برای همهٔ مقصدهای IPv4 ترجیح میدهد. هیچ مسیر پیشفرض سیستمعامل نصب نمیشود. |
redirect_gateway_flags | badoption.Listable[string] | [] | !ipv4 | def1 | ipv6 | local | autolocal | پرچمهای redirect-gateway در OpenVPN: !ipv4 ترجیح IPv4 را حذف میکند، def1 آن را با دو پیشوند /1 بیان میکند، ipv6 IPv6 را هم ترجیح میدهد. block-local پشتیبانی نمیشود؛ bypass-dhcp / bypass-dns کاربردی ندارند. |
redirect_private | bool | false | true | false | redirect_gateway_flags را بدون افزودن ترجیح مسیر پیشفرض میپذیرد. |
block_ipv6 | bool | false | true | false | ترافیک IPv6 را بهجای ارسال از VPN بهصورت محلی رد میکند. |
منبع: option/openvpn.go:19-73 · ثابتشده در v1.14.2 (af6e64c)
زمانسنجها و مذاکرهٔ دوباره
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
ping_interval | badoption.Duration | (disabled) | <duration> | پس از این مدت بدون ارسال به سرور، یک ping کانال داده میفرستد. ping ارسالی سرور آن را بازنویسی میکند. باید ثانیهٔ کامل باشد. |
ping_restart | badoption.Duration | 120s (UDP, pull) | <duration> | پس از این مدت بدون دریافت بسته دوباره وصل میشود. ping-restart ارسالی سرور آن را بازنویسی میکند؛ TCP پیشفرضی ندارد. باید ثانیهٔ کامل باشد. |
ping_restart_disabled | bool | false | true | false | مهلت اولیهٔ 120 ثانیهای دریافت UDP و هر ping_restart محلی را غیرفعال میکند. با ping_restart تعارض دارد. |
renegotiate_interval | badoption.Duration | 1h | <duration> | فاصلهٔ مذاکرهٔ دوبارهٔ TLS. |
renegotiate_disabled | bool | false | true | false | مذاکرهٔ دوبارهٔ زمانی TLS را، از جمله فاصلهٔ پیشفرض، غیرفعال میکند. با renegotiate_interval تعارض دارد. |
renegotiate_bytes | uint64 | 0 | <bytes> | پس از این تعداد بایت، کلیدهای کانال داده دوباره مذاکره میشوند. 0 از پیشفرض OpenVPN وابسته به رمز استفاده میکند. |
renegotiate_packets | uint64 | 0 | <packets> | پس از این تعداد بسته، کلیدهای کانال داده دوباره مذاکره میشوند. 0 از پیشفرض OpenVPN وابسته به رمز استفاده میکند. |
tls_timeout | badoption.Duration | 2s | <duration> | مهلت اولیهٔ ارسال دوبارهٔ بستههای کنترلی TLS. |
handshake_window | badoption.Duration | 1m | <duration> | بیشینهٔ زمان برای دستدهی اولیهٔ TLS و هر مذاکرهٔ دوباره. |
منبع: option/openvpn.go:19-73 · ثابتشده در v1.14.2 (af6e64c)
pull_filters[]
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
action | string | (required) | accept | ignore | reject | accept گزینهٔ تطبیقیافته را اعمال میکند، ignore آن را دور میاندازد، reject اتصال را پایان میدهد. |
text | string | (required) | <prefix> | پیشوند حساس به بزرگی و کوچکی حروف برای کل گزینهٔ ارسالی. نخستین فیلتر منطبق اعمال میشود؛ گزینههای بدون تطبیق پذیرفته میشوند. "route " با مسیرهای IPv4 ارسالی تطبیق دارد اما با route-gateway نه. |
منبع: option/openvpn.go:117-120 · ثابتشده در v1.14.2 (af6e64c)
tls
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
server_name | string | (unset) | <name> | نام مورد انتظار گواهی سرور. اگر خالی باشد نام بررسی نمیشود؛ زنجیره یا اثرانگشت و کاربرد گواهی همچنان بررسی میشوند. |
server_name_type | string | name | subject | name | name-prefix | فیلد گواهی که با server_name تطبیق داده میشود: subject کامل، نام عمومی دقیق، یا پیشوند نام عمومی. |
certificate | badoption.Listable[string] | (unset) | <PEM> | محتوای گواهی CA مورد اعتماد. یکی از certificate، certificate_path یا peer_fingerprint لازم است؛ با certificate_path تعارض دارد. |
certificate_path | string | (unset) | <path> | مسیر گواهی CA مورد اعتماد. با certificate تعارض دارد. |
client_certificate | badoption.Listable[string] | (unset) | <PEM> | محتوای گواهی کلاینت؛ همراه با کلید کلاینت تنظیم شود. با client_certificate_path تعارض دارد. |
client_certificate_path | string | (unset) | <path> | مسیر گواهی کلاینت. با client_certificate تعارض دارد. |
client_key | badoption.Listable[string] | (unset) | <PEM> | محتوای کلید خصوصی کلاینت. با client_key_path تعارض دارد. |
client_key_path | string | (unset) | <path> | مسیر کلید خصوصی کلاینت. با client_key تعارض دارد. |
peer_fingerprint | badoption.Listable[string] | [] | [<64 lowercase hex chars>] | اثرانگشتهای SHA-256 مجاز برای گواهی برگ سرور. با CA مورد اعتماد هر دو بررسی میشوند؛ بدون آن خود زنجیره بررسی نمیشود. |
crl_path | string | (unset) | <path> | فهرست ابطال گواهی با قالب PEM یا DER برای رد گواهیهای ابطالشدهٔ سرور. |
remote_certificate_ku | badoption.Listable[string] | [] | [<hex mask>] | ماسکهای کاربرد کلید لازم در قالب remote-cert-ku در OpenVPN؛ گواهی باید همهٔ بیتهای دستکم یک ماسک را داشته باشد. |
remote_certificate_eku | string | (unset) | <OID or name> | server | client | کاربرد گستردهٔ کلید لازم. جایگزین بررسی پیشفرض remote_certificate_tls میشود و با تنظیم صریح آن تعارض دارد. |
remote_certificate_tls | string | server | server | client | none | بررسی کاربرد گواهی سرور؛ none آن را غیرفعال میکند. |
certificate_profile | string | legacy | insecure | legacy | preferred | suiteb | نمایهٔ قدرت گواهی: insecure زنجیرههای MD5 / SHA-1 و کلیدهای کوچک را هم میپذیرد، legacy SHA-1 را میپذیرد اما MD5 را نه، preferred امضا و کلید قویتر میخواهد، suiteb رمزهای TLS 1.2 را بهطور پیشفرض روی Suite B میگذارد. |
ns_certificate_type | string | (disabled) | server | client | بررسی منسوخ نوع گواهی Netscape. remote_certificate_tls را ترجیح دهید. |
version_min | string | 1.2 | 1.0 | 1.1 | 1.2 | 1.3 | کمینهٔ نسخهٔ TLS. |
version_max | string | (highest supported) | 1.0 | 1.1 | 1.2 | 1.3 | بیشینهٔ نسخهٔ TLS؛ نمیتواند کمتر از version_min باشد. |
cipher | string | (default suites) | <OpenSSL names, colon-separated> | مجموعهرمزهای TLS 1.2 و پیش از آن. بر مجموعهرمزهای TLS 1.3 اثری ندارد. |
groups | string | (default groups) | X25519 | SECP256R1 | SECP384R1 | SECP521R1 | گروههای تبادل کلید به ترتیب ترجیح، جداشده با دونقطه. |
control_wrap | *OpenVPNControlWrapOptions | (disabled) | OpenVPNControlWrapOptions | پوشش کانال کنترل (tls-auth / tls-crypt / tls-crypt-v2)؛ جدول بعدی را ببینید. |
منبع: option/openvpn.go:122-143 · ثابتشده در v1.14.2 (af6e64c)
tls.control_wrap
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
type | string | (required when set) | tls_auth | tls_crypt | tls_crypt_v2 | نوع پوشش، متناظر با tls-auth، tls-crypt و tls-crypt-v2 در OpenVPN. |
key | badoption.Listable[string] | (unset) | <key content> | محتوای کلید پوشش. با key_path تعارض دارد. |
key_path | string | (unset) | <path> | مسیر کلید پوشش. با key تعارض دارد. |
direction | string | (bidirectional) | server | client | جهت کلید tls_auth؛ فقط با type برابر tls_auth. اگر خالی باشد کلید در هر دو جهت به کار میرود. |
منبع: option/openvpn.go:169-174 · ثابتشده در v1.14.2 (af6e64c)
نقطهانتهایی سرور (openvpn-server)
type: "openvpn-server" زیر endpoints[]، بهعلاوهٔ فیلدهای شنونده (listen، listen_port و udp_timeout برای نشستهای UDP NAT).
نشست و آدرسدهی
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
mode | string | tls | tls | static_key | حالت نشست. static_key فقط به یک همتا بدون TLS و محرمانگی پیشرو خدمت میدهد و tls، users، push و گزینههای مذاکرهٔ دوباره را نادیده میگیرد. |
network | string | udp | udp | tcp | ترابردی که این نقطهانتهایی ارائه میکند. هر نقطهانتهایی یک شبکه — برای ارائهٔ هر دو، دو نقطهانتهایی با زیرشبکههای address جداگانه پیکربندی کنید. |
remote | string | (unset) | <address> | آدرس ثابت همتا برای سرور static_key روی UDP، همراه با remote_port لازم است. سرورهای TCP همتا را از سوکت پذیرفتهشده میگیرند. |
remote_port | uint16 | (unset) | <port> | پورت ثابت همتا برای سرور static_key روی UDP. |
max_clients | int | 1024 | < 16777216 | بیشینهٔ نشستهای TLS برقرار و در انتظار. حالت static_key فقط یک همتا دارد، پس در آن باید 0 یا 1 باشد. |
address | badoption.Listable[netip.Prefix] | (required) | [<CIDR>] | پیشوندهای سرور، حداکثر یک IPv4 و یک IPv6. آدرس پیشوند روی رابط سرور قرار میگیرد و پیشوند ماسکشده استخر آدرس و مسیر کلاینتها میشود. در حالت static_key اینها پیشوندهای محلی تونلاند. |
peer_address | *badoption.Addr | (unset) | <IPv4> | آدرس همتای IPv4 تونل. در حالت static_key با یک address از نوع IPv4 لازم است. |
peer_address_ipv6 | *badoption.Addr | (unset) | <IPv6> | آدرس همتای IPv6 تونل. در حالت static_key با یک address از نوع IPv6 لازم است. |
topology | string | subnet (tls) / p2p (static_key) | subnet | p2p | net30 | توپولوژی ارسالی به کلاینتها. |
duplicate_cn | bool | false | true | false | اجازه به چند کلاینت فعال با نام عمومی گواهی یا نام کاربری یکسان. وقتی خاموش است، نشست تازه جایگزین قبلی میشود و آدرس آن را دوباره به کار میگیرد. فقط در حالت TLS. |
users | []auth.User | [] | [{username, password}] | کاربران نام کاربری/گذرواژه. در صورت تنظیم، کلاینتها علاوه بر سیاست گواهی باید این بررسی را هم بگذرانند. فقط در حالت TLS. |
منبع: option/openvpn.go:75-110 · ثابتشده در v1.14.2 (af6e64c)
کلیدها و کانال داده
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
static_key | badoption.Listable[string] | (unset) | <key content> | محتوای کلید ایستای OpenVPN. در حالت static_key لازم است مگر اینکه static_key_path تنظیم شده باشد؛ با آن تعارض دارد. |
static_key_path | string | (unset) | <path> | مسیر فایل کلید ایستای OpenVPN. با static_key تعارض دارد. |
key_direction | string | (bidirectional) | server | client | جهت کلید ایستا، فقط در حالت static_key. طبق عرف سرور server و همتا client را به کار میبرد. |
tls | *OpenVPNInboundTLSOptions | (required in tls mode) | OpenVPNInboundTLSOptions | پیکربندی TLS کانال کنترل؛ جدول tls سرور در پایین را ببینید. |
cipher | string | BF-CBC | <cipher name> | مجموعهرمز کانال داده فقط برای حالت static_key. BF-CBC پیشفرض قدیمی بالادست است؛ NONE هیچ محرمانگیای ندارد. |
data_ciphers | badoption.Listable[string] | AES-256-GCM, AES-128-GCM, CHACHA20-POLY1305 | [<cipher name>] | مجموعهرمزهای کانال داده که در مذاکره ارائه میشوند. فقط در حالت TLS. رمزهای قدیمی وجود دارند اما بهطور پیشفرض فعال نیستند. |
data_ciphers_fallback | string | (disabled) | <cipher name> | رمز برای کلاینتهای قدیمی که نمیتوانند مذاکره کنند (data-ciphers-fallback در OpenVPN). فقط در حالت TLS. |
auth | string | SHA1 | <digest name> | چکیدهٔ HMAC کانال داده، مطابق پیشفرض بالادست. فقط بر رمزهای غیر AEAD و tls_auth اثر دارد. |
mss_fix | uint32 | (OpenVPN default) | <bytes> | بیشینهٔ اندازهٔ بستهٔ کپسولهشده برای محدود کردن MSS در TCP؛ محاسبهٔ پیشفرض با MTU پیشفرض از 1492 استفاده میکند. |
mss_fix_disabled | bool | false | true | false | محدودسازی MSS را، از جمله پیشفرض، غیرفعال میکند. |
mss_fix_mode | string | (encapsulation-aware) | mtu | fixed | نحوهٔ تفسیر mss_fix صریح. به mss_fix نیاز دارد. |
replay_window | uint32 | 64 | <= 65536 | اندازهٔ پنجرهٔ بازپخش کانال دادهٔ UDP؛ شناسههای بستهٔ TCP همواره پیاپی میمانند. |
replay_window_time | badoption.Duration | 15s | <duration> | مدت پنجرهٔ بازپخش UDP. باید ثانیهٔ کامل باشد. |
منبع: option/openvpn.go:75-110 · ثابتشده در v1.14.2 (af6e64c)
ارسال و زمانسنجها
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
push | *OpenVPNPushOptions | (unset) | OpenVPNPushOptions | گزینههای ارسالی به کلاینتها؛ جدول push در پایین را ببینید. |
ping_interval | badoption.Duration | (disabled) | <duration> | سمت سرور: پس از این مدت بدون ارسال به یک کلاینت، ping میفرستد. برای کلاینتها از push.ping_interval استفاده کنید. باید ثانیهٔ کامل باشد. |
ping_restart | badoption.Duration | (disabled) | <duration> | سمت سرور: پس از این مدت بدون دریافت از یک کلاینت، نشست آن را میبندد. آن را بلندتر از مهلت کلاینت نگه دارید. باید ثانیهٔ کامل باشد. |
renegotiate_interval | badoption.Duration | 1h | <duration> | فاصلهٔ مذاکرهٔ دوبارهٔ TLS. فقط در حالت TLS. |
renegotiate_disabled | bool | false | true | false | مذاکرهٔ دوبارهٔ زمانی TLS را، از جمله فاصلهٔ پیشفرض، غیرفعال میکند. فقط در حالت TLS. |
renegotiate_bytes | uint64 | 0 | <bytes> | پس از این تعداد بایت، کلیدهای کانال داده دوباره مذاکره میشوند؛ 0 از پیشفرض وابسته به رمز استفاده میکند. فقط در حالت TLS. |
renegotiate_packets | uint64 | 0 | <packets> | پس از این تعداد بسته، کلیدهای کانال داده دوباره مذاکره میشوند؛ 0 از پیشفرض وابسته به رمز استفاده میکند. فقط در حالت TLS. |
handshake_window | badoption.Duration | 1m | <duration> | بیشینهٔ زمان برای دستدهی اولیهٔ TLS و هر مذاکرهٔ دوباره. فقط در حالت TLS. |
منبع: option/openvpn.go:75-110 · ثابتشده در v1.14.2 (af6e64c)
tls
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
certificate | badoption.Listable[string] | (required) | <PEM> | محتوای گواهی سرور. certificate یا certificate_path لازم است؛ با هم تعارض دارند. |
certificate_path | string | (required) | <path> | مسیر گواهی سرور. با certificate تعارض دارد. |
key | badoption.Listable[string] | (required) | <PEM> | محتوای کلید خصوصی سرور. key یا key_path لازم است؛ با هم تعارض دارند. |
key_path | string | (required) | <path> | مسیر کلید خصوصی سرور. با key تعارض دارد. |
client_certificate | badoption.Listable[string] | (unset) | <PEM> | محتوای گواهی CA برای راستیآزمایی گواهی کلاینتها. وقتی verify_client_certificate برابر require یا optional است، یکی از client_certificate، client_certificate_path یا peer_fingerprint لازم است. |
client_certificate_path | string | (unset) | <path> | مسیر گواهی CA برای راستیآزمایی گواهی کلاینتها. با client_certificate تعارض دارد. |
verify_client_certificate | string | require | require | optional | none | سیاست گواهی کلاینت: optional در صورت ارائهٔ گواهی آن را بررسی میکند، none گواهی درخواست نمیکند. اگر users تنظیم شده باشد همچنان بررسی میشود. |
client_name | string | (unset) | <name> | نام مورد انتظار گواهی کلاینت. اگر خالی باشد بررسی نمیشود. |
client_name_type | string | name | subject | name | name-prefix | فیلد گواهی که با client_name تطبیق داده میشود. |
peer_fingerprint | badoption.Listable[string] | [] | [<64 lowercase hex chars>] | اثرانگشتهای SHA-256 مجاز برای گواهیهای برگ کلاینت؛ بدون CA کلاینت هم کار میکند. |
crl_path | string | (unset) | <path> | فهرست ابطال گواهی برای رد گواهیهای ابطالشدهٔ کلاینت. |
remote_certificate_ku | badoption.Listable[string] | [] | [<hex mask>] | ماسکهای کاربرد کلید لازم برای کلاینت در قالب remote-cert-ku در OpenVPN. |
remote_certificate_eku | string | (unset) | <OID or name> | server | client | کاربرد گستردهٔ کلید لازم برای کلاینت. با remote_certificate_tls صریح تعارض دارد. |
remote_certificate_tls | string | client | server | client | none | بررسی کاربرد گواهیهای کلاینت؛ none آن را غیرفعال میکند. |
certificate_profile | string | legacy | insecure | legacy | preferred | suiteb | نمایهٔ قدرت گواهی، با همان معنای سمت کلاینت. |
ns_certificate_type | string | (disabled) | server | client | بررسی منسوخ نوع گواهی Netscape. |
version_min | string | 1.2 | 1.0 | 1.1 | 1.2 | 1.3 | کمینهٔ نسخهٔ TLS. |
version_max | string | (highest supported) | 1.0 | 1.1 | 1.2 | 1.3 | بیشینهٔ نسخهٔ TLS. |
cipher | string | (default suites) | <OpenSSL names, colon-separated> | مجموعهرمزهای TLS 1.2 و پیش از آن. بر مجموعهرمزهای TLS 1.3 اثری ندارد. |
groups | string | (default groups) | X25519 | SECP256R1 | SECP384R1 | SECP521R1 | گروههای تبادل کلید به ترتیب ترجیح، جداشده با دونقطه. |
control_wrap | *OpenVPNInboundControlWrapOptions | (disabled) | OpenVPNInboundControlWrapOptions | پوشش کانال کنترل؛ جدول بعدی را ببینید. |
منبع: option/openvpn.go:145-167 · ثابتشده در v1.14.2 (af6e64c)
tls.control_wrap
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
type | string | (required) | tls_auth | tls_crypt | tls_crypt_v2 | نوع پوشش. برای tls_crypt_v2 کلید همان کلید سرور است. |
key | badoption.Listable[string] | (unset) | <key content> | محتوای کلید پوشش. key یا key_path لازم است؛ با هم تعارض دارند. |
key_path | string | (unset) | <path> | مسیر کلید پوشش. با key تعارض دارد. |
direction | string | (bidirectional) | server | client | جهت کلید tls_auth: server معادل key-direction 0 در OpenVPN و client معادل 1 است. اگر خالی باشد کلید در هر دو جهت به کار میرود. |
force_cookie | bool | false | true | false | فقط tls_crypt_v2: کلاینتهای UDP باید از کوکی نشست بیحالت پشتیبانی کنند. وقتی خاموش است کلاینتهای بدون پشتیبانی کوکی هم پذیرفته میشوند. |
منبع: option/openvpn.go:176-182 · ثابتشده در v1.14.2 (af6e64c)
push
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
routes | badoption.Listable[netip.Prefix] | [] | [<CIDR>] | مسیرهای ارسالی به کلاینتها؛ IPv4 و IPv6 را میتوان با هم آورد. |
dns | badoption.Listable[netip.Addr] | [] | [<IP>] | سرورهای DNS که بهصورت dhcp-option DNS / DNS6 قدیمی ارسال میشوند. گروه سرور جدید ارسالی در کلاینتهای سازگار آنها را بازنویسی میکند. |
dns_servers | []OpenVPNPushDNSServerOptions | [] | [{priority, addresses, resolve_domains, dnssec, transport, sni}] | گروههای سرور DNS جدید. addresses آدرس IP یا IP:port ([IPv6]:port) میپذیرد؛ transport یکی از plain، dot یا doh؛ dnssec یکی از yes، optional یا no. کلاینتها فقط گروه با کمترین عدد priority را به کار میبرند. |
search_domains | badoption.Listable[string] | [] | [<domain>] | دامنههای جستوجوی جدید برای ارسال. |
dhcp_options | badoption.Listable[string] | [] | [<option>] | مقادیر اضافی dhcp-option قدیمی، بدون پیشوند dhcp-option. |
redirect_gateway | bool | false | true | false | ارسال redirect-gateway تا کلاینتها ترافیک خود را از VPN عبور دهند. |
redirect_gateway_flags | badoption.Listable[string] | def1 | [<flag>] | پرچمهای redirect-gateway برای ارسال؛ فقط همراه با redirect_gateway. |
block_outside_dns | bool | false | true | false | ارسال block-outside-dns که DNS بیرون از VPN را در کلاینتهای Windows مسدود میکند. |
ping_interval | badoption.Duration | (disabled) | <duration> | فاصلهٔ ping در OpenVPN که به کلاینتها ارسال میشود. باید ثانیهٔ کامل باشد. |
ping_restart | badoption.Duration | (disabled) | <duration> | مهلت ping-restart در OpenVPN که به کلاینتها ارسال میشود. باید ثانیهٔ کامل باشد. |
منبع: option/openvpn.go:184-195 · ثابتشده در v1.14.2 (af6e64c)
سرور DNS (openvpn)
type: "openvpn" زیر dns.servers[]:
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
endpoint | string | (required) | <openvpn-client tag> | tag نقطهانتهایی openvpn-client که حلکنندههای ارسالی آن به کار میروند. پرسوجوها از همان نقطهانتهایی فرستاده میشوند. |
accept_default_resolvers | bool | false | true | false | حلکنندههای ارسالی را برای پرسوجوهایی هم به کار ببرد که با هیچ resolve-domains، DOMAIN-ROUTE یا پسوند دامنهٔ جستوجوی ارسالی تطبیق ندارند. وقتی خاموش است، این پرسوجوها NXDOMAIN میگیرند. |
accept_search_domain | bool | false | true | false | پرسوجوهای تکبرچسبی (مانند intranet) را با هر دامنهٔ جستوجوی ارسالی دوباره امتحان کند تا یکی حل شود. |
منبع: option/openvpn.go:206-210 · ثابتشده در v1.14.2 (af6e64c)
مثالها
کلاینت با احراز هویت گواهی و tls-crypt که یک زیرشبکه را از تونل مسیریابی میکند و نامهای داخلی سرور را با حلکنندههای ارسالی حل میکند:
{
"endpoints": [
{
"type": "openvpn-client",
"tag": "ovpn-client",
"server": "vpn.example.com",
"server_port": 1194,
"network": "udp",
"tls": {
"certificate_path": "/etc/openvpn/ca.crt",
"client_certificate_path": "/etc/openvpn/client.crt",
"client_key_path": "/etc/openvpn/client.key",
"control_wrap": { "type": "tls_crypt", "key_path": "/etc/openvpn/tc.key" }
}
}
],
"dns": {
"servers": [
{ "type": "local", "tag": "local" },
{ "type": "openvpn", "tag": "ovpn-dns", "endpoint": "ovpn-client", "accept_default_resolvers": true }
],
"rules": [
{ "preferred_by": "ovpn-dns", "action": "route", "server": "ovpn-dns" }
],
"final": "local"
},
"route": {
"rules": [
{ "ip_cidr": ["10.8.0.0/16"], "outbound": "ovpn-client" }
]
}
}سرور روی UDP 1194 که 10.8.0.0/24 را توزیع میکند و مسیر پیشفرض را ارسال میکند:
{
"endpoints": [
{
"type": "openvpn-server",
"tag": "ovpn-server",
"listen": "::",
"listen_port": 1194,
"network": "udp",
"address": ["10.8.0.1/24"],
"tls": {
"certificate_path": "/etc/openvpn/server.crt",
"key_path": "/etc/openvpn/server.key",
"client_certificate_path": "/etc/openvpn/ca.crt",
"control_wrap": { "type": "tls_crypt", "key_path": "/etc/openvpn/tc.key" }
},
"push": {
"redirect_gateway": true,
"dns": ["1.1.1.1"]
}
}
]
}نکات
- نقطهانتهاییها زیر
endpoints[]قرار دارند و در قواعد مسیر، مانند خروجیها، با tag انتخاب میشوند. هیچکدام مسیر یا تنظیمات DNS سیستمعامل را نصب نمیکنند:routes،redirect_gatewayو مسیرهای ارسالی فقط تعیین میکنند sing-box کدام مقصدها را ترجیحاً به نقطهانتهایی بفرستد. - فیلدهای شمارهگیری کلاینت بر اتصال آن به سرور OpenVPN اعمال میشوند؛ این اتصال کنترلی هرگز از مسیرهای خود نقطهانتهایی پیروی نمیکند، پس پرچمهای
local/autolocalدر redirect-gateway به استثنای مسیر نیازی ندارند. - حالت
static_keyفقط برای سازگاری با همتایانی است که ارتقا نمییابند — کانال کنترل TLS و محرمانگی پیشرو ندارد.tlsرا ترجیح دهید. - احراز هویت تعاملی (چالش / پاسخ،
auth_retry: "interact") از طریق کلاینتهای گرافیکی sing-box یا Dashboard در بخش Tools › Endpoints انجام میشود. - گزینههای DNS ارسالی سرور هرگز در سیستمعامل نوشته نمیشوند. برای استفاده از آنها سرور DNS از نوع
openvpnرا به کار ببرید: فقط گروه سرور ارسالی با کمترین عدد priority فعال است، اگر گروه جدیدی نباشدdhcp-option DNSقدیمی به کار میرود، و گروهی که DNSSEC را الزامی کند (dnssec yes) رد میشود چون این ترابرد DNSSEC را راستیآزمایی نمیکند. - مدتهایی مانند
ping_interval،ping_restartوreplay_window_timeباید ثانیهٔ کامل باشند.
نکات بینهستهای
- mihomo فقط کلاینت OpenVPN دارد: یک خروجی
type: openvpnکه کلیدهایش با دستورهای.ovpnمتناظرند (ca/cert/key،tls-auth/tls-crypt،username/passwordو …). سرور OpenVPN ندارد. پیشفرضauthدر mihomo برابر SHA256 است، در حالی که sing-box از SHA1 در OpenVPN بالادست پیروی میکند — هنگام ترکیب پیادهسازیهاauthرا در هر دو سمت صریحاً تنظیم کنید. به OpenVPN — mihomo مراجعه کنید. - Xray-core از OpenVPN پشتیبانی نمیکند.
منبع: option/openvpn.go:10-210 · v1.14.2 (af6e64c)
