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 برای کانال کنترل، مثلاً `SHA256`. |
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` ناسازگار است. |
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_*` ارسالشده هنگام تبادل کلید افزوده میشوند. |
ping | int | (unset) | <seconds> | بازهٔ پینگ نگهدارنده (ثانیه). |
ping-restart | int | (unset) | <seconds> | پس از این تعداد ثانیه بدون پینگ، تونل را راهاندازی مجدد کن (ثانیه). |
handshake-timeout | int | 0 (no limit) | <seconds> | برقراری تونل را وقتی دستدهی OpenVPN بیش از این تعداد ثانیه طول بکشد قطع میکند. 0 مهلت زمانی را غیرفعال میکند. |
mtu | int | 1500 | <integer> | MTU تونل. |
udp | bool | false | true | false | اجازهٔ عبور ترافیک UDP از پراکسی. |
remote-dns-resolve | bool | false | true | false | حل نامهای مقصد با استفاده از DNS تونل. |
dns | []string | [] | [<server>] | سرورهای DNS مورد استفاده برای تونل. |
منبع: adapter/outbound/openvpn.go:42-72 · ثابتشده در v1.19.29 (e26714a)
مثالها
خروجی — احراز هویت با گواهی:
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 درونخطی داده میشود). peer-infoجفتهای کلید/مقدار سفارشی (مثلاًIV_HWADDR،UV_*) را پس از مدخلهای داخلیIV_VER/IV_PROTO/IV_CIPHERSکه کلاینت هنگام تبادل کلید ارسال میکند اضافه میکند.handshake-timeoutمدت مجاز برقراری تونل را محدود میکند؛0(پیشفرض) بهطور نامحدود صبر میکند.pingیک پینگ نگهدارنده را در بازهٔ دادهشده ارسال میکند؛ping-restartتونل را پس از آن تعداد ثانیه بدون دریافت بسته، برچیده میکند تا بتوان آن را دوباره برقرار کرد. هر دو بر حسب ثانیه بیان میشوند.mtuمقدار MTU تونل را تنظیم میکند و پیشفرض آن1500است.remote-dns-resolveجستجوهای نام مقصد را از طریق تونل و با استفاده از سرورهای فهرستشده درdnsمسیریابی میکند؛ این گزینه تا زمانی کهdnsناتهی نباشد هیچ اثری ندارد.
نکات بینهستهای
- OpenVPN در میان این سه هسته مخصوص mihomo است. نه Xray-core و نه sing-box خروجی OpenVPN ارائه نمیدهند — برای پلزدن یک نقطهانتهایی OpenVPN با آن هستهها باید یک کلاینت OpenVPN جداگانه اجرا کنید و یک ورودی
socks/httpیا TUN را به آن اشاره دهید.
منبع: adapter/outbound/openvpn.go:42-72 · v1.19.29 (e26714a)
