Perbezaan Tailscale Serve vs Funnel: Mana Perlu Dipilih?
Ketahui perbezaan antara Tailscale Serve dan Funnel untuk akses rangkaian. Serve terhad kepada tailnet, manakala Funnel mendedahkan port anda kepada internet awam.
tailscale serve berbanding funnel: siapa yang boleh mencapai URL tersebut
Perbezaan antara tailscale serve dan tailscale funnel terletak pada khalayak sasaran, dan tiada perkara lain. serve meletakkan bahagian hadapan HTTPS (hypertext transfer protocol secure) pada port tempatan dan menerbitkannya kepada tailnet anda sahaja. funnel menerbitkan port tempatan yang sama kepada seluruh internet awam, melalui pelayan geganti yang dikendalikan oleh Tailscale. Kedua-dua arahan tersebut menggunakan flag dan sasaran yang sama. Satu perkataan sahaja yang membezakan antara papan pemuka peribadi dan papan pemuka yang boleh dicapai oleh dunia luar.
Kedua-duanya memberikan anda sijil yang sudah dipercayai oleh pelayar web, pada nama yang berakhir dengan ts.net, dan tiada satu pun yang memerlukan port masuk dibuka pada firewall VPS anda. Daemon tailscaled anda sudah mengekalkan sambungan keluar ke tailnet, jadi trafik sampai melalui sambungan tersebut. Menjadikan pelayan sebagai sebahagian daripada tailnet adalah satu tugas, dan menjalankan VPS sebagai exit node Tailscale atau mengiklankan subnet router untuk rangkaian peribadi meliputi skop tersebut. Menerbitkan servis yang sudah berada dalam tailnet adalah tugas yang ini.
Keperluan sebelum mana-mana arahan berfungsi
- Tailscale 1.38.3 atau lebih baharu pada VPS, yang telah dilog masuk ke tailnet anda. Semak dengan
tailscale versiondantailscale status. - MagicDNS diaktifkan. MagicDNS ialah sistem nama domain (DNS) terbina dalam Tailscale, dan ia memberikan mesin nama seperti
blog-vps.your-tailnet.ts.netdan bukannya sekadar alamat100.x. - Sijil HTTPS diaktifkan untuk tailnet, pada halaman DNS dalam konsol pentadbir. Tanpanya, tiada sijil yang boleh diletakkan di hadapan port anda.
- Khusus untuk
funnel, atribut nodfunneldalam fail polisi tailnet diperlukan. Di sinilah kebanyakan percubaan pertama gagal, dan ia diterangkan di bawah.
Setiap arahan di sini bermula dengan sudo, kerana CLI berkomunikasi dengan tailscaled melalui soket yang hanya boleh ditulis oleh root. Berikan hak kepada seorang pengguna untuk melangkau keperluan tersebut:
sudo tailscale set --operator=$USERTerbitkan ke tailnet anda dengan tailscale serve
Halakan serve ke port tempatan dan ia akan menguruskan selebihnya.
sudo tailscale serve 3000Available within your tailnet:
https://amelie-workstation.pango-lin.ts.net
|-- / proxy http://127.0.0.1:3000
Press Ctrl+C to exit.3000 kosong ialah singkatan bagi http://127.0.0.1:3000. Tailscale mendengar pada port 443 alamat tailnet mesin tersebut, menamatkan TLS (transport layer security) dengan sijil ts.net, dan memajukan HTTP biasa ke port tempatan anda. Aplikasi anda tidak perlu mengetahui kewujudan sijil tersebut, yang merupakan sebab utama untuk menggunakan kaedah ini bagi panel pentadbir yang sebaliknya dibiarkan menggunakan HTTP biasa.
Sekarang baca baris terakhir: Press Ctrl+C to exit. Perintah ini berjalan di latar depan, dan pemetaan tersebut wujud di dalam proses itu. Tutup terminal dan URL akan berhenti berfungsi, kerana tiada apa-apa yang ditulis ke cakera. Tambahkan --bg dan pemetaan tersebut akan dimasukkan ke dalam konfigurasi serve nod, yang akan kekal walaupun selepas terminal ditutup atau sistem but semula.
sudo tailscale serve --bg 3000Serve menerima lebih daripada sekadar nombor port. --set-path melekapkan servis di bawah subpath, supaya beberapa aplikasi boleh berkongsi satu hostname:
sudo tailscale serve --bg --set-path=/grafana 3000
sudo tailscale serve --bg --set-path=/metrics 9090Sasaran juga boleh berupa direktori fail statik, atau backend yang sudah menggunakan TLS dengan sijil yang anda tidak mahu diperiksa:
sudo tailscale serve --bg /srv/reports
sudo tailscale serve --bg https+insecure://localhost:8443Ia juga tidak terhad kepada HTTP sahaja. --tcp=<port> memajukan aliran TCP (transmission control protocol) mentah, dan --tls-terminated-tcp=<port> menamatkan TLS di nod anda lalu menghantar teks biasa (plaintext) tersebut, yang meletakkan sijil dipercayai di hadapan servis yang tidak menggunakan HTTP langsung:
sudo tailscale serve --bg --tls-terminated-tcp=443 tcp://127.0.0.1:9899Mengapakah funnel menyatakan atribut nod tidak ditetapkan?
Funnel dimatikan secara lalai untuk keseluruhan tailnet. Percubaan pertama akan memaparkan mesej ini dan berhenti:
Funnel not available; "funnel" node attribute not set. See https://tailscale.com/kb/1223/tailscale-funnel/.Perintah tersebut adalah betul. Dasar tailnet belum memberikan kebenaran kepada nod ini untuk menerbitkan, jadi klien menolak permintaan sebelum ia menghubungi relay. Edit fail dasar tailnet dalam konsol pentadbir, di bawah Access Controls, dan tambah atribut berikut:
"nodeAttrs": [
{
"target": ["autogroup:member"],
"attr": ["funnel"],
},
],autogroup:member memberikan kebenaran kepada setiap ahli tailnet. Jika hanya satu mesin yang dibenarkan untuk menerbitkan, tag mesin tersebut dan sasarkan tag itu, contohnya tag:public. Simpan dasar tersebut, kemudian jalankan semula perintah funnel.
Jika akaun anda ialah pentadbir tailnet, klien terkini menawarkan jalan pintas: CLI akan mencetak URL persetujuan pada login.tailscale.com, dan melayari URL tersebut akan mendayakan sijil HTTPS serta menambah atribut tersebut untuk anda. Jika anda bukan pentadbir, URL tersebut tidak akan membantu anda. Seseorang yang mempunyai akses dasar perlu melakukan suntingan tersebut.
Terbitkan ke internet dengan Tailscale Funnel
Setelah atribut ditetapkan, gunakan arahan yang anda sudah ketahui dengan kata kerja yang berbeza.
sudo tailscale funnel --bg 3000Available on the internet:
https://amelie-workstation.pango-lin.ts.net
|-- / proxy http://127.0.0.1:3000
Press Ctrl+C to exit.Baca baris pertama itu setiap kali. Available within your tailnet dan Available on the internet adalah satu-satunya perbezaan ketara antara servis peribadi dan servis awam, dan arahan yang menghasilkannya hanya berbeza pada satu perkataan.
Sehingga Ogos 2026, funnel hanya mendengar pada port 443, 8443 atau 10000, dan tiada port lain. Port lalai ialah 443, manakala --https=8443 atau --https=10000 adalah alternatifnya. Sebarang port lain akan ditolak kerana geganti funnel hanya menerima sambungan pada port tersebut. Itulah sebabnya URL funnel sentiasa berupa nama hos sahaja, atau nama hos dengan :8443 yang ditambah pada hujungnya.
Bagaimanakah cara untuk melihat perkara yang diterbitkan sekarang?
Meneka adalah punca papan pemuka kekal awam selama sebulan. Sebaliknya, tanya nod tersebut.
tailscale serve status
tailscale funnel status
tailscale serve status --jsonKedua-dua arahan status membaca konfigurasi yang sama, jadi mana-mana satu akan menunjukkan gambaran keseluruhan kepada anda. Gunakan bentuk --json di dalam skrip atau semakan berjadual, kerana output biasa ditulis untuk dibaca oleh manusia. Apabila tiada apa-apa yang dikonfigurasikan, anda akan mendapat satu baris:
No serve configMelihat perkara itu selepas persediaan yang anda tahu berfungsi bermakna pemetaan telah dibuat di latar depan dan proses tersebut telah tamat. Cipta semula dengan --bg.
Untuk membuang satu pemetaan, ulangi arahan yang menciptanya dan letakkan off di hujung. Untuk memadam setiap pemetaan serve dan funnel pada nod tersebut, gunakan reset.
sudo tailscale funnel --https=443 3000 off
sudo tailscale serve resetJalankan tailscale serve status sekali lagi selepas mana-mana arahan tersebut dan baca apa yang tinggal, daripada mengandaikan ia telah melakukan apa yang anda maksudkan.
Apa yang anda peroleh, dan apa yang anda korbankan
Kelebihannya adalah nyata, dan itulah sebabnya orang memilih kaedah ini berbanding reverse proxy.
- Sijil yang dipercayai oleh pelayar web, diperbaharui untuk anda. Tiada klien ACME (automatic certificate management environment) untuk dipasang, dan tiada tugasan pembaharuan yang perlu diingati.
- Tiada port masuk pada firewall VPS.
tailscaledmembuat sambungan keluar, jadi firewall ufw default-deny pada VPS anda boleh kekal ketat seperti asal. - Tiada rekod DNS untuk dibeli, dihalakan atau ditunggu.
- Tiada port forwarding, yang merupakan penyelesaian utama bagi mesin di sebalik NAT (network address translation) berbanding VPS dengan IP awam.
Kosnya juga sama nyata, dan funnel menanggung kesemuanya.
- Nama tersebut bukan milik anda. Pelawat awam melihat
host.your-tailnet.ts.net. Funnel tidak menyokong domain tersuai, jadi anda tidak boleh meletakkanapp.example.comdi hadapannya. - Laluan tersebut bukan milik anda. Trafik sampai ke relay Tailscale terlebih dahulu, dan relay tersebut memproksi aliran ke nod anda melalui tailnet. Tailscale menyatakan bahawa trafik funnel tertakluk kepada had lebar jalur yang tidak diterbitkan dan tidak boleh dikonfigurasikan, jadi ukur throughput anda sendiri sebelum bergantung pada sesuatu angka.
- Kawalan tidak tersedia. Reverse proxy yang anda jalankan memberikan anda access log, had kadar (rate limits), had saiz permintaan dan tempat untuk meletakkan pengesahan. Funnel hanya memberikan anda URL. Segala perkara lain perlu berada di dalam aplikasi anda.
- Senarai port adalah tetap, seperti di atas.
Kedua-dua ciri ini juga bergantung pada infrastruktur yang dikendalikan oleh Tailscale: pengeluaran sijil untuk nama ts.net, dan relay funnel itu sendiri. Jika anda sedang mempertimbangkan pelayan kawalan Headscale yang dihoskan sendiri, jangan anggap kedua-duanya akan disertakan bersama. Semak nota keluaran untuk versi Headscale yang anda rancang untuk jalankan.
Yang mana satu patut saya gunakan?
Peraturannya ringkas.
Gunakan serve untuk sebarang perkara dalaman: antara muka pentadbir, papan pemuka, UI metrik yang anda tidak mahu diindeks, atau salinan staging bagi sesuatu laman. Keahlian dalam tailnet merupakan kawalan akses, dan ia adalah kawalan yang baik. Peranti yang tidak berada dalam tailnet tidak dapat menyelesaikan nama tersebut.
Gunakan funnel untuk pautan demo, penerima webhook yang perlu menerima POST daripada pihak ketiga, atau callback OAuth semasa pembangunan. Ini adalah laluan terpantas untuk mendapatkan URL HTTPS awam, dan satu arahan off akan menamatkannya. Walau bagaimanapun, awam bermaksud awam: nama hos bukanlah rahsia, dan funnel di hadapan aplikasi tanpa log masuk adalah servis terbuka. Apa sahaja yang berada di belakangnya mesti mengesahkan permintaannya sendiri, dengan tahap berhati-hati yang sama seperti endpoint API Ollama yang terdedah.
Gunakan reverse proxy sebenar untuk apa sahaja yang anda klasifikasikan sebagai pengeluaran (production). Domain anda, sijil anda, log anda, had kadar (rate limit) anda, dan tiada pihak lain dalam laluan permintaan. Membandingkan nginx, Caddy dan Traefik sebagai reverse proxy merangkumi cara pemilihan salah satu daripadanya.
Mod kegagalan, berserta rentetan yang akan anda lihat
Funnel enggan bermula. Funnel not available; "funnel" node attribute not set. ialah masalah polisi, bukan masalah arahan. Tambahkan atribut funnel pada fail polisi tailnet, simpan fail tersebut, dan cuba semula.
Ia berjaya, dan kini tailscale serve status menyatakan No serve config. Pemetaan telah dibuat di latar depan dan proses tersebut telah tamat. Jalankan semula arahan yang sama dengan --bg.
Nama dapat diselesaikan tetapi tiada respons. Serve melakukan proksi ke sasaran yang anda namakan, jadi jika tiada apa-apa yang mendengar di sana, tiada tempat untuk diproksikan. Sahkan dengan ss -ltnp | grep 3000 pada mesin yang sama yang menjalankan tailscaled. Punca yang kerap berlaku ialah kontena menerbitkan portnya pada alamat bridge Docker dan bukannya 127.0.0.1, yang bermaksud hos tidak melihat pendengar di tempat yang anda jangkakan. Cara rangkaian Docker Compose berfungsi menunjukkan tempat port yang diterbitkan sebenarnya berada.
Ralat sijil pada nama ts.net. Sijil HTTPS berkemungkinan besar tidak didayakan untuk tailnet. Hidupkannya dalam konsol pentadbir, kemudian jalankan langkah sijil secara berasingan supaya ralatnya tidak bercampur dengan output serve:
sudo tailscale cert your-host.your-tailnet.ts.netFunnel dimuatkan pada data mudah alih tetapi berkelakuan berbeza daripada komputer riba anda. Komputer riba anda berada dalam tailnet, jadi MagicDNS menyelesaikan nama tersebut kepada alamat 100.x dan anda mencapai servis secara terus, tanpa menyentuh relay. Itu adalah kelakuan yang betul, dan ia bermakna komputer riba anda tidak boleh menguji kebolehcapaian awam sama sekali. Gunakan curl daripada mesin yang tidak berada dalam tailnet.
FAQ
Apakah perbezaan antara tailscale serve dan tailscale funnel?
Siapa yang boleh mencapai hasil tersebut. tailscale serve menerbitkan port tempatan pada URL HTTPS yang hanya boleh dicapai oleh peranti dalam tailnet anda. tailscale funnel menerbitkan port yang sama pada URL yang boleh dicapai oleh sesiapa sahaja di internet, dihalakan melalui pelayan geganti (relay servers) yang dikendalikan oleh Tailscale. Flag dan sasaran dikongsi antara kedua-duanya. Baris output pertama memberitahu anda yang mana satu yang anda peroleh: Available within your tailnet atau Available on the internet.
Mengapakah tailscale funnel menyatakan atribut nod tidak ditetapkan?
Kerana funnel dinyahdayakan untuk sesebuah tailnet sehingga seseorang mendayakannya. Mesej tersebut ialah Funnel not available; "funnel" node attribute not set. dan ia datang daripada klien anda sendiri, sebelum sebarang geganti dihubungi. Tambahkan entri nodeAttrs yang memberikan atribut funnel kepada autogroup:member, atau kepada tag jika hanya satu mesin yang perlu menerbitkan, dalam fail polisi tailnet di bawah Access Controls. Pentadbir tailnet sebaliknya boleh mengikuti URL persetujuan yang dicetak oleh CLI.
Port manakah yang boleh digunakan oleh Tailscale Funnel?
Hanya 443, 8443 dan 10000. Lalai ialah 443, dan anda boleh memilih yang lain dengan --https=8443 atau --https=10000. Ini adalah had geganti funnel, bukan had pelayan anda, jadi tiada perubahan firewall atau perubahan konfigurasi pada VPS yang boleh mengatasinya. tailscale serve tidak mempunyai sekatan sedemikian kerana ia tidak pernah keluar daripada tailnet anda.
Adakah URL serve atau funnel kekal selepas but semula?
Hanya jika anda menggunakan --bg. Tanpanya, arahan berjalan di latar depan, mencetak Press Ctrl+C to exit., dan pemetaan hilang bersama-sama proses tersebut. Dengan --bg, pemetaan ditulis ke dalam konfigurasi serve nod dan kembali dengan tailscaled selepas but semula. Semak dengan tailscale serve status, yang mencetak No serve config apabila tiada apa-apa yang ditetapkan.
Adakah selamat untuk membiarkan funnel berjalan?
Ia selamat dari segi pengangkutan: sambungan adalah HTTPS dan tiada port dibuka pada firewall anda. Ia tidak selamat dari segi maksud umum, kerana URL tersebut adalah awam, jadi aplikasi di sebaliknya adalah awam. Biarkan funnel berjalan hanya di hadapan sesuatu yang mengesahkan permintaannya sendiri, dan matikan apabila demo atau ujian webhook selesai, menggunakan arahan yang menciptanya dengan off pada penghujungnya.
Sumber untuk kelakuan arahan di atas: dokumentasi Tailscale Serve dan Funnel serta rujukan CLI di tailscale.com/docs.