Tailscale Serve lwn Funnel: siapa sebenarnya boleh membuka pautan itu?
Serve berkongsi perkhidmatan dengan tailnet anda, manakala Funnel mendedahkannya ke internet terbuka. Bandingkan audiens, pengepala identiti dan port yang dibenarkan oleh Funnel.
Kedua-dua arahan menerbitkan perkhidmatan tempatan melalui nama HTTPS Tailscale, dan dari mesin yang menjalankannya kedua-duanya kelihatan hampir serupa. Perbezaannya ialah siapa yang boleh mencapai URL itu selepas itu, dan perbezaan itu menentukan kawalan yang masih diperlukan oleh aplikasi anda. Serve mengekalkan audiens di dalam tailnet, manakala Funnel memindahkannya ke internet terbuka. Pilih audiens dahulu, kemudian pilih arahan yang sepadan dengannya.
Serve menjawab soalan di dalam tailnet anda
Serve memproksi port tempatan atau menyajikan kandungan tempatan kepada peranti dalam tailnet anda, dan peraturan akses tailnet masih terpakai pada setiap permintaan. Papan pemuka pada port 3000 menjadi boleh dicapai pada nama HTTPS yang hanya peranti anda boleh selesaikan dan sambungkan. Ini ialah lalai yang betul untuk alat dalaman, kerana audiens sudah disahkan oleh tailnet dan anda tidak menambah permukaan awam. URL kelihatan seperti laman web biasa, dan itulah sebabnya orang menyangkanya begitu.
Serve juga boleh melampirkan pengepala identiti yang menerangkan pengguna tailnet pada permintaan yang dihantarnya. Jika aplikasi anda mempercayai pengepala itu sebagai pengesahan, ikat backend pada localhost supaya tiada apa-apa lagi boleh mencapainya secara langsung; backend yang mendengar pada alamat boleh laluan boleh menerima permintaan yang tidak pernah melalui proksi.
Funnel menukar audiens kepada internet terbuka
Funnel menerbitkan perkhidmatan terpilih kepada sesiapa yang mempunyai URL itu, dan pelawat tidak memerlukan klien, akaun atau keahlian dalam tailnet anda. Oleh itu sumber itu memerlukan pengesahan, had kadar dan tampalan yang anda akan gunakan pada mana-mana perkhidmatan awam. Permintaan awam tidak membawa pengepala identiti tailnet Serve, jadi aplikasi yang bergantung padanya tidak mempunyai identiti pengguna sama sekali di bawah Funnel. Memilih arahan penerbitan yang berbeza tidak menjawab soalan pengesahan bagi pihak anda.
Funnel juga mempunyai kekangan yang mungkin tidak disebut oleh tutorial daripada keluaran lama. Ia menamatkan TLS dengan sijil yang diperoleh Tailscale untuk nama itu, dan ia hanya menyokong port mendengar tertentu, seperti yang diterangkan oleh dokumentasi Funnel. Jika perkhidmatan anda menjangkakan protokol selain HTTPS pada salah satu port itu, Funnel ialah alat yang salah dan bukan teka-teki konfigurasi.
Baca mod daripada klien, bukan daripada port
Semak keadaan semasa sebelum berkongsi apa-apa, kerana kedua-dua mod boleh dikonfigurasikan untuk port tempatan yang sama pada masa yang berbeza. Arahan status melaporkan apa yang sebenarnya diterbitkan dan kepada siapa. Jangan simpulkan audiens daripada fakta bahawa URL memberi respons.
tailscale serve status
tailscale funnel status
tailscale status --json | head -40
Sintaks arahan telah berubah merentas versi klien, jadi panggilan yang disalin mungkin memilih mod berbeza daripada yang anda maksudkan. Utamakan bentuk yang didokumenkan untuk versi yang anda jalankan, dan baca pengesahan yang dicetak oleh klien dan bukan menganggapnya. Jika konfigurasi Serve dan Funnel kedua-duanya wujud, yang awam ialah yang penting untuk pendedahan. Tetapkan semula konfigurasi yang tidak anda maksudkan dan bukan melapisi satu lagi di atasnya.
Berhenti dan baca semula status jika output tidak menamakan audiens. URL yang diterbitkan tanpa audiens yang dinyatakan ialah tekaan, dan tekaan ialah cara papan pemuka dalaman berakhir di internet terbuka.
Uji dengan audiens yang sebenarnya anda maksudkan
Uji dari luar tailnet, bukan dari mesin yang menerbitkan perkhidmatan. Permintaan daripada peranti tailnet membuktikan proksi berfungsi; ia tidak membuktikan bahawa orang luar dikecualikan. Gunakan rangkaian yang tiada klien Tailscale dan tiada laluan ke tailnet.
curl -sI https://host.tailnet-name.ts.net
curl -sI https://host.tailnet-name.ts.net --resolve host.tailnet-name.ts.net:443:203.0.113.10
Untuk papan pemuka dalaman, permintaan luar sepatutnya gagal bersambung atau gagal kebenaran, dan permintaan dalam sepatutnya berjaya dengan identiti yang anda jangkakan. Untuk perkhidmatan awam, permintaan luar sepatutnya berjaya dan aplikasi sepatutnya meminta kelayakan sendiri. Catat yang mana antara dua hasil itu yang anda perhatikan, kerana URL sahaja tidak memberitahu anda. Jika hasilnya bertentangan dengan niat, buang konfigurasi awam dahulu dan siasat selepas itu.
Menerbitkan perkhidmatan juga bukan keputusan yang sama seperti memilih nod keluar, yang mengawal dari mana trafik keluar anda meninggalkan rangkaian. Serve dan Funnel menjawab siapa yang boleh mencapai sesuatu yang anda jalankan; nod keluar menjawab dari mana sambungan anda sendiri kelihatan datang. Asingkan kedua-dua soalan itu dan perbandingan kekal mudah.