حزم أنفاق UDP بين زوج من الأجهزة لتمكين الوصول عن بعد لوحدة تحكم UHPPOTE.
من الناحية الفنية، إنه ليس نفقًا حقًا، إلا بمعنى أنك كحزمة تدخل إلى حفرة مظلمة محظورة، تحدث أشياء غامضة وربما لا توصف وتخرج بعد مرور بعض الوقت يومض في الضوء في مكان مختلف تمامًا. لذلك ربما يكون الأمر أكثر تتابعًا أو وكيلًا .. لكننا سنستخدم النفق على أي حال.
يتضمن التنفيذ الموصلات التالية:
بالنسبة لتلك الأوقات المزعجة للغاية عندما يكون من الجيد تشغيل تطبيق UHPPOTE AccessControl ولكن وحدة التحكم موجودة في مكان واحد والجهاز المضيف في مكان آخر (أو ربما على VPS في النرويج) مما يعني أن بث UDP لا يعمل فقط. كما أن إحداث ثغرات في جدار الحماية وتعديل NAT أو إعداد VPN لن يحدث أو أنه يمثل مشكلة أكثر مما يستحق.
مفيد أيضًا للاستخدام عن بعد
وهو بديل أبسط لـ:
أنظمة التشغيل المدعومة:
** الإصدار 0.8.9 - 06-09-2024
يتم تجميع الملفات التنفيذية لجميع أنظمة التشغيل المدعومة في الإصدارات:
تحتوي كرات القطران الخاصة بالإصدار على الملفات التنفيذية لجميع أنظمة التشغيل - يمكن العثور على كرات القطران الخاصة بنظام التشغيل مع كافة المكونات المجهزة في إصدارات uhpppoted.
التثبيت بسيط ومباشر - قم بتنزيل الأرشيف واستخرجه إلى دليل من اختيارك. لتثبيت uhppoted-tunnel
كخدمة نظام:
cd <uhppoted directory>
sudo uhppoted-tunnel daemonize --in <connector> --out <connector> --label <label>
سوف تقوم uhppoted-tunnel help
بإدراج الأوامر المتاحة والخيارات المرتبطة بها (موثقة أدناه).
الأدوات المطلوبة:
للبناء باستخدام Makefile المضمن:
git clone https://github.com/uhppoted/uhppoted-tunnel.git
cd uhppoted-tunnel
make build
دون استخدام make
:
git clone https://github.com/uhppoted/uhppoted-tunnel.git
cd uhppoted-tunnel
go build -trimpath -o bin/ ./...
تقوم الأوامر المذكورة أعلاه ببناء uhppoted-tunnel
القابل للتنفيذ إلى دليل bin
.
التبعية | وصف |
---|---|
uhppote-core | تنفيذ واجهة برمجة التطبيقات على مستوى الجهاز |
uhppoted-lib | وظائف المكتبة المشتركة |
golang.org/x/sys | (لتكامل خدمة Windows) |
tailscale.com | مكتبة tsnet لموصلات Tailscale |
الاستخدام: uhppoted-tunnel <command> --in <connector> --out <connector> <options>
الأوامر المدعومة:
help
version
run
daemonize
undaemonize
الإعدادات الافتراضية run
إذا لم يتم توفير الأمر، على سبيل المثال uhppoted-tunnel --in <connector> --out <connector> <options>
يعادل uhppoted-tunnel run --in <connector> --out <connector> <options>
.
بالنسبة إلى الإصدار uhppoted-tunnel v0.8.3+، يتم تعريف تكوين وقت التشغيل في ملف TOML (موثق هنا) وستكون أي تحسينات مستقبلية قابلة للتكوين فقط في ملف TOML.
وسيطات سطر الأوامر الموضحة أدناه مخصصة للدعم القديم وتجاوز إعدادات معينة في تكوين TOML.
run
تشغيل خدمة uhppoted-tunnel
. الأمر الافتراضي، مخصص للاستخدام كخدمة نظام تعمل في الخلفية.
سطر الأوامر:
uhppoted-tunnel [--debug] [--console] --config <configuration> --in <connector> --out <connector> [options]
--config <configuration> Sets the TOML file and section to use for runtime configuration settings. The
configuration may be:
- fully specified, e.g. "--config /etc/uhppoted/uhppoted-tunnel.toml#client"
- file only e.g. "--config /etc/uhppoted/uhppoted-tunnel.toml" (uses the [defaults] section)
- section only e.g. "--config #client" (uses the default TOML file and [client] section)
If the --config argument not supplied, the default TOML file will be used if it exists.
--in <connector> Defines the connector that accepts incoming commands. Overrides the 'IN' connector in the TOML
configuration if it exists. Valid 'in' connectors include:
- udp/listen:<bind address> (e.g. udp/listen:0.0.0.0:60000)
- udp/event:<bind address> (e.g. udp/listen:0.0.0.0:60000)
- tcp/server:<bind address> (e.g. tcp/server:0.0.0.0:12345)
- tcp/client:<host address> (e.g. tcp/client:192.168.1.100:12345)
- tls/server:<bind address> (e.g. tls/server:0.0.0.0:12345)
- tls/client:<host address> (e.g. tls/client:192.168.1.100:12345)
- tailscale/server:<server address> (e.g.uhppoted:12345,nolog)
- http/<bind address> (e.g. http/0.0.0.0:8080)
- https/<bind address> (e.g. https/0.0.0.0:8443)
Under Linux and MacOS TCP and UDP _in_ connectors can be bound to a specific interface by prefixing
the address with ::<interface> e.g. tcp/client::en3:192.168.1.100:12345. The _Tailscale_ connector
syntax is described below.
--out <connector> Defines the connector that forwards received commands. Overrides the 'OUT' connector in the TOML
configuration if it exists. Valid 'out' connectors include:
- udp/broadcast:<broadcast address> (e.g. udp/broadcast:255.255.255.255:60000)
- udp/event:<broadcast address> (e.g. udp/broadcast:255.255.255.255:60000)
- tcp/server:<bind address> (e.g. tcp/server:0.0.0.0:12345)
- tcp/client:<host address> (e.g. tcp/client:192.168.1.100:12345)
- tls/server:<bind address> (e.g. tls/server:0.0.0.0:12345)
- tls/client:<host address> (e.g. tls/client:192.168.1.100:12345)
- tailscale/client:<client address> (e.g. tailscale/client::makerspace:uhppoted:12345,nolog)
Under Linux and MacOS TCP and UDP _out_ connectors can be bound to a specific interface by prefixing
the address with ::<interface> e.g. udp/broadcast::lo0:127.0.0.01:12345. The _Tailscale_ connector
syntax is described below.
--console Runs the UDP tunnel as a console application, logging events to the console.
--debug Displays verbose debugging information, in particular the communications with the
UHPPOTE controllers
Options:
--max-retries <retries> Maximum number of failed bind/connect attempts before failing with a fatal error.
Defaults to 32, set to -1 for infinite retry.
--max-retry-delay <delay> Retries use an exponential backoff (starting at 5 seconds) up to the delay (in
human readable time format e.g. 60s or 5m). Defaults to 5 minutes.
--lockfile <file> Overrides the default lockfile name for use in e.g. bash scripts. The default lockfile
name is generated from the hash of the 'in' and 'out' connectors.
--log-level <level> Lowest level log messages to include in logging output ('debug', 'info', 'warn' or 'error').
Defaults to 'info'
--ca-cert <file> (TLS only) File path for CA certificate PEM file. Defaults to ./ca.cert
--cert <file> (TLS only) File path for client/server certificate PEM file. Defaults to./client.cert ('IN'
connectors) or ./server.cert (OUT connectors)
--key <file> (TLS only) File path for client/server key PEM file. Defaults to ./client.key ('IN' connectors)
or ./server.key ('OUT' connectors)
--client-auth (TLS only) Mandates client authentication. Defaults to false
--html (HTTP only) Folder with HTML, CSS, images, etc. Defaults to./html
بشكل عام، تعمل الأنفاق في أزواج - واحد على المضيف ، يستمع للأوامر من تطبيق AccessControl أو uhppote-cli على سبيل المثال والآخر على العميل المحلي لوحدة التحكم، والذي يرسل الأوامر إلى وحدة (وحدات) التحكم ويعيد الردود إلى المضيف . ومع ذلك، فمن الممكن ربط أنفاق متعددة لربط عدة أجهزة.
تعد موصلات الأحداث أحد تخصصات موصلات الاستماع والبث لـ UDP حيث يتم ترحيل الأحداث في اتجاه واحد فقط، دون توقع الرد. من الممكن تمامًا استخدام موصلات الاستماع والبث لترحيل الأحداث ولكن تم تحسين الموصلات المتخصصة قليلاً لحالة الاستخدام وتم وضعها أيضًا لدعم التحسينات المستقبلية التي قد تعتمد على الموصلات المتخصصة.
daemonize
يقوم بتسجيل uhppoted-tunnel
كخدمة نظام سيتم تشغيلها عند تشغيل النظام. يقوم الأمر بإنشاء ملفات تكوين الخدمة الخاصة بالنظام وإدخالات مدير الخدمة الضرورية.
على لينكس:
uhppoted:uhppoted
user:group - ويمكن تغيير ذلك باستخدام خيار --user
sudo systemctl enable uhppoted-tunnel-xxx
بعد الإخفاء لبدء خدمة uhppoted-tunnel عند التمهيد.network-online.target
(راجع https://systemd.io/NETWORK_ONLINE). لانتظار واجهة معينة، قم بتعديل ملف الوحدة ( /etc/systemd/system/uhpppoted-tunnel-xxx ) لانتظار systemd-networkd-wait-online.serviceسطر الأوامر:
uhppoted-tunnel daemonize --config <configuration> --in <connector> --out <connector> [--label <label>] [--user <user>]
--config <configuration> Sets the TOML file and section to use for runtime configuration settings. The
configuration may be:
- fully specified, e.g. "--config /etc/uhppoted/uhppoted-tunnel.toml#client"
- file only e.g. "--config /etc/uhppoted/uhppoted-tunnel.toml" (uses the [defaults] section)
- section only e.g. "--config #client" (uses the default TOML file and [client] section)
If the --config argument not supplied, the default TOML file will be used if it exists.
--in <connector> Defines the connector that accepts incoming commands. Overrides the 'in' connector in the TOML
configuration. Valid 'in' connectors include:
- udp/listen:<bind address> (e.g. udp/listen:0.0.0.0:60000)
- tcp/server:<bind address> (e.g. tcp/server:0.0.0.0:12345)
- tcp/client:<host address> (e.g. tcp/client:192.168.1.100:12345)
- tls/server:<bind address> (e.g. tls/server:0.0.0.0:12345)
- tls/client:<host address> (e.g. tls/client:192.168.1.100:12345)
- http/<bind address> (e.g. http/0.0.0.0:8080)
- https/<bind address> (e.g. https/0.0.0.0:8443)
--out <connector> Defines the connector that forwards received commands. Overrides the 'out' connector in the TOML
configuration. Valid 'out' connectors include:
- udp/broadcast:<broadcast address> (e.g. udp/broadcast:255.255.255.255:60000)
- tcp/server:<bind address> (e.g. tcp/server:0.0.0.0:12345)
- tcp/client:<host address> (e.g. tcp/client:192.168.1.100:12345)
- tls/server:<bind address> (e.g. tls/server:0.0.0.0:12345)
- tls/client:<host address> (e.g. tls/client:192.168.1.100:12345)
--label <label> Identifying label for the tunnel daemon/service, used to identify the tunnel in logs and when
uninstalling the daemon/service. Imperative if running multiple tunnel daemons on the same machine,
optional but recommended otherwise. Defaults to uhppoted-tunnel if not provided.
--user <uid:group> (Linux only) uid:group pair to use for service. Defaults to uhppoted:uhppoted.
undaemonize
يلغي تسجيل uhppoted-tunnel
كخدمة نظام، لكنه لا يحذف أي سجل تم إنشاؤه أو ملفات التكوين.
سطر الأوامر:
uhppoted-tunnel undaemonize [--label <label>]
--label <label> Identifying label for the tunnel daemon/service to be uninstalled. Defaults to uhppoted-tunnel if
not provided.
يتضمن uhppoted-tunnel دعمًا لموصلات متعددة يمكن بشكل عام مزجها ومطابقتها، مع بعض القيود:
في الموصلات:
الموصلات الخارجية :
يستمع لحزم UDP الواردة على عنوان الربط ، ويعمل بشكل فعال كوكيل مباشر لوحدة التحكم عن بعد.
--in udp/listen[::<interface>]:<bind address>
e.g.
--in udp/listen:0.0.0.0:60000
--in udp/listen::en3:0.0.0.0:60000
يرسل حزمة مستلمة كرسالة UDP على عنوان البث ويعيد توجيه أي ردود إلى الطالب الأصلي، ويعمل بشكل فعال كوكيل لتطبيق بعيد.
--out udp/broadcast[::<interface>]:<broadcast address> [--udp-timeout <timeout>]
The broadcast address is typically (but not necessarily) the UDP broadcast for the network adapter for the controllers'
network segment. However it can be any valid IPv4 address:port combination to accomodate the requirements of the
installation.
--udp-timeout <timeout> Sets the maximum time to wait for replies to a broadcast message, in human readable format
e.g. 15s, 1250ms, etc. Defaults to 5 seconds if not provided.
e.g.
--out udp/broadcast:255.255.255.255:60000 --udp-timeout 5s
--out udp/broadcast::en3:255.255.255.255:60000 --udp-timeout 5s
يقبل موصل خادم TCP الاتصالات من واحد أو أكثر من عملاء TCP ويمكن أن يعمل كموصل IN وموصل OUT . سيتم إعادة توجيه الطلبات الواردة إلى جميع العملاء المتصلين.
--in tcp/server[::<interface>]:<bind address>
e.g.
--in tcp/server:0.0.0.0:12345
--in tcp/server::en3:0.0.0.0:12345
يتصل موصل عميل TCP بخادم TCP ويمكن أن يعمل كموصل IN وموصل OUT . سيتم إعادة توجيه الطلبات/الردود الواردة إلى الخادم البعيد.
--in tcp/client[::<interface>]:<host address>
e.g.
--in tcp/host:192.168.1.100:12345
--in tcp/host::lo0:127.0.0.1:12345
موصل خادم TLS هو موصل خادم TCP الذي يقبل فقط اتصالات العميل الآمنة TLS.
--in tls/server[::<interface>]:<bind address> [--ca-cert <file>] [--cert <file>] [--key <file>] [--client-auth]
--ca-cert CA certificate used to verify client certificates (defaults to ca.cert)
--cert server TLS certificate in PEM format (defaults to server.cert)
--key server TLS key in PEM format (defaults to server.key)
--client-auth requires client mutual authentication if supplied
e.g.
--in tls/server:0.0.0.0:12345 --ca-cert tunnel.ca --cert tunnel.cert --key tunnel.key --client-auth
--in tls/server::en3:0.0.0.0:12345 --ca-cert tunnel.ca --cert tunnel.cert --key tunnel.key --client-auth
موصل عميل TLS هو موصل عميل TCP الذي يتصل فقط بخوادم TLS الآمنة.
--in tls/client[::<interface>]:<host address> [--ca-cert <file>] [--cert <file>] [--key <file>] [--client-auth]
--ca-cert CA certificate used to verify server certificates (defaults to ca.cert)
--cert client TLS certificate in PEM format. Optional, only required if the TLS server
has mutual authentication enabled.
--key client TLS key in PEM format. Optional, only required if the TLS server
has mutual authentication enabled.
e.g.
--in tls/client:192.168.1.100:12345 --ca-cert tunnel.ca --cert client.cert --key client.key
--in tls/client::en3:192.168.1.100:12345 --ca-cert tunnel.ca --cert client.cert --key client.key
يقبل موصل HTTP POST طلبات JSON POST ويعيد توجيه الردود إلى العميل الطالب، وذلك في المقام الأول لدعم التطبيقات السريعة والقذرة المستندة إلى المتصفح (يتم تضمين مثال صغير في مجلد الأمثلة ).
--in http/<bind address> [--html <folder>]
--html <folder> Folder containing the HTML served to the browser on the bind address.
e.g.
--in http:/0.0.0.0:8080 --html examples/html
طلب النشر:
{
ID: <request ID>,
wait: <UDP timeout>,
request: <UDP request byte array>
}
e.g.
{
ID: 19,
wait: "5s",
request: [0x17,0x94,0x00,0x00,0x90,0x53,0xfb,0x0b,0x00,,...]
}
رد:
{
ID: <request ID>,
replies: <array of UDP byte array>
}
e.g.
{
ID: 19,
replies: [
[0x17,0x94,0x00,0x00,0x90,0x53,0xfb,0x0b,0xc0,0xa8,...],
[0x17,0x94,0x00,0x00,0x41,0x78,0x1e,0x12,0xc0,0xa8,...],
]
}
موصل HTTPS POST هو موصل HTTP POST الذي يقبل فقط اتصالات عميل TLS.
--in https/<bind address> [--html <folder>] [--ca-cert <file>] [--cert <file>] [--key <file>] [--client-auth]
--html <folder> Folder containing the HTML served to the browser on the bind address.
--ca-cert CA certificate used to verify client certificates (defaults to ca.cert)
--cert server TLS certificate in PEM format (defaults to server.cert)
--key server TLS key in PEM format (defaults to server.key)
--client-auth requires client mutual authentication if supplied
e.g.
--in https:/0.0.0.0:8080 --html examples/html
طلب النشر:
{
ID: <request ID>,
wait: <UDP timeout>,
request: <UDP request byte array>
}
e.g.
{
ID: 19,
wait: "5s",
request: [0x17,0x94,0x00,0x00,0x90,0x53,0xfb,0x0b,0x00,,...]
}
رد:
{
ID: <request ID>,
replies: <array of UDP byte array>
}
e.g.
{
ID: 19,
replies: [
[0x17,0x94,0x00,0x00,0x90,0x53,0xfb,0x0b,0xc0,0xa8,...],
[0x17,0x94,0x00,0x00,0x41,0x78,0x1e,0x12,0xc0,0xa8,...],
]
}
ينشئ موصل خادم Tailscale اتصال Tailscale للاستماع الذي يقبل الاتصالات من واحد أو أكثر من عملاء Tailscale. وعلى عكس موصلات TCP، فقد تم تصميمه ليعمل فقط كموصل IN . تتم إعادة توجيه الطلبات الواردة إلى جميع العملاء المتصلين.
يشتمل عنوان خادم Tailscale على:
machine
الذي سيتم استخدامه للخادم (مطلوب)debug
اختياري لعرض تسجيل الاتصال بمقياس الذيل. الإعدادات الافتراضية هي "بدون سجل" لأن تسجيل Tailscale مطول للغاية، ولكنه مفيد أو ضروري في بعض الأحيان لتصحيح مشكلات الاتصال. القيمة الصالحة الوحيدة هي debug
- يمكن استخدام القيم الأخرى (على سبيل المثال nolog) كعنصر نائب لوسائل التذكير. --in tailscale/server:<device>:<port>[,debug]
e.g.
--in tailscale/server:uhppoted:12345,debug
--in tailscale/server:uhppoted:12345,nolog
يرجى ملاحظة أن Tailscale لا يدعم حاليًا الارتباط بواجهة معينة (المرجع. tailscale/tailscale#1552).
يتصل موصل عميل Tailscale باتصال خادم Tailscale للاستماع. على عكس موصلات عميل TCP وUDP، لا يمكن تكوين موصل عميل Tailscale إلا كموصل OUT ، أي أنه يتوقع تلقي الأوامر على منفذ UDP IN وإعادة توجيه الأوامر إلى خادم Tailscale المتصل بوحدة التحكم في الوصول.
يشتمل عنوان عميل Tailscale على ما يلي:
machine
الشبكة الخلفية المراد استخدامه للخادم (اختياري، ولكن يوصى به)debug
اختياري لعرض تسجيل الاتصال بمقياس الذيل. الإعدادات الافتراضية هي "بدون سجل" لأن تسجيل Tailscale مطول للغاية، ولكنه مفيد أو ضروري في بعض الأحيان لتصحيح مشكلات الاتصال. القيمة الصالحة الوحيدة هي debug
- يمكن استخدام القيم الأخرى (على سبيل المثال nolog) كعناصر نائبة لوسائل التذكر. --in tailscale/client[::<machine>]:<server address>[,debug]
e.g.
--out tailscale/client:uhppoted:12345
--out tailscale/client::qwerty:uhppoted:12345,debug
--out tailscale/client::qwerty:uhppoted:12345,nolog
يرجى ملاحظة أن Tailscale لا يدعم حاليًا الارتباط بواجهة معينة (المرجع. tailscale/tailscale#1552).
بشكل افتراضي، ستستخدم الاتصالات بشبكة Tailscale مفتاح التفويض في متغير البيئة TS_AUTHKEY. إذا لم يتم تعريف متغير البيئة أو كان فارغًا، فستتم مطالبتك بعنوان URL للتفويض.
يمكن تكوين طرق ترخيص بديلة في ملف تكوين TOML (المحدد باستخدام خيار سطر الأوامر --config
):
env:<variable name>
، على سبيل المثال [tailscale-server]
...
authorisation = "env:TS_WORKSHOP"
...
يعد هذا بديلاً لاستخدام مفتاح ترخيص قابل لإعادة الاستخدام في متغير البيئة TS_AUTHKEY عند تشغيل نفقين أو أكثر على نفس الجهاز.
authkey:<key>
، على سبيل المثال [tailscale-server]
...
authorisation = "authkey:tskey-auth-xxxxxxxxxxxx-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
...
oauth2:<credentials>
، على سبيل المثال [tailscale-server]
...
authorisation = "oauth2:.credentials.workship"
...
credentials
هي ملف JSON يحتوي على بيانات اعتماد OAuth2 لعميل OAuth2، على سبيل المثال
{
"tailscale": {
"oauth2": {
"client-id": "xxxxxxxxxxxx",
"client-secret": "tskey-client-xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"auth-url": "https://api.tailscale.com/api/v2/oauth/token",
"tailnet": "[email protected]",
"tag": "development",
"key-expiry": 300
}
}
}
client-id
client-secret
هما المفتاحان اللذان تم إنشاؤهما عند إنشاء عميل OAuth2 على وحدة تحكم مسؤول Tailscale.tailnet
هو اسم حساب المستخدم/المؤسسة ( وليس اسم DNS للشبكة الخلفية) ولكن يمكن تعيينه افتراضيًا على "-" نظرًا لأن مفاتيح واجهة برمجة التطبيقات خاصة بالمؤسسة/العميل.يدعم موصل IP/out الاتصالات التالية بوحدات التحكم:
الاتصال الافتراضي هو بث UDP ولكن يمكن تكوين وحدات تحكم محددة في ملف تكوين TOML لاتصالات UDP 'sendto' أو TCP، مما يجعله موصل 'TOML' فقط لجميع الأغراض العملية:
uhppoted-tunnel --config "uhppoted-tunnel.toml#ip"
where the TOML 'ip' section comprises:
...
[ip]
in = "udp/listen:0.0.0.0:60000"
out = "ip/out:192.168.1.255:60005"
console=true
debug = true
[ip.controllers]
405419896 = "udp::192.168.1.100:60005"
303986753 = "tcp::192.168.1.100:60005"
...
- the 'in' connection is any supported IN connection
- the 'out' connection defines the default UDP broadcast connection
- the [controllers] subsection lists the controllers with transport protocol and IPv4 address
يحتوي uhppoted-tunnel على حد داخلي للمعدل يحد من عدد الطلبات التي يمكن معالجتها في الثانية. الإعدادات الافتراضية متحفظة إلى حد معقول:
يمكن تغيير هذه الحدود في ملف تكوين TOML، على سبيل المثال:
...
rate-limit = 5
rate-limit-burst = 300
...
يتم دعم حدود المعدل الجزئي، على سبيل المثال rate-limit = 0.1