
Tailscaleã§ãªã³ãã¬ãµãŒããŒãå¿åå ¬é ïœãªããŒã¹ãããã·ã§èªå® ãµãŒããŒãIPéå ¬éã§éå¶ SSLèšŒææžãäžèŠ!?ïœ
ããã«ã¡ã¯Rcatã§ãã
èªå®
ã®ãµãŒããŒãããŸãå
ጋnj
¬éã§ããªãããªããšèããŠãã仿¥ã®ãã®ãããTailscaleãšãããã®ãèŠã€ããŸããã®ã§å®éã«äœ¿ã£ãŠã¿ãããšæããŸãã

ã¯ããã«
å©çšèŠçŽ
æ å ±ãäœåã®æŽ»çšæã¯äºåã«å©çšèŠçŽãã確èªãã ããã
ã³ã¡ã³ãã«ã€ããŠ
å©çšèŠçŽã®ã¬ã€ãã©ã€ã³ã確èªã®äžã³ã¡ã³ãããŠãã ããã
åã£ãŠããªãã³ã¡ã³ãã¯åé€ããŸãã
æŠèŠ
Tailscaleãšã¯
VPNãµãŒãã¹ã®ããã§ãã
ã§ããæ§ã
ãªæ©èœãããã身å
ã ãã§ã€ãªããããããã¯ãŒã¯ãäœãã ãã§ãªããhttpsã®ãªããŒã¹ãããã·ãšããŠã䜿ããŠããŸããããã
ãšããããã§äžèšæ§æã§ãªã³ãã¬ãµãŒããŒãIPã¢ãã¬ã¹éå
¬éãã€ããŒãéæŸç¡ããã€SSLèšŒææžãªãã®ç¶æ
ã§å
¬éã§ãããç¥ãã
Tailscale(HTTPSãªããŒã¹ãããã·)
âVPN
ãªã³ãã¬PC
âDocker
WEBãµãŒããŒ
ãšãããã詊ããŠã¿ã
泚æäºé
ããã§ç޹ä»ããå
容ã¯ãRcatã詊è¡é¯èª€ãããŸããã£ãçµæã§ãã
ããããããèŠããªãæé ãå«ãŸããå¯èœæ§ããããŸãã
ããŸããããªããŠã質åã¯åããããŸããã
ã¢ã«ãŠã³ãèšå®
ã¢ã«ãŠã³ãäœæ
ãŸãã¯å
¬åŒããã¢ã«ãŠã³ããäœããŸãã
Googleã¢ã«ãŠã³ãã§äœããã£ãœãã®ã§ãµã¯ãµã¯ã§ã
ãªããChromeã®æ¥æ¬èªã«ç¿»è𳿩èœã¯äœ¿çšããŠã¯ãããŸããã
éžæè¢ãæ¥æ¬èªã«ãªã£ãç¶æ
ã§æäœãããšãšã©ãŒã«ãªã£ãŠå
¥åãããŒã«ãªããŸãã
Access controlsã®ç·šé
å
ã«å
¬éãšã¿ã°ã®èšå®ãããŠããŸããŸã
JSONã®æ¹ã«åãæ¿ããŠãã ãã

ãããªæãã®ãšãããããã®ã§ã³ã¡ã³ããè§£é€ããŠtag:<奜ããªå€>ã«ããŸãã
// Define the tags which can be applied to devices and by which users.
"tagOwners": {
"tag:server": ["autogroup:admin"],
},å°ãäžã«ãããªãšãããããã®ã§ãããã©ã«ããè€è£œããŠäœã£ãã¿ã°ã®ååã§è¿œå ããŸã
"nodeAttrs": [
{
// Funnel policy, which lets tailnet members control Funnel
// for their own devices.
// Learn more at https://tailscale.com/kb/1223/tailscale-funnel/
"target": ["autogroup:member"],
"attr": ["funnel"],
},
{
"target": ["tag:server"],
"attr": ["funnel"],
},
],ããŒã®çºè¡
ç»é²åŸãã³ãã³ãã ãšç°¡åã«ç«¯æ«ç»é²ã§ãããããã®ã§ãããä»åã¯Dockerãªã®ã§ãèªèšŒããŒãçºè¡ããŸãã
èšå® => å人èšå® => Keys
æ°èŠäœæããåå©çšå¯èœã¯ã奜ãã«ãã§ãã¯ã
äžçªäžã®ã¿ã°ã®ãšããã§ãã£ãäœã£ãã¿ã°ãå²ãåœãŠã
ãããããããšã§æå¹æéãç¡æéã«ãªãããã


ããŒãã³ããŒãããããã§èšå®ã¯çµããã
ç°å¢æ§ç¯
ãšããããã§ããšãããã詊ããŸãã
ãµã³ãããã¯ã¹çãªæãã§Dockerã䜿ããŸãã
ãã§ã«ã€ã¡ãŒãžã¯ãããããªã®ã§äœ¿ãããŠããããŸã
ãŸãã¯ãã«
docker pull tailscale/tailscale:stableããŒã¿ã®æ§æã¯ãããªæã
é ã«èª¬æããŸã

docker-composeã®èšå®ãã¡ã€ã«
ããŒã¿çšã«tailscale-dataãã©ã«ããçšæããŠãã ããã空ã§OK

ååã¯äžã®appã»ã¯ã·ã§ã³ã¯ãªããŠOKã§ãã
ããã¯åæã«WEBãµãŒããŒãã³ã³ããã«ããŸããšããèšå®ãªã®ã§âŠ
ã¡ãªã¿ã«ãã¡ãã§é
åžããŠãããã®ããã®ãŸãŸãããã€ããŠãŸãã
ãã®ãŸãŸã ãšç«ã¡äžãããªãã®ã§å°ãæãå
¥ããŠãŸããâŠããã®èšäºã®åŸã«æŽæ°ããŸããã
æžãæããã®ã¯ãã¹ãåãšããŒã§ãã
ãã¹ãåã¯ãã¶ãèªç±ãããŒã¯å
ã»ã©ã®ãã³ããããããªäººã¯.enväœãã
config/funnel.json
WEBãšããŠå€éšã«å
¬éããèšå®ã§ãã
ãªãããã¹ãå+ãã¡ã€ã³ã®ããšã¯äžåºŠãã·ã³ãç»é²ãããªããšåºãŠããªãã®ã§çŸæç¹ã§ã¯æžããŸããã
ãã¡ã€ã«ãèªããªããšå
¬éç¶æ
ã«ãªããªãã ããªã®ã§ããŸãã¯ç©ºã«ããŠãç»é²ã§ãããèšå
¥ããŸãããã
å Žæã¯ãã·ã³è©³çްã®"Full domain"ã®éšåã§ãã

ã§ããããã€ãã®ãããããŠã³ã³ãããäœæ&Run
docker compose up -d --buildå®äºåŸã管çç»é¢ã®ããã€ã¹ã確èªããŠããã°OK

ããŸãæ©åšãç»é²ãããå Žåãfunnelã®èšå®ã«fulldomainãæžã蟌ãã§åèµ·åããã°å
¬éãããã¯ãã
å®éã¯çŸœéœæ²æãã£ãã®ã§ãã®æé ã§ã¯ãªãã§ãã倧äœã¯ãã£ãŠãã¯ãã
WEBãµãŒããŒãšé£æºããŠå ¬éããŠã¿ã
docker composeã®äžã«ãã£ãappã®ã»ã¯ã·ã§ã³ã§ãã
ä»åã¯ä»®ã«èªäœã®Flaskãã³ãã¬ãŒããå ¬éããŠã¿ãŸããã©ãã誰ãã¿ãªããã
Dockerfile
Pythonãªã®ã§ãã€ã¡ãŒãžã¯Pythonãã©ã€ãã©ãªãå
¥ããŠèµ·åããã ãã
ä»åã¯HTTPSã®443ããæ¥ããã®ãHTTPã®8000ããŒãã«è»¢éãããšããèšå®ãªã®ã§ããã€ã³ãã¯8000ã«ããŸãã

ãã®ç¶æ ã§åèµ·å(èŠãã«ã)ãæãããšãTailscaleçµç±ã§å€ããã¢ã¯ã»ã¹ãã§ããŸãã
ã¡ãªã¿ã«ã¢ãã¬ã¹ã¯ã³ããŒããfulldomainã«ãªããŸãã
ãããªæãã§ããæ¬åœã«å
¬éããã¡ãããŸããâŠw

ããŸãå ¬éãããªããšã
äžèšã³ãã³ãã§å
¬éãããŠãããèŠãŸããã
äžèšã®ããã«åºãŠããã°å
¬éäžã§ããèŠåãåºãŠããããã€ã³ãã©ãããOnlyã ãšå
¬éãããŠããŸããã
$ docker compose exec tailscale tailscale funnel status
# Funnel on:
# - https://rcat-xxxxxxxxxxx.ts.net
https://rcat-xxxxxxxxxxxx.ts.net (Funnel on)
|-- / proxy http://127.0.0.1:8000
ãŸãšã
ä»åã¯VPNã§WEBãµãŒããŒãå
¬éã§ããTailscaleã詊ããŠã¿ãŸããã
ç¡æã§ãããã§ããã®ã¯ãããã§ããã
ããç¡æã®VPSè§£çŽãããããªw
é
åžã·ã¹ãã ããªã³ãã¬åŠçãã§ããã°å¹
ãåºãããã(å¯çšæ§ã¯äžããã)
ãšããããã§ã¡ãã£ãšã¢ã€ãã£ã¢ãããã®ã§ãã¡ã³ããŒã·ããã®ããŸããšãã圢ã§äžåãµãŒããŒç«ãŠãŠã¿ãããšæããŸãã
æ¥æãç¶ç¶ããã°æ¥ã®ç®èŠããã?
ã§ã¯ãŸããäŒãããŸããã
ãªã³ã¯é
ææ³æçš¿ãã©ãŒã
ã³ã¡ã³ãã¯å ¬éã§æ¥ãããã!! Rcatã ãã«éããã人åã