Tailscale — sing-box
sing-box میتواند به یک tailnet Tailscale بپیوندد و آن را بهعنوان یک نقطهانتهایی قابلمسیریابی در دسترس قرار دهد. این گره بهطور پیشفرض روی پشتهٔ شبکهٔ gVisor در فضای کاربر اجرا میشود، بنابراین به دیمن سیستمی Tailscale نیازی نیست؛ برای استفاده از یک دستگاه TUN واقعی، system_interface را روی true بگذارید. برای استفاده از یک سرور هماهنگی جایگزین، control_url را به یک Headscale خودمیزبان اشاره دهید.
نقطهانتهایی، نه خروجی
در sing-box، Tailscale بهعنوان نقطهانتهایی پیکربندی میشود، نه خروجی. این بلوک زیر آرایهٔ ریشهٔ endpoints[] با type: "tailscale" قرار میگیرد و از قواعد مسیریابی مانند هر خروجی نامگذاریشده ارجاع داده میشود.
گزینههای نقطهانتهایی
type: "tailscale" زیر endpoints[]:
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
state_directory | string | tailscale | <directory path> | پوشهای که گره وضعیت و کلیدهای خود را در آن ماندگار میکند، نسبت به پوشهٔ کاری resolve میشود. استفادهٔ مجدد از آن در راهاندازیهای مجدد، هویت tailnet را یکسان نگه میدارد. |
auth_key | string | (unset) | <auth key> | کلید احراز هویت Tailscale (یا Headscale) برای ورود بدون تعامل (headless). برای گره بدون نظارت الزامی است. |
control_url | string | controlplane.tailscale.com | <URL> | نشانی سرور هماهنگی. آن را به یک Headscale خودمیزبان اشاره دهید تا از صفحهٔ کنترل جایگزین استفاده کنید. |
ephemeral | bool | false | true | false | ثبت بهعنوان گره موقت که سرور هماهنگی پس از آفلاینشدن آن را بهطور خودکار حذف میکند. |
hostname | string | (OS hostname) | <string> | نام گره برای ثبت روی tailnet. پیشفرض، نام میزبان سیستمعامل است. |
accept_routes | bool | false | true | false | پذیرش مسیرهای زیرشبکه که سایر گرههای tailnet اعلام میکنند. اختیاری (نیازمند فعالسازی). |
exit_node | string | (unset) | <node name or IP> | هدایت ترافیک از طریق این گره tailnet بهعنوان گره خروجی. |
exit_node_allow_lan_access | bool | false | true | false | اجازهٔ دسترسی مستقیم به LAN هنگام استفاده از گره خروجی. |
advertise_routes | []netip.Prefix | [] | [<CIDR>] | مسیرهای زیرشبکهای که به tailnet اعلام میشوند و این گره را به مسیریاب زیرشبکه تبدیل میکنند. |
advertise_exit_node | bool | false | true | false | اعلام این گره بهعنوان گره خروجی که سایر اعضای tailnet میتوانند از آن عبور کنند. |
advertise_tags | badoption.Listable[string] | (unset) | [<tag>] | برچسبهای ACL که برای این گره اعلام میشوند (مثل tag:server) و سیاستهای دسترسی tailnet از آنها استفاده میکنند. |
relay_server_port | *uint16 | (unset) | <port> | اجرای سرور بازپخش همتای داخلی روی این پورت UDP برای کمک به سایر گرهها در عبور از NAT. |
relay_server_static_endpoints | []netip.AddrPort | (unset) | [<ip:port>] | نقاطانتهایی ip:port که برای سرور بازپخش بهصورت ایستا اعلام میشوند، زمانی که نشانی عمومی آن بهطور خودکار قابل کشف نیست. |
system_interface | bool | false | true | false | استفاده از یک رابط TUN واقعی سیستم بهجای پشتهٔ شبکهٔ gVisor در فضای کاربر. سریعتر، اما به امتیازات بالا نیاز دارد. |
system_interface_name | string | (auto) | <string> | نام رابط TUN سیستم هنگام فعالبودن system_interface. |
system_interface_mtu | uint32 | (auto) | <bytes> | MTU رابط TUN سیستم هنگام فعالبودن system_interface. |
udp_timeout | UDPTimeoutCompat | 5m | <duration> | مهلت بیکاری برای نشستهای UDP که توسط نقطهانتهایی مدیریت میشوند. |
منبع: option/tailscale.go:13-32 · ثابتشده در v1.13.11 (553cfa1)
این ساختار همچنین DialerOptions را برای سوکت زیرین درون خود جای میدهد — bind_interface، routing_mark، detour و غیره.
مثالها
کمینه نقطهانتهایی که با یک کلید احراز هویت headless به tailnet میپیوندد:
{
"endpoints": [
{
"type": "tailscale",
"tag": "ts-ep",
"auth_key": "tskey-auth-xxxxxxxxxxxx"
}
]
}مسیریابی ترافیک منتخب از طریق یک گره خروجی tailnet:
{
"endpoints": [
{
"type": "tailscale",
"tag": "ts-ep",
"auth_key": "tskey-auth-xxxxxxxxxxxx",
"hostname": "sing-box-node",
"exit_node": "us-exit-1",
"exit_node_allow_lan_access": true,
"accept_routes": true
}
],
"route": {
"rules": [
{ "domain_suffix": [".example.com"], "outbound": "ts-ep" }
]
}
}در برابر یک سرور هماهنگی Headscale خودمیزبان، با یک پوشهٔ وضعیت اختصاصی:
{
"endpoints": [
{
"type": "tailscale",
"tag": "ts-headscale",
"auth_key": "<headscale pre-auth key>",
"control_url": "https://headscale.example.com",
"state_directory": "tailscale-state"
}
]
}نکات
- نقطهانتهایی Tailscale تنها در ساختهای دارای gVisor کامپایل میشود. در ساختی بدون gVisor، نوع
tailscaleثبت نمیشود. auth_keyورود بدون تعامل (headless) را فعال میکند — برای گره بدون نظارت الزامی است. بدون آن، گره نمیتواند خودش احراز هویت کند.state_directoryپیشفرضtailscaleاست و نسبت به پوشهٔ کاری resolve میشود. گره کلیدها و هویت ماشین خود را در آنجا ماندگار میکند، بنابراین استفادهٔ مجدد از همان پوشه هویت tailnet را در راهاندازیهای مجدد یکسان نگه میدارد.ephemeral: trueگرهای را ثبت میکند که سرور هماهنگی پس از آفلاینشدن آن را بهطور خودکار حذف میکند — مناسب برای نمونههای کوتاهعمر یا کانتینری.accept_routesاختیاری است: مسیرهای زیرشبکهٔ اعلامشده توسط سایر گرهها نادیده گرفته میشوند مگر آنکه فعالش کنید. برعکس،advertise_routes/advertise_exit_nodeاین گره را به مسیریاب زیرشبکه / گره خروجی برای بقیهٔ tailnet تبدیل میکنند.system_interface: false(پیشفرض) کاملاً از طریق gVisor در فضای کاربر اجرا میشود — بدون امتیاز اما کندتر.system_interface: trueیک دستگاه TUN واقعی را برای توان عبور بالاتر به قیمت امتیازات بالا متصل میکند.- MagicDNS Tailscale را میتوان با افزودن یک سرور DNS از نوع
tailscaleبه بلوکdnsمصرف کرد، که نامهای*.ts.netرا از طریق این گره resolve میکند.
نکات بینهستهای
- mihomo Tailscale را بهعنوان یک خروجی (
proxies[]باtype: tailscale) با نامفیلدهای خطفاصلهدار بهجای نقطهانتهایی در دسترس قرار میدهد. به Tailscale — mihomo مراجعه کنید. - Xray-core پشتیبانی Tailscale ندارد.
منبع: option/tailscale.go:13-32 · v1.13.11 (553cfa1)
