[{"data":1,"prerenderedAt":1774},["ShallowReactive",2],{"navigation_docs_en":3,"-en-serveex-security-cloudflare-":377,"-en-serveex-security-cloudflare--surround":1769},[4,16,94,262,271,332],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":15},"About","i-noto-star","\u002Fen\u002Fabout","en\u002F1.about",[10],{"title":11,"path":12,"stem":13,"icon":14},"Welcome","\u002Fen\u002Fabout\u002Fwelcome","en\u002F1.about\u002F1.welcome","i-lucide-home",false,{"title":17,"icon":18,"path":19,"stem":20,"children":21,"page":15},"General","i-noto-open-book","\u002Fen\u002Fgeneral","en\u002F2.general",[22,26,44,58,76],{"title":17,"path":23,"stem":24,"icon":25},"\u002Fen\u002Fgeneral\u002Fsummary","en\u002F2.general\u002F1.summary","i-lucide-bookmark",{"title":27,"icon":28,"path":29,"stem":30,"children":31,"page":15},"Networking","i-lucide-network","\u002Fen\u002Fgeneral\u002Fnetworking","en\u002F2.general\u002F2.networking",[32,36,40],{"title":33,"path":34,"stem":35},"NAT & DHCP","\u002Fen\u002Fgeneral\u002Fnetworking\u002Fnat","en\u002F2.general\u002F2.networking\u002F1.nat",{"title":37,"path":38,"stem":39},"DNS Zone","\u002Fen\u002Fgeneral\u002Fnetworking\u002Fdns","en\u002F2.general\u002F2.networking\u002F2.dns",{"title":41,"path":42,"stem":43},"Samba","\u002Fen\u002Fgeneral\u002Fnetworking\u002Fsamba","en\u002F2.general\u002F2.networking\u002F3.samba",{"title":45,"icon":46,"path":47,"stem":48,"children":49,"page":15},"Storage","i-lucide-hard-drive","\u002Fen\u002Fgeneral\u002Fstorage","en\u002F2.general\u002F3.storage",[50,54],{"title":51,"path":52,"stem":53},"RAID","\u002Fen\u002Fgeneral\u002Fstorage\u002Fraid","en\u002F2.general\u002F3.storage\u002F1.raid",{"title":55,"path":56,"stem":57},"ZFS","\u002Fen\u002Fgeneral\u002Fstorage\u002Fzfs","en\u002F2.general\u002F3.storage\u002F2.zfs",{"title":59,"icon":60,"path":61,"stem":62,"children":63,"page":15},"Hardware","i-lucide-server","\u002Fen\u002Fgeneral\u002Fhardware","en\u002F2.general\u002F4.hardware",[64,68,72],{"title":65,"path":66,"stem":67},"The Basics","\u002Fen\u002Fgeneral\u002Fhardware\u002Fbasics","en\u002F2.general\u002F4.hardware\u002F1.basics",{"title":69,"path":70,"stem":71},"Network","\u002Fen\u002Fgeneral\u002Fhardware\u002Fnetwork","en\u002F2.general\u002F4.hardware\u002F2.network",{"title":73,"path":74,"stem":75},"The ProloNAS","\u002Fen\u002Fgeneral\u002Fhardware\u002Fprolonas","en\u002F2.general\u002F4.hardware\u002F3.prolonas",{"title":77,"icon":78,"path":79,"stem":80,"children":81,"page":15},"Linux tips for dummies","i-lucide-terminal","\u002Fen\u002Fgeneral\u002Flinux","en\u002F2.general\u002F5.linux",[82,86,90],{"title":83,"path":84,"stem":85},"Command line basics","\u002Fen\u002Fgeneral\u002Flinux\u002Fcli-basics","en\u002F2.general\u002F5.linux\u002F1.cli-basics",{"title":87,"path":88,"stem":89},"Folders and partitions","\u002Fen\u002Fgeneral\u002Flinux\u002Ffilesystem","en\u002F2.general\u002F5.linux\u002F2.filesystem",{"title":91,"path":92,"stem":93},"Handy CLI tools","\u002Fen\u002Fgeneral\u002Flinux\u002Fhandy-tools","en\u002F2.general\u002F5.linux\u002F3.handy-tools",{"title":95,"icon":96,"path":97,"stem":98,"children":99,"page":15},"Serveex","i-noto-microscope","\u002Fen\u002Fserveex","en\u002F3.serveex",[100,104,126,144,170,188,202,216,234,248],{"title":101,"path":102,"stem":103,"icon":25},"Introduction","\u002Fen\u002Fserveex\u002Fintroduction","en\u002F3.serveex\u002F1.introduction",{"title":105,"icon":106,"path":107,"stem":108,"children":109,"page":15},"Server core","i-lucide-server-cog","\u002Fen\u002Fserveex\u002Fcore","en\u002F3.serveex\u002F2.core",[110,114,118,122],{"title":111,"path":112,"stem":113},"Debian 13","\u002Fen\u002Fserveex\u002Fcore\u002Finstallation","en\u002F3.serveex\u002F2.core\u002F1.installation",{"title":115,"path":116,"stem":117},"Docker","\u002Fen\u002Fserveex\u002Fcore\u002Fdocker","en\u002F3.serveex\u002F2.core\u002F2.docker",{"title":119,"path":120,"stem":121},"Wireguard","\u002Fen\u002Fserveex\u002Fcore\u002Fwireguard","en\u002F3.serveex\u002F2.core\u002F3.wireguard",{"title":123,"path":124,"stem":125},"SWAG","\u002Fen\u002Fserveex\u002Fcore\u002Fswag","en\u002F3.serveex\u002F2.core\u002F4.swag",{"title":127,"icon":128,"path":129,"stem":130,"children":131,"page":15},"Security","i-lucide-shield","\u002Fen\u002Fserveex\u002Fsecurity","en\u002F3.serveex\u002F3.security",[132,136,140],{"title":133,"path":134,"stem":135},"Cloudflare Zero Trust","\u002Fen\u002Fserveex\u002Fsecurity\u002Fcloudflare","en\u002F3.serveex\u002F3.security\u002F2.cloudflare",{"title":137,"path":138,"stem":139},"TinyAuth","\u002Fen\u002Fserveex\u002Fsecurity\u002Ftinyauth","en\u002F3.serveex\u002F3.security\u002F3.tinyauth",{"title":141,"path":142,"stem":143},"Pocket ID","\u002Fen\u002Fserveex\u002Fsecurity\u002Fpocket-id","en\u002F3.serveex\u002F3.security\u002F4.pocket-id",{"title":145,"icon":146,"path":147,"stem":148,"children":149,"page":15},"Monitoring","i-lucide-chart-no-axes-column","\u002Fen\u002Fserveex\u002Fmonitoring","en\u002F3.serveex\u002F4.monitoring",[150,154,158,162,166],{"title":151,"path":152,"stem":153},"Uptime-Kuma","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fuptime-kuma","en\u002F3.serveex\u002F4.monitoring\u002F1.uptime-kuma",{"title":155,"path":156,"stem":157},"Dozzle","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fdozzle","en\u002F3.serveex\u002F4.monitoring\u002F2.dozzle",{"title":159,"path":160,"stem":161},"Speedtest Tracker","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fspeedtest-tracker","en\u002F3.serveex\u002F4.monitoring\u002F3.speedtest-tracker",{"title":163,"path":164,"stem":165},"Beszel","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fbeszel","en\u002F3.serveex\u002F4.monitoring\u002F4.beszel",{"title":167,"path":168,"stem":169},"UpSnap","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fupsnap","en\u002F3.serveex\u002F4.monitoring\u002F5.upsnap",{"title":171,"icon":172,"path":173,"stem":174,"children":175,"page":15},"Media & Seedbox","i-lucide-list-video","\u002Fen\u002Fserveex\u002Fmedia","en\u002F3.serveex\u002F5.media",[176,180,184],{"title":177,"path":178,"stem":179},"Jellyfin","\u002Fen\u002Fserveex\u002Fmedia\u002Fjellyfin","en\u002F3.serveex\u002F5.media\u002F1.jellyfin",{"title":181,"path":182,"stem":183},"Qbittorrent","\u002Fen\u002Fserveex\u002Fmedia\u002Fqbittorrent","en\u002F3.serveex\u002F5.media\u002F2.qbittorrent",{"title":185,"path":186,"stem":187},"Automation","\u002Fen\u002Fserveex\u002Fmedia\u002Fservarr","en\u002F3.serveex\u002F5.media\u002F3.servarr",{"title":189,"icon":190,"path":191,"stem":192,"children":193,"page":15},"Cloud Drive & Photos","i-lucide-cloud-upload","\u002Fen\u002Fserveex\u002Fcloud","en\u002F3.serveex\u002F6.cloud",[194,198],{"title":195,"path":196,"stem":197},"Immich","\u002Fen\u002Fserveex\u002Fcloud\u002Fimmich","en\u002F3.serveex\u002F6.cloud\u002F1.immich",{"title":199,"path":200,"stem":201},"Nextcloud","\u002Fen\u002Fserveex\u002Fcloud\u002Fnextcloud","en\u002F3.serveex\u002F6.cloud\u002F2.nextcloud",{"title":203,"icon":204,"path":205,"stem":206,"children":207,"page":15},"File & share","i-lucide-folder-tree","\u002Fen\u002Fserveex\u002Ffiles","en\u002F3.serveex\u002F7.files",[208,212],{"title":209,"path":210,"stem":211},"File Browser Quantum","\u002Fen\u002Fserveex\u002Ffiles\u002Ffile-browser-quantum","en\u002F3.serveex\u002F7.files\u002F1.file-browser-quantum",{"title":213,"path":214,"stem":215},"Pingvin","\u002Fen\u002Fserveex\u002Ffiles\u002Fpingvin","en\u002F3.serveex\u002F7.files\u002F2.pingvin",{"title":217,"icon":218,"path":219,"stem":220,"children":221,"page":15},"Developpement","i-lucide-code-xml","\u002Fen\u002Fserveex\u002Fdevelopment","en\u002F3.serveex\u002F8.development",[222,226,230],{"title":223,"path":224,"stem":225},"Code-Server","\u002Fen\u002Fserveex\u002Fdevelopment\u002Fcode-server","en\u002F3.serveex\u002F8.development\u002F1.code-server",{"title":227,"path":228,"stem":229},"Forgejo","\u002Fen\u002Fserveex\u002Fdevelopment\u002Fforgejo","en\u002F3.serveex\u002F8.development\u002F2.forgejo",{"title":231,"path":232,"stem":233},"IT Tools","\u002Fen\u002Fserveex\u002Fdevelopment\u002Fit-tools","en\u002F3.serveex\u002F8.development\u002F3.it-tools",{"title":235,"icon":236,"path":237,"stem":238,"children":239,"page":15},"Useful Apps","i-lucide-award","\u002Fen\u002Fserveex\u002Fapps","en\u002F3.serveex\u002F9.apps",[240,244],{"title":241,"path":242,"stem":243},"Adguard Home","\u002Fen\u002Fserveex\u002Fapps\u002Fadguard","en\u002F3.serveex\u002F9.apps\u002F1.adguard",{"title":245,"path":246,"stem":247},"Vaultwarden","\u002Fen\u002Fserveex\u002Fapps\u002Fvaultwarden","en\u002F3.serveex\u002F9.apps\u002F2.vaultwarden",{"title":249,"icon":250,"path":251,"stem":252,"children":253,"page":15},"Advanced","i-lucide-flask-conical","\u002Fen\u002Fserveex\u002Fadvanced","en\u002F3.serveex\u002F91.advanced",[254,258],{"title":255,"path":256,"stem":257},"Authentik","\u002Fen\u002Fserveex\u002Fadvanced\u002Fauthentik","en\u002F3.serveex\u002F91.advanced\u002F1.authentik",{"title":259,"path":260,"stem":261},"Arcane","\u002Fen\u002Fserveex\u002Fadvanced\u002Farcane","en\u002F3.serveex\u002F91.advanced\u002F2.arcane",{"title":263,"icon":264,"path":265,"stem":266,"children":267,"page":15},"Stockeex","i-noto-computer-disk","\u002Fen\u002Fstockeex","en\u002F4.stockeex",[268],{"title":101,"path":269,"stem":270,"icon":25},"\u002Fen\u002Fstockeex\u002Fintroduction","en\u002F4.stockeex\u002F1.introduction",{"title":272,"icon":273,"path":274,"stem":275,"children":276,"page":15},"My nonsense","i-noto-test-tube","\u002Fen\u002Fnonsense","en\u002F5.nonsense",[277,280,302],{"title":272,"path":278,"stem":279,"icon":25},"\u002Fen\u002Fnonsense\u002Fsummary","en\u002F5.nonsense\u002F1.summary",{"title":281,"icon":282,"path":283,"stem":284,"children":285,"page":15},"Python","i-lucide-file-code-2","\u002Fen\u002Fnonsense\u002Fpython","en\u002F5.nonsense\u002F2.python",[286,290,294,298],{"title":287,"path":288,"stem":289},"Nvidia Stock Bot","\u002Fen\u002Fnonsense\u002Fpython\u002Fnvidia-stock-bot","en\u002F5.nonsense\u002F2.python\u002F1.nvidia-stock-bot",{"title":291,"path":292,"stem":293},"Adguard CIDRE","\u002Fen\u002Fnonsense\u002Fpython\u002Fadguard-cidre","en\u002F5.nonsense\u002F2.python\u002F2.adguard-cidre",{"title":295,"path":296,"stem":297},"Lumeex","\u002Fen\u002Fnonsense\u002Fpython\u002Flumeex","en\u002F5.nonsense\u002F2.python\u002F3.lumeex",{"title":299,"path":300,"stem":301},"Instameex","\u002Fen\u002Fnonsense\u002Fpython\u002Finstameex","en\u002F5.nonsense\u002F2.python\u002F4.instameex",{"title":303,"icon":304,"path":305,"stem":306,"children":307,"page":15},"Bash","i-lucide-file-terminal","\u002Fen\u002Fnonsense\u002Fbash","en\u002F5.nonsense\u002F3.bash",[308,312,316,320,324,328],{"title":309,"path":310,"stem":311},"Servarr corrector","\u002Fen\u002Fnonsense\u002Fbash\u002Fservarr-duplicates","en\u002F5.nonsense\u002F3.bash\u002F1.servarr-duplicates",{"title":313,"path":314,"stem":315},"LUKS Backup","\u002Fen\u002Fnonsense\u002Fbash\u002Fluks-backup","en\u002F5.nonsense\u002F3.bash\u002F2.luks-backup",{"title":317,"path":318,"stem":319},"Socat Proxy","\u002Fen\u002Fnonsense\u002Fbash\u002Fsocat-proxy","en\u002F5.nonsense\u002F3.bash\u002F3.socat-proxy",{"title":321,"path":322,"stem":323},"HotDisk","\u002Fen\u002Fnonsense\u002Fbash\u002Fhotdisk","en\u002F5.nonsense\u002F3.bash\u002F4.hotdisk",{"title":325,"path":326,"stem":327},"Backrest Docker Stop","\u002Fen\u002Fnonsense\u002Fbash\u002Fbackrest-docker-stop","en\u002F5.nonsense\u002F3.bash\u002F5.backrest-docker-stop",{"title":329,"path":330,"stem":331},"rm Confirmation Guard","\u002Fen\u002Fnonsense\u002Fbash\u002Frm-confirmation","en\u002F5.nonsense\u002F3.bash\u002F6.rm-confirmation",{"title":333,"icon":334,"path":335,"stem":336,"children":337,"page":15},"Recycled","i-noto-recycling-symbol","\u002Fen\u002Frecycled","en\u002F6.recycled",[338,341,355],{"title":333,"path":339,"stem":340,"icon":25},"\u002Fen\u002Frecycled\u002Fsummary","en\u002F6.recycled\u002F1.summary",{"title":342,"icon":343,"path":344,"stem":345,"children":346,"page":15},"Deprecated","i-lucide-trash-2","\u002Fen\u002Frecycled\u002Fdeprecated","en\u002F6.recycled\u002F2.deprecated",[347,351],{"title":348,"path":349,"stem":350},"Wireguard 14","\u002Fen\u002Frecycled\u002Fdeprecated\u002Fwireguard-14","en\u002F6.recycled\u002F2.deprecated\u002F1.wireguard-14",{"title":352,"path":353,"stem":354},"File Browser","\u002Fen\u002Frecycled\u002Fdeprecated\u002Ffile-browser","en\u002F6.recycled\u002F2.deprecated\u002F2.file-browser",{"title":356,"icon":357,"path":358,"stem":359,"children":360,"page":15},"Alternatives","i-lucide-arrow-left-right","\u002Fen\u002Frecycled\u002Falternatives","en\u002F6.recycled\u002F3.alternatives",[361,365,369,373],{"title":362,"path":363,"stem":364},"Plex","\u002Fen\u002Frecycled\u002Falternatives\u002Fplex","en\u002F6.recycled\u002F3.alternatives\u002F1.plex",{"title":366,"path":367,"stem":368},"Qbittorrent for Plex","\u002Fen\u002Frecycled\u002Falternatives\u002Fqbittorrent-for-plex","en\u002F6.recycled\u002F3.alternatives\u002F2.qbittorrent for plex",{"title":370,"path":371,"stem":372},"Servarr for Plex","\u002Fen\u002Frecycled\u002Falternatives\u002Fservarr-for-plex","en\u002F6.recycled\u002F3.alternatives\u002F3.servarr for plex",{"title":374,"path":375,"stem":376},"Gitea","\u002Fen\u002Frecycled\u002Falternatives\u002Fgitea","en\u002F6.recycled\u002F3.alternatives\u002F4.gitea",{"id":378,"title":133,"body":379,"contributors":1761,"description":1763,"extension":1764,"hideCopyPage":15,"hideHeader":15,"hideToc":15,"links":1765,"meta":1766,"navigation":737,"path":134,"seo":1767,"stem":135,"__hash__":1768},"docs_en\u002Fen\u002F3.serveex\u002F3.security\u002F2.cloudflare.md",{"type":380,"value":381,"toc":1741},"minimark",[382,390,398,402,422,440,443,462,465,494,498,502,517,520,523,530,534,537,548,554,568,574,577,580,590,598,602,610,613,627,630,1503,1507,1510,1618,1621,1624,1627,1640,1682,1695,1737],[383,384],"ellipsis",{"blur":385,"left":386,"top":387,"width":388,"z-index":389},"140px","0px","10rem","40rem","60",[391,392,393],"p",{},[394,395],"img",{"alt":396,"src":397},"cloudfare_tunnels","\u002Fimg\u002Fserveex\u002Fcloudflared.svg",[399,400,101],"h2",{"id":401},"introduction",[391,403,404,405,409,410,414,415,418,419,421],{},"The ",[406,407,408],"em",{},"Zero Trust"," architecture is the practice of designing systems based on the principle of ",[411,412,413],"strong",{},"\"never trust, always verify\"",", as opposed to the traditional principle of ",[411,416,417],{},"\"trust, but verify\"",". This concept has become increasingly popular recently due to the growing number of attacks targeting user data. It’s a broad concept, but we’ll focus on how to apply ",[406,420,408],{}," to the web services we host.",[391,423,424,427,428,430,431,435,436,439],{},[406,425,426],{},"Cloudflare tunnels"," offer a simple way to implement ",[406,429,408],{},", using ",[432,433,123],"a",{"href":434},"\u002Fserveex\u002Fcore\u002Fswag"," and ",[432,437,255],{"href":438},"\u002Fserveex\u002Fadvanced\u002Fauthentik",".",[391,441,442],{},"Simply put, Cloudflare Tunnels allow you to:",[444,445,446,450,453,456,459],"ul",{},[447,448,449],"li",{},"Hide your server’s IP (and your home IP if it's self-hosted)",[447,451,452],{},"Authenticate traffic",[447,454,455],{},"Benefit from Cloudflare protections (DDoS attacks, blacklists, malicious requests, etc.)",[447,457,458],{},"Use Cloudflare's CDN to cache and speed up your websites",[447,460,461],{},"Avoid opening router ports for services exposed by SWAG",[391,463,464],{},"Here we’ll explain how to integrate SWAG with Cloudflare tunnels.",[466,467,468,473],"warning",{},[391,469,470],{},[411,471,472],{},"Warning:",[444,474,475,478,486],{},[447,476,477],{},"Do not use Cloudflare tunnels to expose a mail server",[447,479,480,481,485],{},"Do not use Cloudflare tunnels to expose a video service like Jellyfin. Unlike Plex, ",[432,482,484],{"href":483},"\u002Fserveex\u002Fmedia\u002Fjellyfin","Jellyfin has no cloud relay"," and is exposed directly through SWAG in this guide, so make sure it stays behind plain port forwarding rather than a Cloudflare tunnel",[447,487,488,489,493],{},"Do not use Cloudflare tunnels for the BitTorrent protocol (if you followed ",[432,490,492],{"href":491},"\u002Fserveex\u002Fmedia\u002Fqbittorrent","this guide",", everything is fine)",[399,495,497],{"id":496},"cloudflare-configuration","Cloudflare Configuration",[499,500,37],"h3",{"id":501},"dns-zone",[391,503,504,505,509,510,516],{},"First, you need to set Cloudflare as your ",[432,506,508],{"href":507},"\u002Fgeneral\u002Fnetworking\u002Fdns","DNS zone"," manager. If you bought your domain from Cloudflare, that’s already done. Otherwise, check with your registrar how to add external DNS servers. Cloudflare provides ",[432,511,515],{"href":512,"rel":513},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fdns\u002Fzone-setups\u002Ffull-setup\u002Fsetup\u002F",[514],"nofollow","step-by-step documentation"," on how to configure a DNS Zone, whether your domain is external or registered with Cloudflare.",[391,518,519],{},"If you only have one server to protect behind Cloudflare, you can delete all existing DNS records. By default, your domain and all its subdomains will be redirected to the tunnel.",[391,521,522],{},"If you have subdomains pointing to other servers, you can still define them in the DNS zone using A records.",[391,524,525,526,439],{},"If you have several servers and tunnels under one domain, ",[432,527,529],{"href":528},"#managing-multiple-tunnels-for-multiple-servers","see here",[499,531,533],{"id":532},"api-key","API Key",[391,535,536],{},"Start by creating a new Cloudflare API token and retrieving your zone and account IDs.",[391,538,539,540,435,544,547],{},"On your Cloudflare dashboard, on your domain overview page, you’ll see the ",[541,542,543],"code",{},"zone",[541,545,546],{},"account"," IDs at the bottom right. Save both securely.",[391,549,550],{},[394,551],{"alt":552,"src":553},"id and account","\u002Fimg\u002Fserveex\u002Fcf-id.png",[391,555,556,557,560,561,435,564,567],{},"Just below that is a link titled ",[406,558,559],{},"Get your API token",". Click it. The token scope must include ",[541,562,563],{},"Zone:DNS:Edit",[541,565,566],{},"Account:Cloudflare Tunnel:Edit",". Your page should look like the screenshot below.",[391,569,570],{},[394,571],{"alt":572,"src":573},"API token","\u002Fimg\u002Fserveex\u002Fcf-token.png",[391,575,576],{},"Once created, your token will only be shown once. Save it securely, as it cannot be viewed again later.",[499,578,133],{"id":579},"cloudflare-zero-trust",[391,581,582,583,586,587,589],{},"You must register for ",[406,584,585],{},"Cloudflare Teams"," to access the ",[406,588,408],{}," dashboard that manages tunnels and access policies. This is a premium service, but there’s a free plan for up to 50 users, perfect for a home lab. Keep in mind that a valid credit card is required to register, but the free plan incurs no charges.",[391,591,592,593,439],{},"Register ",[432,594,597],{"href":595,"rel":596},"https:\u002F\u002Fdash.teams.cloudflare.com\u002F",[514],"via this link",[399,599,601],{"id":600},"swag-configuration","SWAG Configuration",[603,604,605,606,609],"note",{},"This guide assumes you own ",[541,607,608],{},"mondomaine.fr"," and that its DNS is correctly pointing to Cloudflare, as described above.",[391,611,612],{},"SWAG supports two Docker Mods:",[444,614,615,621],{},[447,616,617,620],{},[411,618,619],{},"Cloudflared",", the container used to create and manage tunnels",[447,622,623,626],{},[411,624,625],{},"Cloudflared Real IP",", which allows SWAG to receive the true source IP of incoming requests instead of Docker’s internal IP (important for IP geolocation mods like DBIP).",[391,628,629],{},"These two mods, merged into the SWAG container, require some configuration.",[631,632,634,638,648,661,686,689,785,801,805,811,818,832,839,891,901,905,908,1177,1207,1213,1292,1462,1468,1483,1499],"steps",{"level":633},"3",[499,635,637],{"id":636},"configure-the-tunnel","Configure the tunnel",[391,639,640,641,644,645,439],{},"Create a file ",[541,642,643],{},"tunnelconfig.yml"," to reference in your SWAG ",[541,646,647],{},"compose.yaml",[649,650,653,654,657,658,660],"tip",{"icon":651,"to":652},"","\u002Fserveex\u002Ffiles\u002Ffile-browser-quantum","✨ ",[411,655,656],{},"Tip:"," Use ",[411,659,209],{}," to navigate and edit files instead of using the terminal.",[662,663,668],"pre",{"className":664,"code":665,"filename":666,"language":667,"meta":651,"style":651},"language-bash shiki shiki-themes github-dark material-theme github-dark","sudo nano \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Ftunnelconfig.yml\n","Terminal","bash",[541,669,670],{"__ignoreMap":651},[671,672,675,679,683],"span",{"class":673,"line":674},"line",1,[671,676,678],{"class":677},"sEgDM","sudo",[671,680,682],{"class":681},"s11XM"," nano",[671,684,685],{"class":681}," \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Ftunnelconfig.yml\n",[391,687,688],{},"Paste:",[662,690,694],{"className":691,"code":692,"filename":643,"language":693,"meta":651,"style":651},"language-yaml shiki shiki-themes github-dark material-theme github-dark","ingress:\n  - hostname: mondomaine.fr\n    service: https:\u002F\u002Fmondomaine.fr\n\n  - hostname: \"*.mondomaine.fr\"\n    service: https:\u002F\u002Fmondomaine.fr\n\n  - service: http_status:404\n","yaml",[541,695,696,706,721,732,739,758,767,772],{"__ignoreMap":651},[671,697,698,702],{"class":673,"line":674},[671,699,701],{"class":700},"sRuoG","ingress",[671,703,705],{"class":704},"s8jd1",":\n",[671,707,709,712,715,718],{"class":673,"line":708},2,[671,710,711],{"class":704},"  -",[671,713,714],{"class":700}," hostname",[671,716,717],{"class":704},":",[671,719,720],{"class":681}," mondomaine.fr\n",[671,722,724,727,729],{"class":673,"line":723},3,[671,725,726],{"class":700},"    service",[671,728,717],{"class":704},[671,730,731],{"class":681}," https:\u002F\u002Fmondomaine.fr\n",[671,733,735],{"class":673,"line":734},4,[671,736,738],{"emptyLinePlaceholder":737},true,"\n",[671,740,742,744,746,748,752,755],{"class":673,"line":741},5,[671,743,711],{"class":704},[671,745,714],{"class":700},[671,747,717],{"class":704},[671,749,751],{"class":750},"s8K8j"," \"",[671,753,754],{"class":681},"*.mondomaine.fr",[671,756,757],{"class":750},"\"\n",[671,759,761,763,765],{"class":673,"line":760},6,[671,762,726],{"class":700},[671,764,717],{"class":704},[671,766,731],{"class":681},[671,768,770],{"class":673,"line":769},7,[671,771,738],{"emptyLinePlaceholder":737},[671,773,775,777,780,782],{"class":673,"line":774},8,[671,776,711],{"class":704},[671,778,779],{"class":700}," service",[671,781,717],{"class":704},[671,783,784],{"class":681}," http_status:404\n",[391,786,787,788,792,793,796,797,800],{},"Press ",[789,790],"kbd",{"value":791},"Ctrl+O",", then ",[789,794],{"value":795},"Enter"," to save, and ",[789,798],{"value":799},"Ctrl+X"," to exit.",[499,802,804],{"id":803},"configure-cloudflare-real-ip","Configure Cloudflare Real IP",[391,806,807,808,439],{},"Now configure ",[406,809,810],{},"Cloudflare Real IP",[391,812,813,814,817],{},"Open the ",[541,815,816],{},"nginx.conf"," file:",[662,819,821],{"className":664,"code":820,"filename":666,"language":667,"meta":651,"style":651},"sudo nano \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fnginx.conf\n",[541,822,823],{"__ignoreMap":651},[671,824,825,827,829],{"class":673,"line":674},[671,826,678],{"class":677},[671,828,682],{"class":681},[671,830,831],{"class":681}," \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fnginx.conf\n",[391,833,834,835,838],{},"Add the following at the end of the ",[541,836,837],{},"http"," section:",[662,840,844],{"className":841,"code":842,"filename":816,"language":843,"meta":651,"style":651},"language-nginx shiki shiki-themes github-dark material-theme github-dark","real_ip_header X-Forwarded-For;\nreal_ip_recursive on;\ninclude \u002Fconfig\u002Fnginx\u002Fcf_real-ip.conf;\nset_real_ip_from 127.0.0.1;\n","nginx",[541,845,846,859,870,880],{"__ignoreMap":651},[671,847,848,852,856],{"class":673,"line":674},[671,849,851],{"class":850},"sJPTy","real_ip_header ",[671,853,855],{"class":854},"slcoZ","X-Forwarded-For",[671,857,858],{"class":704},";\n",[671,860,861,864,868],{"class":673,"line":708},[671,862,863],{"class":850},"real_ip_recursive ",[671,865,867],{"class":866},"soUAX","on",[671,869,858],{"class":704},[671,871,872,875,878],{"class":673,"line":723},[671,873,874],{"class":850},"include ",[671,876,877],{"class":854},"\u002Fconfig\u002Fnginx\u002Fcf_real-ip.conf",[671,879,858],{"class":704},[671,881,882,885,889],{"class":673,"line":734},[671,883,884],{"class":850},"set_real_ip_from ",[671,886,888],{"class":887},"swwWl","127.0.0.1",[671,890,858],{"class":704},[391,892,893,894,792,896,898,899,439],{},"Save with ",[789,895],{"value":791},[789,897],{"value":795},", and exit with ",[789,900],{"value":799},[499,902,904],{"id":903},"deploy-the-swag-stack","Deploy the SWAG stack",[391,906,907],{},"In Dockge, edit your SWAG stack with this:",[662,909,911],{"className":691,"code":910,"filename":647,"language":693,"meta":651,"style":651},"---\nservices:\n  swag:\n    image: lscr.io\u002Flinuxserver\u002Fswag:latest\n    container_name: swag\n    cap_add:\n      - NET_ADMIN\n    env_file:\n      - .env\n    environment:\n      - DOCKER_MODS=linuxserver\u002Fmods:swag-dbip|linuxserver\u002Fmods:swag-dashboard|linuxserver\u002Fmods:swag-auto-reload|linuxserver\u002Fmods:universal-cloudflared|linuxserver\u002Fmods:swag-cloudflare-real-ip\n      - PUID=${PUID}\n      - PGID=${PGID}\n      - TZ=Europe\u002FParis\n      - URL=${DOMAIN}\n      - SUBDOMAINS=wildcard\n      - VALIDATION=dns\n      - DNSPLUGIN=${PLUGIN}\n      - EMAIL=${EMAIL}\n      - CF_ZONE_ID=${ZONE_ID}\n      - CF_ACCOUNT_ID=${ACCOUNT_ID}\n      - CF_API_TOKEN=${API_TOKEN}\n      - CF_TUNNEL_NAME=${TUNNEL_NAME}\n      - CF_TUNNEL_PASSWORD=${TUNNEL_PW}\n      - FILE__CF_TUNNEL_CONFIG=\u002Fconfig\u002Ftunnelconfig.yml\n    extra_hosts:\n      - ${DOMAIN}:127.0.0.1\n    ports:\n      - 81:81\n    volumes:\n      - \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig:\u002Fconfig\n      - \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Ffail2ban\u002Ffail2ban.sqlite3:\u002Fdashboard\u002Ffail2ban.sqlite3:ro\n    restart: unless-stopped\n",[541,912,913,918,925,932,942,952,959,967,974,982,990,998,1006,1014,1022,1030,1038,1046,1054,1062,1070,1078,1086,1094,1102,1110,1118,1126,1134,1142,1150,1158,1166],{"__ignoreMap":651},[671,914,915],{"class":673,"line":674},[671,916,917],{"class":677},"---\n",[671,919,920,923],{"class":673,"line":708},[671,921,922],{"class":700},"services",[671,924,705],{"class":704},[671,926,927,930],{"class":673,"line":723},[671,928,929],{"class":700},"  swag",[671,931,705],{"class":704},[671,933,934,937,939],{"class":673,"line":734},[671,935,936],{"class":700},"    image",[671,938,717],{"class":704},[671,940,941],{"class":681}," lscr.io\u002Flinuxserver\u002Fswag:latest\n",[671,943,944,947,949],{"class":673,"line":741},[671,945,946],{"class":700},"    container_name",[671,948,717],{"class":704},[671,950,951],{"class":681}," swag\n",[671,953,954,957],{"class":673,"line":760},[671,955,956],{"class":700},"    cap_add",[671,958,705],{"class":704},[671,960,961,964],{"class":673,"line":769},[671,962,963],{"class":704},"      -",[671,965,966],{"class":681}," NET_ADMIN\n",[671,968,969,972],{"class":673,"line":774},[671,970,971],{"class":700},"    env_file",[671,973,705],{"class":704},[671,975,977,979],{"class":673,"line":976},9,[671,978,963],{"class":704},[671,980,981],{"class":681}," .env\n",[671,983,985,988],{"class":673,"line":984},10,[671,986,987],{"class":700},"    environment",[671,989,705],{"class":704},[671,991,993,995],{"class":673,"line":992},11,[671,994,963],{"class":704},[671,996,997],{"class":681}," DOCKER_MODS=linuxserver\u002Fmods:swag-dbip|linuxserver\u002Fmods:swag-dashboard|linuxserver\u002Fmods:swag-auto-reload|linuxserver\u002Fmods:universal-cloudflared|linuxserver\u002Fmods:swag-cloudflare-real-ip\n",[671,999,1001,1003],{"class":673,"line":1000},12,[671,1002,963],{"class":704},[671,1004,1005],{"class":681}," PUID=${PUID}\n",[671,1007,1009,1011],{"class":673,"line":1008},13,[671,1010,963],{"class":704},[671,1012,1013],{"class":681}," PGID=${PGID}\n",[671,1015,1017,1019],{"class":673,"line":1016},14,[671,1018,963],{"class":704},[671,1020,1021],{"class":681}," TZ=Europe\u002FParis\n",[671,1023,1025,1027],{"class":673,"line":1024},15,[671,1026,963],{"class":704},[671,1028,1029],{"class":681}," URL=${DOMAIN}\n",[671,1031,1033,1035],{"class":673,"line":1032},16,[671,1034,963],{"class":704},[671,1036,1037],{"class":681}," SUBDOMAINS=wildcard\n",[671,1039,1041,1043],{"class":673,"line":1040},17,[671,1042,963],{"class":704},[671,1044,1045],{"class":681}," VALIDATION=dns\n",[671,1047,1049,1051],{"class":673,"line":1048},18,[671,1050,963],{"class":704},[671,1052,1053],{"class":681}," DNSPLUGIN=${PLUGIN}\n",[671,1055,1057,1059],{"class":673,"line":1056},19,[671,1058,963],{"class":704},[671,1060,1061],{"class":681}," EMAIL=${EMAIL}\n",[671,1063,1065,1067],{"class":673,"line":1064},20,[671,1066,963],{"class":704},[671,1068,1069],{"class":681}," CF_ZONE_ID=${ZONE_ID}\n",[671,1071,1073,1075],{"class":673,"line":1072},21,[671,1074,963],{"class":704},[671,1076,1077],{"class":681}," CF_ACCOUNT_ID=${ACCOUNT_ID}\n",[671,1079,1081,1083],{"class":673,"line":1080},22,[671,1082,963],{"class":704},[671,1084,1085],{"class":681}," CF_API_TOKEN=${API_TOKEN}\n",[671,1087,1089,1091],{"class":673,"line":1088},23,[671,1090,963],{"class":704},[671,1092,1093],{"class":681}," CF_TUNNEL_NAME=${TUNNEL_NAME}\n",[671,1095,1097,1099],{"class":673,"line":1096},24,[671,1098,963],{"class":704},[671,1100,1101],{"class":681}," CF_TUNNEL_PASSWORD=${TUNNEL_PW}\n",[671,1103,1105,1107],{"class":673,"line":1104},25,[671,1106,963],{"class":704},[671,1108,1109],{"class":681}," FILE__CF_TUNNEL_CONFIG=\u002Fconfig\u002Ftunnelconfig.yml\n",[671,1111,1113,1116],{"class":673,"line":1112},26,[671,1114,1115],{"class":700},"    extra_hosts",[671,1117,705],{"class":704},[671,1119,1121,1123],{"class":673,"line":1120},27,[671,1122,963],{"class":704},[671,1124,1125],{"class":681}," ${DOMAIN}:127.0.0.1\n",[671,1127,1129,1132],{"class":673,"line":1128},28,[671,1130,1131],{"class":700},"    ports",[671,1133,705],{"class":704},[671,1135,1137,1139],{"class":673,"line":1136},29,[671,1138,963],{"class":704},[671,1140,1141],{"class":681}," 81:81\n",[671,1143,1145,1148],{"class":673,"line":1144},30,[671,1146,1147],{"class":700},"    volumes",[671,1149,705],{"class":704},[671,1151,1153,1155],{"class":673,"line":1152},31,[671,1154,963],{"class":704},[671,1156,1157],{"class":681}," \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig:\u002Fconfig\n",[671,1159,1161,1163],{"class":673,"line":1160},32,[671,1162,963],{"class":704},[671,1164,1165],{"class":681}," \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Ffail2ban\u002Ffail2ban.sqlite3:\u002Fdashboard\u002Ffail2ban.sqlite3:ro\n",[671,1167,1169,1172,1174],{"class":673,"line":1168},33,[671,1170,1171],{"class":700},"    restart",[671,1173,717],{"class":704},[671,1175,1176],{"class":681}," unless-stopped\n",[649,1178,1179,1184],{"icon":651},[391,1180,653,1181,1183],{},[411,1182,656],{}," Add a Watchtower label to automate updates:",[662,1185,1187],{"className":691,"code":1186,"filename":647,"language":693,"meta":651,"style":651},"---\nlabels:\n  - com.centurylinklabs.watchtower.enable=true\n",[541,1188,1189,1193,1200],{"__ignoreMap":651},[671,1190,1191],{"class":673,"line":674},[671,1192,917],{"class":677},[671,1194,1195,1198],{"class":673,"line":708},[671,1196,1197],{"class":700},"labels",[671,1199,705],{"class":704},[671,1201,1202,1204],{"class":673,"line":723},[671,1203,711],{"class":704},[671,1205,1206],{"class":681}," com.centurylinklabs.watchtower.enable=true\n",[391,1208,1209,1210,817],{},"Fill in your ",[541,1211,1212],{},".env",[662,1214,1218],{"className":1215,"code":1216,"filename":1212,"language":1217,"meta":651,"style":651},"language-properties shiki shiki-themes github-dark material-theme github-dark","PUID=\nPGID=\nDOMAIN=\nPLUGIN=\nEMAIL=\nZONE_ID=\nACCOUNT_ID=\nAPI_TOKEN=\nTUNNEL_NAME=\nTUNNEL_PW=\n","properties",[541,1219,1220,1229,1236,1243,1250,1257,1264,1271,1278,1285],{"__ignoreMap":651},[671,1221,1222,1226],{"class":673,"line":674},[671,1223,1225],{"class":1224},"szyEh","PUID",[671,1227,1228],{"class":704},"=\n",[671,1230,1231,1234],{"class":673,"line":708},[671,1232,1233],{"class":1224},"PGID",[671,1235,1228],{"class":704},[671,1237,1238,1241],{"class":673,"line":723},[671,1239,1240],{"class":1224},"DOMAIN",[671,1242,1228],{"class":704},[671,1244,1245,1248],{"class":673,"line":734},[671,1246,1247],{"class":1224},"PLUGIN",[671,1249,1228],{"class":704},[671,1251,1252,1255],{"class":673,"line":741},[671,1253,1254],{"class":1224},"EMAIL",[671,1256,1228],{"class":704},[671,1258,1259,1262],{"class":673,"line":760},[671,1260,1261],{"class":1224},"ZONE_ID",[671,1263,1228],{"class":704},[671,1265,1266,1269],{"class":673,"line":769},[671,1267,1268],{"class":1224},"ACCOUNT_ID",[671,1270,1228],{"class":704},[671,1272,1273,1276],{"class":673,"line":774},[671,1274,1275],{"class":1224},"API_TOKEN",[671,1277,1228],{"class":704},[671,1279,1280,1283],{"class":673,"line":976},[671,1281,1282],{"class":1224},"TUNNEL_NAME",[671,1284,1228],{"class":704},[671,1286,1287,1290],{"class":673,"line":984},[671,1288,1289],{"class":1224},"TUNNEL_PW",[671,1291,1228],{"class":704},[1293,1294,1295,1311],"table",{},[1296,1297,1298],"thead",{},[1299,1300,1301,1305,1308],"tr",{},[1302,1303,1304],"th",{},"Variable",[1302,1306,1307],{},"Value",[1302,1309,1310],{},"Example",[1312,1313,1314,1333,1349,1362,1379,1393,1407,1421,1434,1448],"tbody",{},[1299,1315,1316,1321,1328],{},[1317,1318,1319],"td",{},[541,1320,1225],{},[1317,1322,1323,1324,1327],{},"User ID (",[541,1325,1326],{},"id username",")",[1317,1329,1330],{},[541,1331,1332],{},"1000",[1299,1334,1335,1340,1345],{},[1317,1336,1337],{},[541,1338,1339],{},"GUID",[1317,1341,1342,1343,1327],{},"Group ID (",[541,1344,1326],{},[1317,1346,1347],{},[541,1348,1332],{},[1299,1350,1351,1355,1358],{},[1317,1352,1353],{},[541,1354,1240],{},[1317,1356,1357],{},"Your reserved domain",[1317,1359,1360],{},[541,1361,608],{},[1299,1363,1364,1368,1374],{},[1317,1365,1366],{},[541,1367,1247],{},[1317,1369,1370,1371,1327],{},"DNS provider (also configure ",[541,1372,1373],{},"cloudflare.ini",[1317,1375,1376],{},[541,1377,1378],{},"cloudflare",[1299,1380,1381,1385,1388],{},[1317,1382,1383],{},[541,1384,1254],{},[1317,1386,1387],{},"Email for the certificate",[1317,1389,1390],{},[541,1391,1392],{},"you@email.com",[1299,1394,1395,1399,1402],{},[1317,1396,1397],{},[541,1398,1261],{},[1317,1400,1401],{},"Cloudflare Zone ID",[1317,1403,1404],{},[541,1405,1406],{},"aNhcz1l3JfWbFZo2XMpzQlP2iOqk",[1299,1408,1409,1413,1416],{},[1317,1410,1411],{},[541,1412,1268],{},[1317,1414,1415],{},"Cloudflare Account ID",[1317,1417,1418],{},[541,1419,1420],{},"buKsjNHLyzKMM1qYnzOy4s7SHfly",[1299,1422,1423,1427,1429],{},[1317,1424,1425],{},[541,1426,1275],{},[1317,1428,572],{},[1317,1430,1431],{},[541,1432,1433],{},"53ydYus9TFFk1DOXNdP87iIcJtQjoW",[1299,1435,1436,1440,1443],{},[1317,1437,1438],{},[541,1439,1282],{},[1317,1441,1442],{},"Tunnel name",[1317,1444,1445],{},[541,1446,1447],{},"my_tunnel",[1299,1449,1450,1454,1457],{},[1317,1451,1452],{},[541,1453,1289],{},[1317,1455,1456],{},"Strong, random password",[1317,1458,1459],{},[541,1460,1461],{},"iSzKRmP4VbnlsMvdSdgBEJiJi",[391,1463,1464,1465,439],{},"Once done, deploy the stack. Check the logs: you should reach ",[541,1466,1467],{},"server ready",[391,1469,1470,1471,1474,1475,1479,1480,439],{},"Then confirm your tunnel appears under ",[406,1472,1473],{},"Networks > Tunnels"," in ",[432,1476,133],{"href":1477,"rel":1478},"https:\u002F\u002Fone.dash.cloudflare.com\u002F",[514],". By default, all subdomains will be routed through the tunnel, no need to define them ",[432,1481,1482],{"href":507},"in your DNS zone",[649,1484,653,1485,1487,1488,1490,1491,1494,1495],{"icon":651,"to":507},[411,1486,656],{}," If you want to expose a service without a tunnel, just define an A record ",[411,1489,1482],{},". If resolution fails, disable the proxy function for that record, e.g. for ",[541,1492,1493],{},"sub.mondomaine.fr",".\n",[394,1496],{"alt":1497,"src":1498},"dns","\u002Fimg\u002Fserveex\u002Fcf-dns.png",[499,1500,1502],{"id":1501},"done","Done !",[399,1504,1506],{"id":1505},"managing-multiple-tunnels-for-multiple-servers","Managing Multiple Tunnels for Multiple Servers",[391,1508,1509],{},"By default, all subdomains of your domain are routed through the single tunnel. But if you have a second server, just change the tunnel name in that SWAG instance, and redirect subdomains to the correct tunnel in your DNS zone.",[631,1511,1512,1516,1525,1529,1538,1544,1548,1565,1615],{"level":633},[499,1513,1515],{"id":1514},"change-the-tunnel-name","Change the tunnel name",[391,1517,1518,1519,1521,1522,1524],{},"In the second server's SWAG stack, set a different ",[541,1520,1282],{}," in the ",[541,1523,1212],{}," file, then redeploy.",[499,1526,1528],{"id":1527},"find-the-tunnel-ids","Find the tunnel IDs",[391,1530,1531,1532,1474,1534,1537],{},"Go to ",[406,1533,1473],{},[432,1535,133],{"href":1477,"rel":1536},[514]," and note the tunnel IDs:",[391,1539,1540],{},[394,1541],{"alt":1542,"src":1543},"tunnels_id","\u002Fimg\u002Fserveex\u002Fcf-tunnels-id.png",[499,1545,1547],{"id":1546},"add-cname-records","Add CNAME records",[391,1549,1550,1551,1556,1557,1560,1561,1564],{},"In the ",[432,1552,1555],{"href":1553,"rel":1554},"https:\u002F\u002Fdash.cloudflare.com\u002F",[514],"Cloudflare DNS dashboard",", click your domain name, then ",[541,1558,1559],{},"Add Record"," and add these two CNAME records (include ",[541,1562,1563],{},".cfargotunnel.com","):",[1293,1566,1567,1580],{},[1296,1568,1569],{},[1299,1570,1571,1574,1577],{},[1302,1572,1573],{},"Type",[1302,1575,1576],{},"Name",[1302,1578,1579],{},"Target",[1312,1581,1582,1599],{},[1299,1583,1584,1589,1594],{},[1317,1585,1586],{},[541,1587,1588],{},"CNAME",[1317,1590,1591],{},[541,1592,1593],{},"subdomain1",[1317,1595,1596],{},[541,1597,1598],{},"yourtunnelid1.cfargotunnel.com",[1299,1600,1601,1605,1610],{},[1317,1602,1603],{},[541,1604,1588],{},[1317,1606,1607],{},[541,1608,1609],{},"subdomain2",[1317,1611,1612],{},[541,1613,1614],{},"yourtunnelid2.cfargotunnel.com",[499,1616,1502],{"id":1617},"done-1",[391,1619,1620],{},"If you have many subdomains, point them to the above reference subdomains.",[391,1622,1623],{},"This way, if a tunnel ID changes, you only update one DNS record.",[391,1625,1626],{},"Example:",[444,1628,1629],{},[447,1630,1631,435,1634,1637,1638,717],{},[541,1632,1633],{},"sub1",[541,1635,1636],{},"sub2"," also point to the server behind ",[541,1639,1593],{},[1293,1641,1642,1652],{},[1296,1643,1644],{},[1299,1645,1646,1648,1650],{},[1302,1647,1573],{},[1302,1649,1576],{},[1302,1651,1579],{},[1312,1653,1654,1668],{},[1299,1655,1656,1660,1664],{},[1317,1657,1658],{},[541,1659,1588],{},[1317,1661,1662],{},[541,1663,1633],{},[1317,1665,1666],{},[541,1667,1593],{},[1299,1669,1670,1674,1678],{},[1317,1671,1672],{},[541,1673,1588],{},[1317,1675,1676],{},[541,1677,1636],{},[1317,1679,1680],{},[541,1681,1593],{},[444,1683,1684],{},[447,1685,1686,435,1689,1692,1693,717],{},[541,1687,1688],{},"sub3",[541,1690,1691],{},"sub4"," point to the server behind ",[541,1694,1609],{},[1293,1696,1697,1707],{},[1296,1698,1699],{},[1299,1700,1701,1703,1705],{},[1302,1702,1573],{},[1302,1704,1576],{},[1302,1706,1579],{},[1312,1708,1709,1723],{},[1299,1710,1711,1715,1719],{},[1317,1712,1713],{},[541,1714,1588],{},[1317,1716,1717],{},[541,1718,1688],{},[1317,1720,1721],{},[541,1722,1609],{},[1299,1724,1725,1729,1733],{},[1317,1726,1727],{},[541,1728,1588],{},[1317,1730,1731],{},[541,1732,1691],{},[1317,1734,1735],{},[541,1736,1609],{},[1738,1739,1740],"style",{},"html pre.shiki code .sEgDM, html code.shiki .sEgDM{--shiki-light:#B392F0;--shiki-default:#FFCB6B;--shiki-dark:#B392F0}html pre.shiki code .s11XM, html code.shiki .s11XM{--shiki-light:#9ECBFF;--shiki-default:#C3E88D;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sRuoG, html code.shiki .sRuoG{--shiki-light:#85E89D;--shiki-default:#F07178;--shiki-dark:#85E89D}html pre.shiki code .s8jd1, html code.shiki .s8jd1{--shiki-light:#E1E4E8;--shiki-default:#89DDFF;--shiki-dark:#E1E4E8}html pre.shiki code .s8K8j, html code.shiki .s8K8j{--shiki-light:#9ECBFF;--shiki-default:#89DDFF;--shiki-dark:#9ECBFF}html pre.shiki code .sJPTy, html code.shiki .sJPTy{--shiki-light:#F97583;--shiki-default:#89DDFF;--shiki-dark:#F97583}html pre.shiki code .slcoZ, html code.shiki .slcoZ{--shiki-light:#E1E4E8;--shiki-default:#EEFFFF;--shiki-dark:#E1E4E8}html pre.shiki code .soUAX, html code.shiki .soUAX{--shiki-light:#79B8FF;--shiki-default:#89DDFF;--shiki-dark:#79B8FF}html pre.shiki code .swwWl, html code.shiki .swwWl{--shiki-light:#79B8FF;--shiki-default:#F78C6C;--shiki-dark:#79B8FF}html pre.shiki code .szyEh, html code.shiki .szyEh{--shiki-light:#F97583;--shiki-default:#F07178;--shiki-dark:#F97583}",{"title":651,"searchDepth":708,"depth":708,"links":1742},[1743,1744,1749,1755],{"id":401,"depth":708,"text":101},{"id":496,"depth":708,"text":497,"children":1745},[1746,1747,1748],{"id":501,"depth":723,"text":37},{"id":532,"depth":723,"text":533},{"id":579,"depth":723,"text":133},{"id":600,"depth":708,"text":601,"children":1750},[1751,1752,1753,1754],{"id":636,"depth":723,"text":637},{"id":803,"depth":723,"text":804},{"id":903,"depth":723,"text":904},{"id":1501,"depth":723,"text":1502},{"id":1505,"depth":708,"text":1506,"children":1756},[1757,1758,1759,1760],{"id":1514,"depth":723,"text":1515},{"id":1527,"depth":723,"text":1528},{"id":1546,"depth":723,"text":1547},{"id":1617,"depth":723,"text":1502},[1762],"Djeex","Use Cloudflare Tunnels and Zero Trust to expose homelab services without opening ports, configure SWAG and manage multiple tunnels.","md",null,{},{"title":133,"description":1763},"52cJyJkn0tLwPPnIDr9F7aAORU2VGiRYNo58-sNKhhE",[1770,1772],{"title":123,"path":124,"stem":125,"description":1771,"children":-1},"Set up SWAG as a reverse proxy with automatic SSL, expose your services securely, and configure geo-blocking on your homelab.",{"title":137,"path":138,"stem":139,"description":1773,"children":-1},"Install TinyAuth, a lightweight forward-auth proxy, and pair it with Pocket ID to add SSO login in front of your self-hosted apps. Protect your app behind Swag with forward-auth.",1788645846066]