ããããFlyã¯ãä»ã®åæ§ã®ãã©ãããã©ãŒã ã®äžã§ããäžçš®ã®é»ãçŸã®ãããªãã®ã§ããåœç€Ÿã®ããŒããŠã§ã¢ã¯ãäžçäžã«ç¹åšããããŒã¿ã»ã³ã¿ãŒã§æ©èœããŸããåœç€Ÿã®ãµãŒããŒã¯ãšããŒãã£ã¹ããããã¯ãŒã¯ãä»ããŠã€ã³ã¿ãŒãããã«æ¥ç¶ãããŠãããWireGuardãããã¯ãŒã¯ã䜿çšããŠçžäºã«æ¥ç¶ãããŠããŸãããŠãŒã¶ãŒããDockerã³ã³ãããŒãååŸããFirecrackerãã€ã¯ãããŒãã£ã«ã«å€æããŸãããããŠãç§ãã¡ãæåã«å§ãããšããç§ãã¡ã¯ã客æ§ã«ããšããžã¢ããªã±ãŒã·ã§ã³ããå®è¡ããèœåãäžããããã«ãŸãã«ãããè¡ããŸããããããã®ã¢ããªã±ãŒã·ã§ã³ã¯éåžžããããã¯ãŒã¯ããã©ãŒãã³ã¹ã«éåžžã«ææãªãæ¯èŒçå°ããªèªå·±å®çµåã®ã³ãŒãã§ãããã®çµæããããã®ã³ãŒãã¹ããããã¯ããŠãŒã¶ãŒã®ã§ããã ãè¿ãã«ãããµãŒããŒã§å®è¡ããå¿ èŠããããŸãããã®ãããªç°å¢ã§ã¯ãSSHçµç±ã§ãµãŒããŒã«æ¥ç¶ããæ©èœã¯ããã»ã©éèŠã§ã¯ãããŸããã
ãããçŸåšããã¹ãŠã®ã¯ã©ã€ã¢ã³ãããã®ããã«Flyã䜿çšããŠããããã§ã¯ãããŸãããçŸåšãFlyç°å¢ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã«é¢é£ãããã¹ãŠã®ã³ãŒããç°¡åã«å®è¡ã§ããŸããã¯ã©ã¹ã¿ãŒç°å¢ã§ãµãŒãã¹ã®ã¢ã³ãµã³ãã«ãéå§ããæé ãç°¡ç¥åã ãŸããããã®ãããªãµãŒãã¹ã¯ãå®å šãªéä¿¡ãã£ãã«ã䜿çšã㊠çžäºã«å¯Ÿè©±ãã ããŒã¿ãæ°žç¶çã«ä¿åããWireGuardãããã¯ãŒã¯ãä»ããŠãªãã¬ãŒã¿ãŒãšéä¿¡ããããšãã§ããŸããç§ãåã粟ç¥ã§ç§ãã¡ã®ã·ã¹ãã ã«ã€ããŠã®è©±ãç¶ãããªãã°ãç§ã¯é廿°ã¶æã«ããã£ãŠç§ãã¡ãæžãããã¹ãŠã®è³æãžã®ãªã³ã¯ãæäŸããªããã°ãªããŸããã
ãã ãããããã®å Žåããéåžžã®SSHãµããŒãã¯ãããŸããã§ããã
ãã¡ãããSSHçµç±ã§æ¥ç¶ã§ããSSHãµãŒãã¹ã䜿çšããŠã³ã³ãããŒãäœæããã ãã§ããããšã¯æããã§ããFlyãã©ãããã©ãŒã ã¯ãäžè¬çãªTCPããŒãïŒããã³UDPããŒããïŒã§ã®äœæ¥ããµããŒãã ãŸããã¯ã©ã€ã¢ã³ãããã¡ã€ã«ã䜿çšããŠ
fly.toml
ããšããŒãã£ã¹ããããã¯ãŒã¯ã«å¥åŠãªSSHããŒãã«ã€ããŠãéç¥ããããšãã·ã¹ãã ã¯SSHæ¥ç¶ã®ã«ãŒãã£ã³ã°ãæŽçãããã®åŸã¯ãã¹ãŠãæ£åžžã«æ©èœããŸã ã
ããããã³ã³ãããäœæãã人ã¯éåžžãããè¡ããŸããããŸããããããããšããå§ãããŸããããã®çµæãFlyã«SSHãµããŒããè£ åããŸãããç§ãã¡ããã£ãããšã¯ãããªãå€ãã£ãæ¹æ³ã§æŽçãããŠããŸãããã®èšäºã¯2ã€ã®ããŒãã§æ§æãããŠãããããã«ã€ããŠèª¬æããŸãã
ããŒã1ïŒ6PNãšããŒã«ãã¹
ãããã æžããFlyã§ãã©ã€ããŒããããã¯ãŒã¯ãã©ã®ããã«é 眮ãããŠãããã«ã€ããŠãäžèšã§èšãã°ãç§ãã¡ãæã£ãŠãããã®ã¯ããä»®æ³ãã©ã€ããŒãã¯ã©ãŠããGCPãŸãã¯AWSã®åçŽåãããIPv6ããŒãžã§ã³ãšæ¯èŒã§ããããšãããããŸãããã®ã·ã¹ãã ã6PNãšåŒã³ãŸãã Flyã§ã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ã¿ã³ã¹ïŒFirecrackerãã€ã¯ãä»®æ³ãã·ã³ïŒãèµ·åãããšããã®ã€ã³ã¹ã¿ã³ã¹ã«ç¹å¥ãªIPv6ãã¬ãã£ãã¯ã¹ãå²ãåœãŠãããŸãããã¬ãã£ãã¯ã¹ã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®èå¥åãã¢ããªã±ãŒã·ã§ã³ãææããçµç¹ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããŠããããŒããŠã§ã¢ãªãœãŒã¹ãªã©ãããã€ãã®èå¥åããšã³ã³ãŒããããŠããŸããå°ãã®eBPFã³ãŒãã䜿çšããŠããã®ãããªIPv6ãã±ãããå éšWireGuardãããã¯ãŒã¯ã«éçã«ã«ãŒãã£ã³ã°ããã¯ã©ã€ã¢ã³ããé¢äžããŠããªãçµç¹ã®ã·ã¹ãã ã«æ¥ç¶ã§ããªãããã«ããŸãã
WireGuardã䜿çšããŠãäœæãããã©ã€ããŒãIPv6ãããã¯ãŒã¯ãä»ã®ãããã¯ãŒã¯ãšããªããžããããšãã§ããŸããç§ãã¡ã®APIãäœæããããšãã§ããŸã WireGuardæ§æã®ããã®EC2ã®ãã¹ãäžã§ãäŸãã°ã䜿çšããããšãã§ããŸãRDS Postgresã®ãããã·ã ããŸãã¯ãå¿ èŠã«å¿ããŠãWireGuardã¯ã©ã€ã¢ã³ãïŒWindowsãLinuxããŸãã¯macOSïŒã䜿çšããŠãéçºçšã³ã³ãã¥ãŒã¿ãŒãç¬èªã®ãã©ã€ããŒããããã¯ãŒã¯ã«æ¥ç¶ã§ããŸãã
ããªãã¯ããããç§ãäœãããŠããã®ããã§ã«ç¥ã£ãŠããã§ãããã Goã§HallpassãšåŒã°ãã
éåžžã«å°ãããŠéåžžã«åçŽãª SSHãµãŒããŒãäœæããŸããã Goã©ã€ãã©ãªã䜿çšããŠäœæããããHelloãWorldïŒããšæ¯èŒã§ããŸãã
x/crypto/ssh
..ã ïŒãããããäžåºŠè¡ããšãSSHãµãŒããŒã®æ§ç¯ã«Glider Labsããã±ãŒãžã䜿çšããå¯èœæ§ããã ãŸãããã®ããã±ãŒãžã䜿çšãããšããµãŒããŒã¯æåéããHelloãWorldïŒã ã«ãªããŸããFirecrackerãã€ã¯ãä»®æ³ãã·ã³ã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã®åæåãå®è¡ãããHallpassã¯6PNã¢ãã¬ã¹ã«ãã€ã³ãããŠèµ·åããŸããã
çµç¹ã®6PNãããã¯ãŒã¯ã§ïŒããšãã°ãWireGuardæ¥ç¶ãä»ããŠïŒæäœã§ããå Žåã¯ãHallpassã䜿çšããŠãã€ã¯ãä»®æ³ã€ã³ã¹ã¿ã³ã¹ã«ãã°ã€ã³ã§ããããšãæå³ããŸãã
Hallpassãã©ã®ããã«æ©èœãããã«ã€ããŠã®è峿·±ã詳现ã¯1ã€ã ãã§ããèªèšŒã«ã€ããŠã§ããéåžžãæ¬çªãããã¯ãŒã¯ã®ã€ã³ãã©ã¹ãã©ã¯ãã£èŠçŽ ã¯ãAPIãŸãã¯ãã®åºç€ãšãªãããŒã¿ããŒã¹ã«çŽæ¥ã¢ã¯ã»ã¹ã§ããŸããããã¡ãããFirecrackerã®ã€ã³ã¹ã¿ã³ã¹èªäœã«ããã®ã¢ã¯ã»ã¹æš©ã¯ãããŸãããããã«ãããéä¿¡èšå®ã®å€æŽã«é¢é£ããããã€ãã®åé¡ãçºçããŸããããšãã°ããã€ã¯ãä»®æ³ãã·ã³ã®ç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ã«æ¥ç¶ããããã«å¿ èŠãªããŒã®çš®é¡ã®è³ªåã«ã©ã®ããã«çããããšãã§ããŸããïŒ
SSHã¯ã©ã€ã¢ã³ãèšŒææžã䜿çšããããšã§ããã®åé¡ã®åé¿çãèŠã€ããŸããããŠãŒã¶ãŒãæ°ãããã¹ããããã°ã€ã³ãããã³ã«ããŒãæž¡ãå¿ èŠã¯ãªãããã®ãŠãŒã¶ãŒãæŽçããããã®ã«ãŒãèšŒææžãäœæããŸãããã®ã«ãŒãèšŒææžã®å ¬ééµã¯ãã©ã€ããŒãDNSã·ã¹ãã ã§ãã¹ããããŠãããHallpassã¯ãã°ã€ã³ã詊è¡ããããã³ã«DNSã«æ¥ç¶ããŠãã®èšŒææžãååŸããŸãã APIã¯ãŠãŒã¶ãŒã®æ°ããèšŒææžã«çœ²åããŸãããããã®èšŒææžã¯ãã·ã¹ãã ãžã®ãµã€ã³ã€ã³ã«äœ¿çšã§ããŸãã
ãã®ãœãªã¥ãŒã·ã§ã³ã«ã€ããŠè³ªåããããããããŸããããããã£ãŠãç§ã¯åœŒã«ã€ããŠããå°ã詳现ãæããã«ããŸãã
ãŸããèšŒææžã«ã€ããŠèª¬æããŸããããX.509ããããã¹ã®æ°å幎 ããšããèšèãããªãã«äžå¿«ãªåŸå³ãäžããåå ãšãªã£ãå¯èœæ§ããããŸãããããŠãç§ã¯ããã«ã€ããŠããªãã責ããŸããããã ããSSHæ¥ç¶ãæŽçãããšãã¯èšŒææžã䜿çšããå¿ èŠããããŸãããã®å Žåããã®ãããªèšŒææžã¯åªãããœãªã¥ãŒã·ã§ã³ã§ããããã§ãããã ããSSHèšŒææžã¯X.509èšŒææžã§ã¯ãããŸãããç¬èªã®OpenSSH圢åŒã䜿çšã㊠ãããäžè¬ã«ããããã®èšŒææžã«ã€ããŠç¹å¥ãªããšã¯äœãèšããŸãããä»ã®ãã¹ãŠã®èšŒææžãšåæ§ã«ããæå¹æéãããããããã«ãããæå¹æéã®çãããŒãäœæã§ããŸãïŒããã¯ã ã»ãšãã©ã®å ŽåãããŸãã«ããªããå¿ èŠãªãã®ïŒããã¡ããããµãŒããŒã®ã°ã«ãŒãå šäœã«1ã€ã®å ¬ééµãå²ãåœãŠãããšãã§ããä»»æã®æ°ã®ç§å¯éµãæ¿èªã§ããŸãã察å¿ãããµãŒããŒãåžžã«æŽæ°ããå¿ èŠã¯ãããŸããã
次ã¯ãAPIãšèšŒææžã®çœ²åã§ããäžæïŒçްå¿ã®æ³šæãæã£ãŠããŸããããããã®èšŒææžã¯éåžžãFlyã¢ã¯ã»ã¹ããŒã¯ã³ãšåããããå®å šã§ããçŸæç¹ã§ã¯ãããŒã¯ã³ã䜿çšãããšæ°ããããŒãžã§ã³ã®ã¢ããªã±ãŒã·ã§ã³ã³ã³ãããå±éã§ãããããèšŒææžãããŒã¯ã³ãããé©åã«ä¿è·ããããšã¯ã§ããŸããã Web PKI X.509 CAã®æäœã«ã¯ãå€ãã®æç¶ããå¿ èŠã§ããç§ãã¡ã¯ããããªãã§è¡ããŸãã
ãããŠæåŸã«ãDNSã§ãã圌女ã¯ãç§ã¯åæããŸããå®å šã«ãã³ã»ã³ã¹ã®ããã«èŠããŸããããããããã¯ããã»ã©æªãã¯ãããŸããã Firecrackerãã€ã¯ãä»®æ³ã€ã³ã¹ã¿ã³ã¹ãå®è¡ããŠããåãã¹ãã¯ãããŒã«ã«ããŒãžã§ã³ã®ãã©ã€ããŒãDNSãµãŒããŒïŒRustã§èšè¿°ãããå°ããªããã°ã©ã ïŒãå®è¡ããŸãã eBPFã³ãŒãã¯ãFirecrackerãã·ã³ããã®DNSãµãŒããŒãšã®ã¿å¯Ÿè©±ã§ããããã«ãããµãŒããŒã®6PNã¢ãã¬ã¹ããDNSãµãŒããŒãåç §ããŸãã ïŒæè¡çãªèгç¹ããããŠãŒã¶ãŒã¯ãã®ãµãŒããŒã®ãã©ã€ããŒãDNS APIã«å¯ŸããŠã®ã¿ã¯ãšãªãå®è¡ã§ããä»ã®ãã¹ãŠã®ãŠãŒã¶ãŒã®ã¯ãšãªã¯ååž°çã«åŠçãããŸããïŒDNSãµãŒããŒã¯ïŒç°åžžã«èŠããããšã¯ããã£ãŠããŸããïŒçµç¹ã確å®ã«èå¥ã§ããŸãããœãŒã¹IPã¢ãã¬ã¹èŠæ±ãåæããããšã«ãã£ãŠãäžè¬çã«ããããç§ãã¡ã®åãæ¹ã§ãã
ããã¯ãã¹ãŠç§ãã¡ã®ã·ã¹ãã ã®å¥¥æ·±ãã§èµ·ããããŠãŒã¶ãŒã¯ããããã¹ãŠãèŠãããšãã§ããŸããããŠãŒã¶ãŒã¯
flyctl ssh issue -a
ãAPIããæ°ããèšŒææžãèŠæ±ãããããããŒã«ã«SSHãšãŒãžã§ã³ãã«æž¡ãã³ãã³ãã®ã¿ã確ââèªããŸããã ãã®åŸãSSHæ¥ç¶ã¯äžè¬çã«æ©èœããŠããããšã倿ããŸãããããã¯ãã¹ãŠååã«ãã¡ããšæŽçãããŸãããããããã©ããªããžãã¹ã以åãããåžžã«æ£ç¢ºã«è¡ãããšãã§ããŸãã
ããŒã2ïŒTCP / IPã䜿çšããŠãŠãŒã¶ãŒã¢ãŒãããWireGuardãããã¯ãŒã¯ã§äœæ¥ãã
SSHã䜿çšããäžèšã®ã¹ããŒã ã«ã¯1ã€ã®åé¡ããããŸããããã¯ããã¹ãŠã®äººã«WireGuardãã€ã³ã¹ããŒã«ãããŠããããã§ã¯ãªããšããããšã§ãããã ãã察å¿ããããã°ã©ã ã¯ãã¹ãŠã®äººãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã WireGuardã¯ãFlyãã©ãããã©ãŒã ã§å®è¡ãããŠããã¢ããªã±ãŒã·ã§ã³ã®ç®¡çã«å€§ãã«åœ¹ç«ã€åªãããã¯ãããžãŒã§ãããã ããããã§ããäžéšã®ãŠãŒã¶ãŒã¯WireGuardãæã£ãŠããŸããã
確ãã«ããã®ãããªãŠãŒã¶ãŒã¯SSHçµç±ã§ã·ã¹ãã ãæäœããå¿ èŠããããŸãã
äžèŠãããšã誰ããWireGuardãã€ã³ã¹ããŒã«ããŠããªããšããäºå®ã¯ãä¹ãè¶ããããªãé害ã®ããã«æãããããããŸããã WireGuardã¯ã©ã®ããã«æ©èœããŸããïŒæ°ãããããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ããŠãŒã¶ãŒã®ã³ã³ãã¥ãŒã¿ãŒã«äœæãããŸããããã¯ãã«ãŒãã«ã¬ãã«ã®WireGuardã€ã³ã¿ãŒãã§ã€ã¹ïŒLinuxã®å ŽåïŒããŸãã¯ãŠãŒã¶ãŒã¢ãŒãã®WireGuardãµãŒãã¹ãæ¥ç¶ããããã³ãã«ïŒä»ã®ãã¹ãŠã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®å ŽåïŒã®ããããã§ãããã®ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ããªããšãWireGuardãããã¯ãŒã¯ãæäœã§ããŸããã
ããããWireGuardãæ£ããè§åºŠããèŠããšãæè¡çãªèгç¹ããã¯ããã§ã¯ãªãããšãããããŸããã€ãŸããæ°ãããããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ãæ§æããã«ã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¬ãã«ã®æš©éãå¿ èŠã§ãããããããã±ãããéä¿¡ããã«ã¯
51820/udp
ç¹æš©ã¯å¿ èŠãããŸããã WireGuardãããã³ã«ãæ©èœãããããã«å¿ èŠãªãã®ã¯ãã¹ãŠããŠãŒã¶ãŒã¢ãŒãã§å®è¡ãããŠããéç¹æš©ããã»ã¹ãšããŠéå§ã§ããŸãããããwireguard-goããã±ãŒãžã®ä»çµã¿ ã§ãã
ããã«ãããWireGuardãã³ãã·ã§ã€ã¯æé ã®ã¿ãå®è¡ã§ããŸãããã ããåæã«ãWireGuardãããã¯ãŒã¯ã®ããŒããšã®æ å ±äº€æã«ã€ããŠã¯èª¬æããŠããŸãããããã¯ããã®ãããã¯ãŒã¯ã«æ¥ç¶ãããŠããå¥ã®ã·ã¹ãã ã«ä»»æã®ããŒã¿ãåçŽã«ååŸããŠéä¿¡ããããšã¯ã§ããªãããã§ãããã®ãããªã·ã¹ãã ã¯ãéåžžTCP / IPãããã¯ãŒã¯ãä»ããŠéä¿¡ããããã±ããããªãã¹ã³ããŸãã UDPãœã±ããããµããŒãããæšæºã®ã·ã¹ãã ããŒã«ã¯ããã®ãããªãœã±ããã䜿çšããŠTCPæ¥ç¶ã確ç«ããã®ã«åœ¹ç«ã¡ãŸããã
ãŠãŒã¶ãŒã¢ãŒãã§TCPãæå¹ã«ããå°ããªã³ãŒããäœæããã®ã¯é£ããã§ãããããããã¯ãWireGuardãããã¯ãŒã¯ãä»ããéä¿¡ããµããŒãããããã ãã«èšèšãããŠããããŠãŒã¶ãŒã¢ãŒãã§ãåæ§ã§ãããã®ãããªã³ãŒãã«ãããFlyãŠãŒã¶ãŒã¯WireGuardã匷åãããœãããŠã§ã¢ãã€ã³ã¹ããŒã«ããªããŠããSSHçµç±ã§ã·ã¹ãã ã«æ¥ç¶ã§ããŸãã
JasonDonenfeldãåå ããŠããSlackãã£ã³ãã«ã§ããããã¹ãŠã«ã€ããŠè©±ãåãã®ã¯ç¡è¬ã§ãããã€ãŸãã声ãåºããŠèããåŸãç§ã¯å¯ãŸãããç§ãç®èŠãããšããJasonã¯ãã§ã«gVisorã䜿çšããŠããããã¹ãŠãå®è£ ããWireGuardã©ã€ãã©ãªã«å«ãŸããŠããŸããã
ããã§æãè峿·±ãã®ã¯gVisorã§ããç§ãã¡ã¯ãã§ã«ããã«ã€ããŠæžãã ..ã誰ããç¥ããªãå ŽåãgVisorã¯æ¬è³ªçã«ãŠãŒã¶ãŒã¹ããŒã¹ã®Linux OSã§ãããGolangã«å®è£ ãããLinuxã§ããã
runc
å®è¡äžã®ã³ã³ãããŒã®ä»£ãããšããŠäœ¿çšãã ãŸããããã¯å®éã«ã¯å®å šã«æ£æ°ã§ãªããããžã§ã¯ãã§ãããããŠãããã䜿ãã°ãããã¯ãã ã®ãŽãŒãžã£ã¹ãªãã®ãªã®ã§ãèªãããã«ä»ã®äººã«ããã«ã€ããŠè©±ãããšãã§ãããšæããŸãããã®å¥¥æ·±ãã«ã¯ãGoã§èšè¿°ãããå®å šãªTCP / IPå®è£ ããããéåžžã®ãããã¡ãŒãšããŠè¡šãããå ¥åããŒã¿ãšåºåããŒã¿ãæäœããŸã
[]byte
ã
ãã®åŸãããã€ãã®ãã€ãŒãããã€ãŒããããæ°æéåŸãBenBarkertãããšãŠãçŽ æµãªã¡ãŒã«ã å±ããŸããã..ããã³ã¯ãã§ã«gVisorãããã¯ãŒãã³ã°ãµãã·ã¹ãã ã«é¢é£ããããŸããŸãªã¿ã¹ã¯ã«åãçµãã§ããŸããã圌ã¯ç§ãã¡ãåãçµãã§ããããšã«èå³ããããç§ãã¡ã圌ãšååããããã©ããç¥ããããšæã£ãŠããŸãããç§ãã¡ã¯ããã®ãããžã§ã¯ãã§äžç·ã«åããšãã圌ã®ã¢ã€ãã¢ã奜ãã§ããããããŠä»ã詳现ã«ç«ã¡å ¥ãããšãªãããŠãŒã¶ãŒã¢ãŒãã®gVisor TCP / IPå®è£ ãä»ããŠå®è¡ãããèšŒææžããŒã¹ã®SSHå®è£ ããããŸããããã¯ãã¹ãŠãã«ã¹ã¿ã ã¢ãŒãããã±ãŒãžãä»ããŠWireGuardãããã¯ãŒã¯ãšçžäºäœçšããŸã
wireguard-go
ããããŠæåŸã«ãããã¯ã«çµã¿èŸŒãŸããŠã
flyctl
ãŸãã -
ã䜿çšããŠSSHã䜿çš
flyctl
ããã«ã¯ã次ã®ãããªã³ãã³ããå ¥åããã ãã§ãã
flyctl ssh shell personal dogmatic-potato-342.internal
ãããŠä»ãããªããèµ·ãã£ãŠããããšã®ä¿¡ããããªãã»ã©ãçè§£ããããšãã§ããããã«ãç§ã¯ããªãã«ãã®ã³ãã³ãã«ã€ããŠå°ã話ããŸããã€ãŸã
dogmatic-potato-342.internal
ã-6PNãããã¯ãŒã¯äžã®ãã©ã€ããŒãDNSãµãŒããŒã«ãã£ãŠã®ã¿è§£æ±ºãããå éšDNSåã§ãããã®ã¢ãŒãã§ã¯ã
ssh shell
ãŠãŒãã£ãªãã£
flyctl
ãTCP / IPã¹ã¿ãã¯ã®gVisorãŠãŒã¶ãŒã¢ãŒãã䜿çšãããããããã¯ãã¹ãŠå¹çç ã§ãããã ããgVisorã«ã¯DNSã«ãã¯ã¢ãããå®è¡ããããã®ã³ãŒãã¯ãããŸãããããã¯ãç¹å¥ãªTCP / IPã€ã³ã¿ãŒãã§ã€ã¹ãæ¿å ¥ããããšã§ã ãŸãããæšæºã®Goã©ã€ãã©ãªã§ãã
Flyctl
ã¡ãªã¿ã«ããã㯠ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ãïŒã¯ã©ã€ã¢ã³ãã¯ãéçºã«åŸäºããŠããèªåã®ã³ã³ãã¥ãŒã¿ãŒã§äœ¿çšããå¿ èŠããããããããããå¿ èŠããããŸãïŒããããã£ãŠãèå³ãããå Žåã¯ããã®ã³ãŒããèªãã ãã§ãããã³ã¯pkgãã©ã«ããŒã«ããã€ãã®çŽ æŽãããã³ãŒããæžããŸãã ããããŠãæ®ãã®ã³ãŒãã¯æããããã®ã§ããããšç§ã¯æžããŸããã Goã§ã¯ãWireGuardãããã¯ãŒã¯ã§IPéä¿¡ãæäŸããã®ã¯é©ãã»ã©ç°¡åã§ããäœã¬ãã«ã®TCP / IPããã°ã©ãã³ã°ãè¡ã£ãããšãããå Žåã¯ããã®åçŽããä¿¡ããããªãã»ã©ç°¡åã§ããããšã«æ°ä»ããããããŸããã gVisor TCPã¹ã¿ãã¯ã®ãªããžã§ã¯ãã¯ãæšæºã©ã€ãã©ãªã®ãããã¯ãŒã¯ã³ãŒãã«çŽæ¥æ¥ç¶ããŸãã
ãã®ã³ãŒããèŠãŠãã ããïŒ
tunDev, gNet, err := netstack.CreateNetTUN(localIPs, []net.IP{dnsIP}, mtu) if err != nil { return nil, err } // ... wgDev := device.NewDevice(tunDev, device.NewLogger(cfg.LogLevel, "(fly-ssh) "))
CreateNetTUN
äžéš
wireguard-go
ã§ããããã§gVisorã®æ©èœã䜿çšãããŸãããŸããWireGuardæäœãæäŸããéåžžã®ãã±ããã®èªã¿åããšæžã蟌ã¿ã«äœ¿çšã§ããåæãã³ãã«ããã€ã¹ãèªç±ã«äœ¿çšã§ããŸããæ¬¡ã«ãgVisorã®ã©ãããŒã§ããnet.Dialer颿° ããããŸããããã¯ãGoã³ãŒãã§äœ¿çšã§ãããããä»ããŠå¯Ÿå¿ããWireGuardãããã¯ãŒã¯ãšå¯Ÿè©±ã§ããŸãã
ããã ãã§ããïŒäžè¬çã«ãã¯ããããšãã°ããããã®ã¡ã«ããºã ã䜿çšããŠDNSãæäœããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
resolv: &net.Resolver{ PreferGo: true, Dial: func(ctx context.Context, network, address string) (net.Conn, error) { return gNet.DialContext(ctx, network, net.JoinHostPort(dnsIP.String(), "53")) }, },
ããã¯ãGoã§èšè¿°ãããéåžžã®ãããã¯ãŒã¯ã³ãŒãã§ããäžè¬çã«ãããã¯ããŸããããŸããã
æããã«ã誰ãããããè¡ãå¿ èŠããããŸãã
æ°çŸè¡ã®ã³ãŒãã®ãããã§ïŒããã¯-gVisorããååŸããLinuxãŠãŒã¶ãŒã¢ãŒãå®è£ ã³ãŒãã¯å¥ã§ãããã©ãããã°ããã§ãã-äŸåé¢ä¿ããéããããšã¯ã§ããŸããïŒãæå·åãããæ°ãããããã¯ãŒã¯ãååŸã§ããŸãèªç±ã«äœ¿çšã§ããèªèšŒããã€ã§ããã»ãšãã©ãã¹ãŠã®ããã°ã©ã ããã¢ã¯ã»ã¹ã§ãããããã¯ãŒã¯ã
ãã®ãããªãããã¯ãŒã¯ã¯ãã³ã¢TCP / IPå®è£ ã«åºã¥ããããã¯ãŒã¯ãããå€§å¹ ã«é ãããšã¯æããã§ããããããããã¯ãã°ãã°æ¬åœã«éèŠã§ããïŒãããŠãç¹ã«ã宿çã«çºçããåé¡ã解決ãããšãã«ãããã¯ãã°ãã°æå³ãæã¡ãŸããïŒãã®è§£æ±ºã®ããã«ãéåžžãäœããæªç¥ã®å¥åŠãªTLSãã³ãã«ãæ§ç¯ãããŸããïŒé床ãéèŠãªå Žåã¯ãéåžžã®WireGuardå®è£ ã«åãæ¿ããã ãã§ãã
ãããã«ãããç§ãèšã£ãããšã¯ç§ãã¡ã®å€§ããªåé¡ã解決ããŸãããçµå±ã®ãšããããã®ã·ã¹ãã ã¯SSHã®äœæ¥ãæŽçããã ãã§ãªãé©ããŠããŸããPostgresããŒã¿ããŒã¹ããã¹ãããŠããŸããç°¡åãªã³ãã³ããå®è¡ãã
psql
ããšã§ãMacOSçšã®WireGuardãã€ã³ã¹ããŒã«ã§ãããã©ããã«é¢ä¿ãªããæåéãã©ãããã§ãã·ã§ã«ãéãããšãã§ããå Žåã«éåžžã«äŸ¿å© ã§ãã
WireGuardã䜿çšããŠããŸããïŒ