Skip to content
ეს გვერდი შეიქმნა და ითარგმნა ხელოვნური ინტელექტის დახმარებით. თუ შეამჩნევთ უზუსტობას, გთხოვთ, დაგვეხმარეთ გაუმჯობესებაში. GitHub-ზე რედაქტირება

გვირაბი და NAT-ის გავლა

PRX აგენტებს ხშირად სჭირდებათ შემომავალი კავშირების მიღება -- GitHub-ის webhook callback-ები, Telegram-ის განახლებები, Slack-ის მოვლენები ან კვანძებს შორის კომუნიკაცია. NAT-ის ან firewall-ის უკან გაშვებისას, გვირაბის ქვესისტემა უზრუნველყოფს ავტომატურ შესვლას გვირაბის პროვაიდერთან გამავალი კავშირის დამყარებითა და საჯარო URL-ის თქვენს ლოკალურ PRX ინსტანციაზე მიბმით.

რატომ არის მნიშვნელოვანი გვირაბი

PRX-ის ბევრი ფუნქცია საჯაროდ მისაწვდომ ენდფოინთს მოითხოვს:

  • Webhook არხები -- Telegram, Discord, Slack და GitHub ყველა მოვლენებს თქვენ მიერ მოწოდებულ URL-ზე აგზავნის. საჯარო ენდფოინთის გარეშე, ეს არხები ვერ მიაწვდის შეტყობინებებს თქვენს აგენტს.
  • OAuth2 callback-ები -- პროვაიდერის ავთენტიფიკაციის ნაკადები ბრაუზერს ლოკალურ URL-ზე გადამისამართებს. გვირაბები ამას მუშაობის საშუალებას აძლევს, როდესაც PRX კერძო ქსელში მუშაობს.
  • კვანძიდან კვანძზე კომუნიკაცია -- განაწილებული PRX განთავსებები კვანძების ერთმანეთთან მისაწვდომობას მოითხოვს. გვირაბები კვანძებს სხვადასხვა ქსელს შორის აკავშირებს.
  • MCP სერვერის ჰოსტინგი -- როდესაც PRX MCP სერვერის როლს ასრულებს გარე კლიენტებისთვის, გვირაბი საჯარო ენდფოინთს უზრუნველყოფს.

მხარდაჭერილი ბექენდები

PRX-ს გააჩნია ოთხი გვირაბის ბექენდი და no-op სარეზერვო:

ბექენდიპროვაიდერიუფასო დონემორგებული დომენიავთენტიფიკაცია საჭირონულოვანი ნდობა
Cloudflare გვირაბიCloudflareდიახდიახ (ზონით)დიახ (cloudflared)დიახ
Tailscale FunnelTailscaleდიახ (პირადი)MagicDNS-ითდიახ (Tailscale ანგარიში)დიახ
ngrokngrokდიახ (შეზღუდული)დიახ (ფასიანი)დიახ (auth ტოკენი)არა
მორგებული ბრძანებანებისმიერიდამოკიდებულიადამოკიდებულიადამოკიდებულიადამოკიდებულია
None----------

არქიტექტურა

გვირაბის ქვესისტემა Tunnel ტრეიტზეა აშენებული:

rust
#[async_trait]
pub trait Tunnel: Send + Sync {
    /// გვირაბის გაშვება და საჯარო URL-ის დაბრუნება.
    async fn start(&mut self) -> Result<String>;

    /// გვირაბის შეჩერება და რესურსების გასუფთავება.
    async fn stop(&mut self) -> Result<()>;

    /// გვირაბის ჯანმრთელობისა და საჯარო URL-ის მისაწვდომობის შემოწმება.
    async fn health_check(&self) -> Result<bool>;
}

თითოეული ბექენდი ამ ტრეიტს ახორციელებს. TunnelProcess სტრუქტურა მართავს ძირითად შვილ პროცესს (მაგ., cloudflared, tailscale, ngrok) -- გაშვებას, stdout/stderr-ის გადაღებას, გრაციოზულ გამორთვასა და წარუმატებლობისას ავტომატურ გადატვირთვას.

┌─────────────────────────────────────────────┐
│                PRX გეითვეი                   │
│            (localhost:8080)                   │
└──────────────────┬──────────────────────────┘
                   │ (ლოკალური)
┌──────────────────▼──────────────────────────┐
│              TunnelProcess                   │
│  ┌──────────────────────────────────┐       │
│  │  cloudflared / tailscale / ngrok │       │
│  │  (შვილი პროცესი)                │       │
│  └──────────────┬───────────────────┘       │
└─────────────────┼───────────────────────────┘
                  │ (გამავალი TLS)
┌─────────────────▼───────────────────────────┐
│      გვირაბის პროვაიდერის ზღვრული ქსელი    │
│    https://your-agent.example.com            │
└──────────────────────────────────────────────┘

კონფიგურაცია

გვირაბის კონფიგურაცია config.toml-ში:

toml
[tunnel]
# ბექენდის არჩევა: "cloudflare" | "tailscale" | "ngrok" | "custom" | "none"
backend = "cloudflare"

# ლოკალური მისამართი, რომელზეც გვირაბი ტრაფიკს გადაამისამართებს.
# უნდა ემთხვეოდეს თქვენი გეითვეის მოსმენის მისამართს.
local_addr = "127.0.0.1:8080"

# ჯანმრთელობის შემოწმების ინტერვალი წამებში. გვირაბი გადაიტვირთება, თუ
# ჯანმრთელობის შემოწმება თანმიმდევრულად `max_failures`-ჯერ ვერ ხერხდება.
health_check_interval_secs = 30
max_failures = 3

# ავტოგამოვლენა: თუ backend = "auto", PRX ეძებს ხელმისაწვდომ
# გვირაბის ბინარებს თანმიმდევრობით: cloudflared, tailscale, ngrok.
# ვერ პოვნისას გადადის "none"-ზე გაფრთხილებით.

ბექენდისთვის სპეციფიკური კონფიგურაცია

თითოეულ ბექენდს აქვს საკუთარი კონფიგურაციის სექცია. იხილეთ ინდივიდუალური ბექენდის გვერდები დეტალებისთვის:

მორგებული ბრძანების ბექენდი

ნატიურად მხარდაუჭერელი გვირაბის პროვაიდერებისთვის გამოიყენეთ custom ბექენდი:

toml
[tunnel]
backend = "custom"

[tunnel.custom]
# გასაშვები ბრძანება. უნდა მიიღოს ტრაფიკი local_addr-ზე და
# დაბეჭდოს საჯარო URL stdout-ში startup_timeout_secs-ის ფარგლებში.
command = "bore"
args = ["local", "8080", "--to", "bore.pub"]
startup_timeout_secs = 15

# არასავალდებულო: regex საჯარო URL-ის stdout-იდან ამოსაღებად.
# პირველი ჯგუფი გამოიყენება URL-ად.
url_pattern = "listening at (https?://[\\S]+)"

ავტოგამოვლენა

backend = "auto"-ისას PRX $PATH-ში ეძებს გვირაბის ბინარებს ამ თანმიმდევრობით:

  1. cloudflared -- უპირატესი ნულოვანი ნდობის შესაძლებლობებისთვის
  2. tailscale -- უპირატესი კერძო mesh ქსელისთვის
  3. ngrok -- ფართოდ ხელმისაწვდომი, მარტივი გამართვა

ვერ პოვნისას გვირაბი ითიშება და PRX გაფრთხილებას ბეჭდავს. Webhook-ზე დამოკიდებული არხები არ იმუშავებს გვირაბის ან საჯარო IP-ის გარეშე.

TunnelProcess-ის სასიცოცხლო ციკლი

TunnelProcess სტრუქტურა მართავს შვილი პროცესის სასიცოცხლო ციკლს:

ფაზააღწერა
გაშვებაგვირაბის ბინარის გაშვება კონფიგურირებული არგუმენტებით
URL-ის ამოღებაstdout-ის პარსინგი საჯარო URL-ისთვის (startup_timeout_secs-ის ფარგლებში)
მონიტორინგიპერიოდული ჯანმრთელობის შემოწმება HTTP GET-ით საჯარო URL-ზე
გადატვირთვათუ max_failures თანმიმდევრული ჯანმრთელობის შემოწმება ვერ ხერხდება, შეჩერება და გადატვირთვა
გამორთვაSIGTERM-ის გაგზავნა, 5 წამის ლოდინი, შემდეგ SIGKILL თუ ჯერ კიდევ მუშაობს

გარემოს ცვლადები

გვირაბის კონფიგურაცია ასევე შეიძლება გარემოს ცვლადებით მითითდეს, რომლებიც config.toml-ზე უპირატესობას იღებს:

ცვლადიაღწერა
PRX_TUNNEL_BACKENDგვირაბის ბექენდის გადაფარვა
PRX_TUNNEL_LOCAL_ADDRლოკალური გადამისამართების მისამართის გადაფარვა
PRX_TUNNEL_URLგვირაბის გაშვების გამოტოვება და ამ URL-ის გამოყენება
CLOUDFLARE_TUNNEL_TOKENCloudflare გვირაბის ტოკენი
NGROK_AUTHTOKENngrok ავთენტიფიკაციის ტოკენი

PRX_TUNNEL_URL-ის მითითება სასარგებლოა, როდესაც უკვე გაქვთ რევერს პროქსი ან დატვირთვის ბალანსერი, რომელიც PRX-ს საჯაროდ გამოაქვეყნებს. გვირაბის ქვესისტემა პროცესის მართვას გამოტოვებს და მოწოდებულ URL-ს პირდაპირ გამოიყენებს.

უსაფრთხოების გათვალისწინებები

  • TLS შეწყვეტა -- ყველა მხარდაჭერილი ბექენდი TLS-ს პროვაიდერის ზღვარზე წყვეტს. ტრაფიკი პროვაიდერსა და თქვენს ლოკალურ PRX ინსტანციას შორის დაშიფრულ გვირაბზე მოძრაობს.
  • წვდომის კონტროლი -- Cloudflare და Tailscale მხარს უჭერს იდენტობაზე დაფუძნებულ წვდომის პოლიტიკებს. გამოიყენეთ ეს მგრძნობიარე აგენტის ენდფოინთების გამოქვეყნებისას.
  • სანდოობის მონაცემების შენახვა -- გვირაბის ტოკენები და ავთენტიფიკაციის გასაღებები PRX-ის საიდუმლოებების მენეჯერში ინახება. არასოდეს ჩაატანოთ ვერსიის კონტროლში.
  • პროცესის იზოლაცია -- TunnelProcess ცალკე შვილ პროცესად მუშაობს. ის არ იზიარებს მეხსიერებას PRX აგენტის გაშვების გარემოსთან.

პრობლემების მოგვარება

სიმპტომიმიზეზიგადაწყვეტა
გვირაბი იწყება, მაგრამ webhook-ები ვერ ხერხდებაURL არხის კონფიგურაციას არ გადაეცაშეამოწმეთ tunnel.public_url გამოიყენება არხის მიერ
გვირაბი განმეორებით გადაიტვირთებაჯანმრთელობის შემოწმება არასწორ ენდფოინთს ხვდებაშეამოწმეთ local_addr ემთხვევა გეითვეის მოსმენის მისამართს
"binary not found" შეცდომაგვირაბის CLI დაყენებული არ არისდააყენეთ შესაბამისი ბინარი (cloudflared, tailscale, ngrok)
URL-ის ამოღებისას ტაიმაუტიგვირაბის ბინარის გაშვებას ბევრი დრო სჭირდებაგაზარდეთ startup_timeout_secs

დაკავშირებული გვერდები

Released under the Apache-2.0 License.