OpenVPN — mihomo
mihomo میتواند یک سرور OpenVPN را بهعنوان خروجی شمارهگیری کند و یک کلاینت فضای-کاربر را اجرا کند که یک دستگاه پشتهٔ tun-گونه برپا میکند و ترافیک تطبیقیافته را از طریق تونل رمزنگاریشده مسیریابی میکند. کانال کنترل با گواهیها (ca / cert / key)، tls-crypt اختیاری، و/یا اعتبارنامههای auth-user-pass احراز هویت میشود؛ کانال داده با cipher توافقشده رمزنگاری میشود.
خروجی
ورودی زیر proxies: با type: openvpn. این BasicOption (فیلدهای مشترک خروجی) را در خود جای میدهد.
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
name | string | (required) | <string> | نام یکتای پراکسی. |
server | string | (required) | <host> | میزبان/IP سرور OpenVPN. |
port | int | (required) | <port> | پورت سرور. |
proto | string | udp | udp | tcp | پروتکل ترابرد تونل OpenVPN. |
dev | string | tun | tun | نوع دستگاه مجازی (مثلاً tun). |
cipher | string | AES-128-GCM | AES-128-GCM | AES-192-GCM | AES-256-GCM | AES-128-CBC | AES-192-CBC | AES-256-CBC | CHACHA20-POLY1305 | رمز کانال داده که وقتی data-ciphers تنظیم نشده باشد استفاده میشود. |
data-ciphers | []string | (unset) | [<cipher>] | فهرست رمزهای کانال داده که برای توافق ارائه میشود (--data-ciphers در OpenVPN). رمز توافقشده نخستین مدخل ارسالشده از سرور است که اینجا هم حضور دارد؛ وقتی تنظیم نشود، مقدار تکی cipher استفاده میشود. |
data-ciphers-fallback | string | (unset) | <cipher> | رمزی که وقتی سرور از توافق رمز پشتیبانی نمیکند استفاده میشود (--data-ciphers-fallback در OpenVPN). |
auth | string | SHA256 | MD5 | SHA1 | SHA256 | SHA384 | SHA512 | خلاصهسازِ HMAC (--auth در OpenVPN)، مثلاً SHA256. خلاصهساز HMAC در tls-auth را نیز تعیین میکند. |
comp-lzo | string | (unset) | yes | no | adaptive | تنظیم فشردهسازی LZO. |
ca | string | (required) | <inline PEM> | گواهی CA (بلوک PEM درونخطی). |
cert | string | (unset) | <inline PEM> | گواهی کلاینت (بلوک PEM درونخطی). |
key | string | (unset) | <inline PEM> | کلید خصوصی کلاینت (بلوک PEM درونخطی). |
tls-auth | string | (unset) | <inline static key> | بلوک درونخطی OpenVPN Static key V1 برای حفاظت HMAC کانال کنترل با tls-auth. با tls-crypt و tls-crypt-v2 ناسازگار است. خلاصهساز HMAC آن از auth پیروی میکند. |
key-direction | string | (bidirectional) | 0 | 1 | جهت کلید برای tls-auth. 0 / 1 شکافهای کلید جهتدار را انتخاب میکنند؛ تنظیمنشده از یک کلید در هر دو جهت استفاده میکند. |
tls-crypt | string | (unset) | <inline static key> | کلید ثابت tls-crypt برای رمزنگاری/احراز هویت کانال کنترل. |
tls-crypt-v2 | string | (unset) | <inline PEM client key> | کلید کلاینت tls-crypt-v2 بهصورت PEM درونخطی. با tls-auth و tls-crypt ناسازگار است. |
username | string | (unset) | <string> | نام کاربری auth-user-pass. |
password | string | (unset) | <string> | گذرواژهٔ auth-user-pass. |
peer-info | map[string]string | {} | {<key>: <value>} | جفتهای کلید/مقدار peer-info اضافی (مثلاً IV_HWADDR، UV_*) که به مدخلهای داخلی IV_* ارسالشده هنگام تبادل کلید افزوده میشوند. مدخل IV_VER رشتهٔ نسخهٔ داخلی را جایگزین میکند. |
ping | int | (unset) | <seconds> | بازهٔ پینگ نگهدارنده (ثانیه). |
ping-restart | int | (unset) | <seconds> | پس از این تعداد ثانیه بدون پینگ، تونل را راهاندازی مجدد کن (ثانیه). |
tran-window | *int | 3600 | <seconds> | ثانیههایی که کلید دادهٔ قدیمی پس از rekey همچنان قابل استفاده میماند (--tran-window در OpenVPN). تنظیمنشده یعنی 3600؛ مقدار صریح 0 کلید قدیمی را فوراً منقضی میکند. با --tran-window سرور هماهنگ کنید. مقادیر منفی رد میشوند. |
handshake-timeout | int | 0 (no limit) | <seconds> | برقراری تونل را وقتی دستدهی OpenVPN بیش از این تعداد ثانیه طول بکشد قطع میکند. 0 مهلت زمانی را غیرفعال میکند. |
mtu | int | 1500 | <integer> | MTU تونل. |
udp | bool | false | true | false | اجازهٔ عبور ترافیک UDP از پراکسی. |
ip-stack | IPStackOption | (auto) | IPStackOption | پشتهٔ IP فضای کاربر برای تونل: { mode: auto|gvisor|mips, congestion-controller: cubic|reno|bbr|bbr3 } — همان بلوک ip-stack در WireGuard. |
remote-dns-resolve | bool | false | true | false | حل نامهای مقصد با استفاده از DNS تونل. |
dns | []string | [] | [<server>] | سرورهای DNS مورد استفاده برای تونل. |
منبع: adapter/outbound/openvpn.go:40-73 · ثابتشده در v1.19.31 (ab405ba)
مثالها
خروجی — احراز هویت با گواهی:
yaml
proxies:
- name: ovpn-cert
type: openvpn
server: vpn.example.com
port: 1194
proto: udp
cipher: AES-256-GCM
auth: SHA256
ca: |
-----BEGIN CERTIFICATE-----
<ca-certificate>
-----END CERTIFICATE-----
cert: |
-----BEGIN CERTIFICATE-----
<client-certificate>
-----END CERTIFICATE-----
key: |
-----BEGIN PRIVATE KEY-----
<client-private-key>
-----END PRIVATE KEY-----
udp: trueخروجی — احراز هویت با نام کاربری/گذرواژه بههمراه نگهدارنده:
yaml
proxies:
- name: ovpn-userpass
type: openvpn
server: vpn.example.com
port: 1194
proto: tcp
ca: |
-----BEGIN CERTIFICATE-----
<ca-certificate>
-----END CERTIFICATE-----
username: <username>
password: <password>
ping: 10
ping-restart: 60
udp: trueنکات
protoترابرد لینک را انتخاب میکند:udp(پیشفرض) یاtcp.- انتخاب رمز کانال داده از معنای OpenVPN 2.5+ پیروی میکند:
data-ciphersپیشنهاد توافق است (بهصورتIV_CIPHERSارسال میشود) و رمز توافقشده نخستین مدخل ارسالشده از سرور است که در آن هم حضور دارد.data-ciphers-fallbackسرورهایی را پوشش میدهد که نمیتوانند توافق کنند. وقتیdata-ciphersتنظیم نشده باشد، مقدار تکیcipher(پیشفرضAES-128-GCM) استفاده میشود. caالزامی است.cert+keyاحراز هویت با گواهی را فراهم میکنند؛username+passwordاحراز هویتauth-user-passرا فراهم میکنند. هنگامی که سرور هر دو را نیاز داشته باشد میتوان آنها را ترکیب کرد. تمام مواد کلید بهصورت درونخطی (اسکالر بلوکی YAML) داده میشوند — مسیرهای فایل خوانده نمیشوند.- سه پوشانندهٔ کانال کنترل دوبهدو ناسازگارند:
tls-auth(کانال کنترل را با HMAC احراز هویت میکند؛ برای کلیدهای جهتدار باkey-direction: 0|1جفت کنید)،tls-crypt(آن را با یک کلید ثابت مشترک رمزنگاری و احراز هویت میکند) وtls-crypt-v2(کلید پوشیدهشدهٔ بهازای هر کلاینت، که بهصورت کلید کلاینت PEM درونخطی داده میشود). - HMAC در
tls-authمانند خود OpenVPN از خلاصهسازauth(پیشفرضSHA256) استفاده میکند. اگر سرور از پیشفرض OpenVPN یعنیauth SHA1استفاده میکند،auth: SHA1را صریحاً تنظیم کنید. peer-infoجفتهای کلید/مقدار سفارشی (مثلاًIV_HWADDR،UV_*) را پس از مدخلهای داخلیIV_VER/IV_PROTO/IV_CIPHERSکه کلاینت هنگام تبادل کلید ارسال میکند اضافه میکند. مقدارIV_VERکاربر جایگزین مقدار داخلی میشود؛IV_PROTO/IV_CIPHERSهمیشه خودکار ساخته میشوند و قابل بازنویسی نیستند.handshake-timeoutمدت مجاز برقراری تونل را محدود میکند؛0(پیشفرض) بهطور نامحدود صبر میکند.pingیک پینگ نگهدارنده را در بازهٔ دادهشده ارسال میکند؛ping-restartتونل را پس از آن تعداد ثانیه بدون دریافت بسته، برچیده میکند تا بتوان آن را دوباره برقرار کرد. هر دو بر حسب ثانیه بیان میشوند.tran-windowکلید دادهٔ قبلی را پس از rekey به همین تعداد ثانیه زنده نگه میدارد تا بستههای در راه همچنان رمزگشایی شوند؛ مگر آنکه سرور--tran-windowغیرپیشفرض داشته باشد، آن را تنظیمنشده (3600 ثانیه) بگذارید.mtuمقدار MTU تونل را تنظیم میکند و پیشفرض آن1500است.remote-dns-resolveجستجوهای نام مقصد را از طریق تونل و با استفاده از سرورهای فهرستشده درdnsمسیریابی میکند؛ این گزینه تا زمانی کهdnsناتهی نباشد هیچ اثری ندارد.
نکات بینهستهای
- Xray-core از OpenVPN پشتیبانی نمیکند — برای پلزدن یک نقطهانتهایی OpenVPN با Xray باید یک کلاینت OpenVPN جداگانه اجرا کنید و یک ورودی
socks/httpیا TUN را به آن اشاره دهید. sing-box OpenVPN را بهصورت نقطهانتهایی (نه خروجی) پیادهسازی میکند (openvpn-clientوopenvpn-server، سازگار با همتایان استاندارد OpenVPN)، بههمراه یک سرور DNS از نوعopenvpnکه از گزینههای DNS ارسالشده توسط سرور استفاده میکند. به OpenVPN — sing-box مراجعه کنید.
منبع: adapter/outbound/openvpn.go:40-73 · v1.19.31 (ab405ba)
