<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://err404.numericore.com/en/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>Err404 - notes:file_server_training</title>
        <description></description>
        <link>https://err404.numericore.com/en/</link>
        <lastBuildDate>Mon, 11 May 2026 14:03:27 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>https://err404.numericore.com/en/_media/wiki/logo.png</url>
            <title>Err404</title>
            <link>https://err404.numericore.com/en/</link>
        </image>
        <item>
            <title>dns</title>
            <link>https://err404.numericore.com/en/notes/file_server_training/dns</link>
            <description>&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;tabs plugin_wrap&quot;&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://err404.numericore.com/en//notes/file_server_training/dns&quot; class=&quot;urlextern&quot; title=&quot;https://err404.numericore.com/en//notes/file_server_training/dns&quot;&gt;English&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://err404.numericore.com/fr//notes/formation_serveur_de_fichiers/dns&quot; class=&quot;urlextern&quot; title=&quot;https://err404.numericore.com/fr//notes/formation_serveur_de_fichiers/dns&quot;&gt;Français&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
an authoritative dns server (SOA dns) will be used to declare that the server is authoritative for certain domain names.&lt;br /&gt;
which will make it easy to define lots of sub-domains without having to change the registrar settings.
&lt;/p&gt;

&lt;p&gt;
I chose to use &lt;a href=&quot;https://www.nlnetlabs.nl/projects/nsd/about/&quot; class=&quot;urlextern&quot; title=&quot;https://www.nlnetlabs.nl/projects/nsd/about/&quot;&gt;nsd&lt;/a&gt;, but I could have used &lt;a href=&quot;https://www.knot-dns.cz/&quot; class=&quot;urlextern&quot; title=&quot;https://www.knot-dns.cz/&quot;&gt;knot&lt;/a&gt;&lt;br /&gt;
it&amp;#039;s preferable to install the domain name server in a virtual machine rather than in the hypervisor to make backups easier.
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_button plugin_wrap&quot;&gt;
&lt;p&gt;
and in my case I chose to install the authoritative dns server in the same machine that does &lt;a href=&quot;https://err404.numericore.com/en/notes/file_server_training/rpsni&quot; class=&quot;wikilink1&quot; title=&quot;notes:file_server_training:rpsni&quot; data-wiki-id=&quot;notes:file_server_training:rpsni&quot;&gt;reverse proxy SNI&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit5&quot; id=&quot;nsd&quot;&gt;nsd&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
install the &lt;code&gt;nsd&lt;/code&gt; package available in Debian&lt;br /&gt;
&lt;code&gt;aptitude install nsd&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
we&amp;#039;ll have to edit a few files, then edit an additional file for each dns zone
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;nsd&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;nsd&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;810-982&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;nsdconf&quot;&gt;nsd.conf&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;code&gt;/etc/nsd/nsd.conf:&lt;/code&gt;
&lt;/p&gt;
&lt;pre class=&quot;code conf&quot;&gt;# NSD configuration file for Debian.
#
# See the nsd.conf(5) man page.
#
# See /usr/share/doc/nsd/examples/nsd.conf for a commented
# reference config file.
&amp;nbsp;
server:
        # log only to syslog.
        log-only-syslog: yes
&amp;nbsp;
ip-address: 2a02:8428:753:5002:97dc:9048:0:53
ip-address: 192.168.1.7
&amp;nbsp;
# use this number of cpu cores
server-count: 1
&amp;nbsp;
# We recommend leaving this empty, otherwise use &amp;quot;/var/db/nsd/nsd.db&amp;quot;
database: &amp;quot;&amp;quot;
&amp;nbsp;
#  the default file used for the nsd-control addzone and delzone commands
# zonelistfile: &amp;quot;/var/db/nsd/zone.list&amp;quot;
# The unprivileged user that will run NSD, can also be set to &amp;quot;&amp;quot; if
# user privilige protection is not needed
username: nsd
&amp;nbsp;
# Default file where all the log messages go
#logfile: &amp;quot;/var/log/nsd.log&amp;quot;
&amp;nbsp;
# Use this pid file instead of the platform specific default
pidfile: &amp;quot;/var/run/nsd.pid&amp;quot;
&amp;nbsp;
# don&#039;t answer VERSION.BIND and VERSION.SERVER CHAOS class queries
hide-version: yes
hide-identity: yes
&amp;nbsp;
&amp;nbsp;
# Enable if privilege &amp;quot;jail&amp;quot; is needed for unprivileged user. Note
# that other file paths may break when using chroot
# chroot: &amp;quot;/etc/nsd/&amp;quot;
# The default zone transfer file
# xfrdfile: &amp;quot;/var/db/nsd/xfrd.state&amp;quot;
# The default working directory before accessing zone files
# zonesdir: &amp;quot;/etc/nsd&amp;quot;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
# The following line includes additional configuration files from the
# /etc/nsd/nsd.conf.d directory.
&amp;nbsp;
include: &amp;quot;/etc/nsd/nsd.conf.d/*.conf&amp;quot;&lt;/pre&gt;

&lt;p&gt;
we add a zone file, in my case I have a zone for &lt;code&gt;err404.numericore.com&lt;/code&gt; and sub-domains like &lt;code&gt;visio.err404.numericore.com&lt;/code&gt; and another zone for &lt;code&gt;ikce.numericore.com&lt;/code&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;nsd.conf&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;nsdconf&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;983-2598&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;zonesconf&quot;&gt;zones.conf&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
/etc/nsd/nsd.conf.d/zones.conf:
&lt;/p&gt;
&lt;pre class=&quot;code conf&quot;&gt;zone:
    name: ikce.numericore.com
    zonefile: /etc/nsd/nsd.conf.d/ikce.numericore.com.zone
&amp;nbsp;
zone:
    name: err404.numericore.com
    zonefile: /etc/nsd/nsd.conf.d/err404.numericore.com.zone&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;zones.conf&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;zonesconf&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;2599-2871&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;err404numericorecomzone&quot;&gt;err404.numericore.com.zone&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;span class=&quot;wrap_info &quot;&gt; Beware, there&amp;#039;s a trap that has stuck me for quite a long time:&lt;/span&gt;&lt;br /&gt;
in the line &lt;code&gt;@ IN SOA ns.err404.numericore.com. err404.numericore.com. &lt;/code&gt; (the field &lt;code&gt;err404.numericore.com.&lt;/code&gt; is actually an email address
&lt;/p&gt;

&lt;p&gt;
on the other hand, be careful not to forget the period after domain names
&lt;/p&gt;

&lt;p&gt;
I use public ip:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; in ipv4 I&amp;#039;ll use the box&amp;#039;s public ip and redirect port 53 to the machine hosting my dns service&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; in ipv6 I&amp;#039;ll directly indicate the public ipv6 of the machine hosting my dns service&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
the line containing Serial is simply a serial number that must be strictly increasing each time the file is updated, so we&amp;#039;ll often use a current date and increment&lt;br /&gt;
/etc/nsd/nsd.conf.d/err404.numericore.com.zone:
&lt;/p&gt;
&lt;pre class=&quot;code conf&quot;&gt;$ORIGIN err404.numericore.com.
$TTL 7200
&amp;nbsp;
@       IN      SOA    ns.err404.numericore.com. err404.numericore.com. (
                                                2021042514 ; Serial
                                                7200       ; Refresh
                                                1800       ; Retry
                                                1209600    ; Expire
                                                86400 )    ; Minimum
&amp;nbsp;
; NAMESERVERS
&amp;nbsp;
@                   IN                NS                   ns.err404.numericore.com.
&amp;nbsp;
ns                  IN                A                    77.129.238.159
ns                  IN                AAAA                 2a02:8428:753:5002:97dc:9048:0:53
&amp;nbsp;
&amp;nbsp;
; A RECORDS
@                                   A          77.129.238.159
@                                   AAAA       2a02:8428:753:5002:fcb3:ff:fe8a:3b80
visio                               A          77.129.238.159
visio                               AAAA       2a02:8428:753:5002:fcb3:ff:fe8a:3b80&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;$ORIGIN err404.numericore.com.&lt;/code&gt; will be used as variable for the rest of the file&lt;br /&gt;
&lt;code&gt;@&lt;/code&gt; will be replaced by the variable &lt;code&gt;$ORIGIN&lt;/code&gt;&lt;br /&gt;
so we will define ip for &lt;code&gt;err404.numericore.com&lt;/code&gt; and &lt;code&gt;visio.err404.numericore.com&lt;/code&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;err404.numericore.com.zone&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;err404numericorecomzone&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;2872-4911&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit9&quot; id=&quot;the_box&quot;&gt;the box&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
and finally, on the box, redirect ports 53 to the ip of the machine hosting the authoritative dns server –authoritative–.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;the box&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_box&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;4912-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 13 Jan 2026 08:19:58 +0000</pubDate>
        </item>
        <item>
            <title>rpsni</title>
            <link>https://err404.numericore.com/en/notes/file_server_training/rpsni</link>
            <description>&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;tabs plugin_wrap&quot;&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://err404.numericore.com/en//notes/file_server_training/rpsni&quot; class=&quot;urlextern&quot; title=&quot;https://err404.numericore.com/en//notes/file_server_training/rpsni&quot;&gt;English&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://err404.numericore.com/fr//notes/formation_serveur_de_fichiers/rpsni&quot; class=&quot;urlextern&quot; title=&quot;https://err404.numericore.com/fr//notes/formation_serveur_de_fichiers/rpsni&quot;&gt;Français&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
You only need a reverse proxy &lt;strong&gt;if you don&amp;#039;t have ipv6&lt;/strong&gt;.&lt;br /&gt;
and as not everyone has ipv6 yet (there are even people who will disable ipv6 on their machine…) we&amp;#039;ll set up a reverse proxy:
&lt;/p&gt;

&lt;p&gt;
simply install a Haproxy server, either in the hypervisor or in a virtual machine.
&lt;/p&gt;

&lt;p&gt;
it&amp;#039;s preferable to install the reverse proxy in a virtual machine or container rather than in the hypervisor, to make backups easier.
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_button plugin_wrap&quot;&gt;
&lt;p&gt;
and in my case I chose to install the reverse proxy in the same machine that does &lt;a href=&quot;https://err404.numericore.com/en/notes/file_server_training/dns&quot; class=&quot;wikilink1&quot; title=&quot;notes:file_server_training:dns&quot; data-wiki-id=&quot;notes:file_server_training:dns&quot;&gt;authoritative domain name server&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
in my case, virtual machines and containers have ipv6, so domain names go directly to these machines, no need for a &lt;em&gt;reverse proxy sni&lt;/em&gt; for ipv6.&lt;br /&gt;
the problem is that I only have &lt;strong&gt;one public ipv4&lt;/strong&gt; (my ISP&amp;#039;s box) and I&amp;#039;m obliged to share this single public ipv4 for all my virtual machines or containers.&lt;br /&gt;
it&amp;#039;s to enable this cohabitation that I install a reverse proxy sni.
&lt;/p&gt;

&lt;p&gt;
with ipv6, it&amp;#039;s simple: all the machines have direct access to the Internet and can be reached directly from the Internet, they&amp;#039;re independent and don&amp;#039;t have port-sharing problems, so no address translation problems.
&lt;/p&gt;
&lt;div id=&quot;plugin__gallery_7fcc&quot; class=&quot;plugin-gallery align-center&quot;&gt;&lt;div class=&quot;gallery-page&quot; id=&quot;gallery__7fcc_0&quot; style=&quot;grid-template-columns: repeat(auto-fill, minmax(300px, 1fr))&quot;&gt;&lt;figure class=&quot;gallery-image&quot; style=&quot;max-width: 300px; &quot;&gt;&lt;a href=&quot;https://err404.numericore.com/en/_detail/notes/file_server_training/ipv4_vs_ipv6_en_.svg?id=notes%3Afile_server_training%3Arpsni&quot; title=&quot;Ipv4 Vs Ipv6 En &quot; data-caption=&quot;&amp;lt;b&amp;gt;Ipv4 Vs Ipv6 En &amp;lt;/b&amp;gt;&quot; class=&quot;lightbox JSnocheck&quot; rel=&quot;lightbox[gal-51955d87a3727bf72b64968dca73]&quot; data-url=&quot;/en/_media/notes/file_server_training/ipv4_vs_ipv6_en_.svg&quot;&gt;&lt;img width=&quot;600&quot; height=&quot;600&quot; src=&quot;/en/_media/notes/file_server_training/ipv4_vs_ipv6_en_.svg?w=600&amp;amp;h=600&amp;amp;tok=8ee9d5&quot; alt=&quot;ipv4_vs_ipv6_en_.svg&quot; loading=&quot;lazy&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h1 class=&quot;sectionedit5&quot; id=&quot;Reverse_proxy_sni&quot;&gt;Reverse proxy sni&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Install the &lt;code&gt;haproxy&lt;/code&gt; package available in Debian &lt;code&gt;apt install haproxy&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Only one file to edit: 
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;/etc/haproy/haproxy.cfg&lt;/code&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code conf&quot;&gt;global
        log /dev/log    local0 info
        log /dev/log    local1 info
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin
        stats timeout 30s
        user haproxy
        group haproxy
        daemon
&amp;nbsp;
&amp;nbsp;
        # Default SSL material locations
       ca-base /etc/ssl/certs
       crt-base /etc/ssl/private
&amp;nbsp;
        # See: https://ssl-config.mozilla.org/#server=haproxy&amp;amp;server-version=2.0.3&amp;amp;config=intermediate
        ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
        ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
        ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
&amp;nbsp;
defaults
        log     global
        option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http
&amp;nbsp;
&amp;nbsp;
############################
&amp;nbsp;
frontend http_in
        mode http
        option httplog
        bind [::]:80 v6only
        bind *:80
        option forwardfor
        http-request add-header X-Forwarded-For %[src]
        http-request set-header X-Forwarded-Proto https if { ssl_fc }
&amp;nbsp;
        acl host_err404 hdr(host) -i err404.numericore.com
        acl host_err404 hdr(host) -i visio.err404.numericore.com
&amp;nbsp;
        acl host_ikce hdr(host) -i ikce.numericore.com
&amp;nbsp;
&amp;nbsp;
        use_backend http_err404 if host_err404
        use_backend http_ikce if host_ikce
&amp;nbsp;
&amp;nbsp;
backend http_err404
        mode http
        option forwardfor
        balance roundrobin
        server server1 ct-err404:80
&amp;nbsp;
backend http_ikce
        mode http
        option forwardfor
        balance roundrobin
        server server1 ct-ikce:80
&amp;nbsp;
&amp;nbsp;
#######################
frontend tcp_https
        mode tcp
        option tcplog
        bind [::]:443 v6only
        bind *:443
        acl tls req.ssl_hello_type 1
        tcp-request inspect-delay 5s
        tcp-request content accept if tls
&amp;nbsp;
&amp;nbsp;
        acl host_err404 req.ssl_sni -i err404.numericore.com
        acl host_err404 req.ssl_sni -i visio.err404.numericore.com
&amp;nbsp;
        acl host_ikce req.ssl_sni -i ikce.numericore.com
&amp;nbsp;
&amp;nbsp;
        use_backend tcp_err404 if host_err404
        use_backend tcp_ikce if host_ikce
&amp;nbsp;
&amp;nbsp;
backend tcp_err404
  mode tcp
  option ssl-hello-chk
  balance roundrobin
  server err404 ct-err404:443 send-proxy check
&amp;nbsp;
backend tcp_ikce
  mode tcp
  option ssl-hello-chk
  balance roundrobin
  server ikce ct-ikce:443 send-proxy check
&amp;nbsp;
############### 
frontend port1935
  mode tcp
  option tcplog
  bind [::]:1935 v6only
  bind *:1935
  acl err404_1935 req.ssl_sni -i err404.numericore.com
&amp;nbsp;
&amp;nbsp;
  use_backend err404_1935 if err404_1935
&amp;nbsp;
&amp;nbsp;
backend err404_1935
  mode tcp
  balance roundrobin
  server err404 ct-err404:1935 send-proxy&lt;/pre&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt; bind [::]:80 v6only&lt;/code&gt; &lt;code&gt;bind *:80&lt;/code&gt; to listen in ipv4  AND ipv6&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; I added an example for 1935 port&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;ct-err404&lt;/code&gt; and &lt;code&gt;ct-ikce&lt;/code&gt; are my conteneurs&amp;#039;s names, resolved by my own resolver, you can write your ip directly if you want.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Reverse proxy sni&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;Reverse_proxy_sni&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;1420-5149&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit6&quot; id=&quot;Machines_virtual_containers_or_other&quot;&gt;Machines (virtual, containers, or other)&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
You will also need to modify the nginx files on the machines concerned (in my case, these are the machines ikce.numericore.com and err404.numericore.com)
&lt;/p&gt;

&lt;p&gt;
In err404.numericore.com:
&lt;/p&gt;

&lt;p&gt;
Simply add `proxy_protocol` in the `server` segment and only for port 443
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Do not touch ipv6 since in my case the machines have public ipv6.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Here is an excerpt from the `/etc/nginx/conf.d/err404.numericore.com.conf` file:
&lt;/p&gt;
&lt;pre class=&quot;code conf&quot;&gt;server {
    listen 443 ssl http2 proxy_protocol;
    listen [::]:443 ssl http2;                            
    server_name err404.numericore.com;&lt;/pre&gt;

&lt;p&gt;
When you modify the nginx configuration file, Yunohost will not be happy and will refuse to update them because they have been modified.
&lt;/p&gt;

&lt;p&gt;
You must do the same for the other virtual machines (ikce.numericore.com in my case).
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;To obtain the real IP addresses of clients in IPv4 (and not just the reverse proxy IP address):&lt;/strong&gt;&lt;br /&gt;
Here is an excerpt from the `/etc/nginx.conf` file:
&lt;/p&gt;
&lt;pre class=&quot;code conf&quot;&gt;http {
    real_ip_header proxy_protocol;
    real_ip_recursive on;
    set_real_ip_from 192.168.1.20;&lt;/pre&gt;

&lt;p&gt;
Replace 192.168.1.20 with the IP address of your reverse proxy SNI.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Machines (virtual, containers, or other)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;Machines_virtual_containers_or_other&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;5150-6356&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit7&quot; id=&quot;The_box&quot;&gt;The box&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
On the box, you need to redirect ports 80 and 443 to the IP address of the machine hosting the reverse proxy SNI.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;The box&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;The_box&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;6357-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 13 Jan 2026 22:53:34 +0000</pubDate>
        </item>
        <item>
            <title>start</title>
            <link>https://err404.numericore.com/en/notes/file_server_training/start</link>
            <description>&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;tabs plugin_wrap&quot;&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://err404.numericore.com/en//notes/file_server_training/&quot; class=&quot;urlextern&quot; title=&quot;https://err404.numericore.com/en//notes/file_server_training/&quot;&gt;English&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://err404.numericore.com/fr//notes/formation_serveur_de_fichiers/&quot; class=&quot;urlextern&quot; title=&quot;https://err404.numericore.com/fr//notes/formation_serveur_de_fichiers/&quot;&gt;Français&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit3&quot; id=&quot;Files_server&quot;&gt;Files server&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
The purpose of this training is to facilitate the setup, management, and maintenance of a &lt;strong&gt;self-hosted&lt;/strong&gt; &lt;strong&gt;personal website&lt;/strong&gt; and related services.&lt;br /&gt;
Required equipment
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Files server&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;Files_server&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;188-384&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit4&quot; id=&quot;Hardware_requirements&quot;&gt;Hardware requirements&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; A USB key to copy &lt;strong&gt;Proxmox ve&lt;/strong&gt; install &lt;a href=&quot;https://enterprise.proxmox.com/iso/&quot; class=&quot;urlextern&quot; title=&quot;https://enterprise.proxmox.com/iso/&quot;&gt;https://enterprise.proxmox.com/iso/&lt;/a&gt; (if the Proxmox way is chosen)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;     A computer connected to the Internet that will be dedicated to hosting services, otherwise use a hosting service&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;img src=&quot;https://err404.numericore.com/en/_media/notes/files_server_on_a_old_laptop.jpg?w=800&amp;amp;tok=259d83&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;800&quot; /&gt;&lt;a href=&quot;https://err404.numericore.com/en/_detail/notes/server-err404-tmplab.jpg?id=notes%3Afile_server_training%3Astart&quot; class=&quot;media&quot; title=&quot;notes:server-err404-tmplab.jpg&quot;&gt;&lt;img src=&quot;https://err404.numericore.com/en/_media/notes/server-err404-tmplab.jpg?w=800&amp;amp;tok=973dcd&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;800&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Hardware requirements&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;Hardware_requirements&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;385-752&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit5&quot; id=&quot;Optional_services&quot;&gt;Optional services&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Optional services&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;Optional_services&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;753-784&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;authoritative_domain_name_server&quot;&gt;authoritative domain name server&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
In my case, I chose to have an &lt;a href=&quot;https://err404.numericore.com/en/notes/file_server_training/dns&quot; class=&quot;wikilink1&quot; title=&quot;notes:file_server_training:dns&quot; data-wiki-id=&quot;notes:file_server_training:dns&quot;&gt;authoritative domain name server&lt;/a&gt;, &lt;strong&gt;but this is not mandatory&lt;/strong&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;authoritative domain name server&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;authoritative_domain_name_server&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;785-961&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;SNI_reverse_proxy&quot;&gt;SNI reverse proxy&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The &lt;a href=&quot;https://err404.numericore.com/en/notes/file_server_training/rpsni&quot; class=&quot;wikilink1&quot; title=&quot;notes:file_server_training:rpsni&quot; data-wiki-id=&quot;notes:file_server_training:rpsni&quot;&gt;SNI reverse proxy&lt;/a&gt; is only necessary if you want to have several virtual machines (or containers) sharing the same public IPv4 address.
&lt;/p&gt;
&lt;div id=&quot;plugin__gallery_7fcc&quot; class=&quot;plugin-gallery align-center&quot;&gt;&lt;div class=&quot;gallery-page&quot; id=&quot;gallery__7fcc_0&quot; style=&quot;grid-template-columns: repeat(auto-fill, minmax(300px, 1fr))&quot;&gt;&lt;figure class=&quot;gallery-image&quot; style=&quot;max-width: 300px; &quot;&gt;&lt;a href=&quot;https://err404.numericore.com/en/_detail/notes/file_server_training/ipv4_vs_ipv6_en_.svg?id=notes%3Afile_server_training%3Astart&quot; title=&quot;Ipv4 Vs Ipv6 En &quot; data-caption=&quot;&amp;lt;b&amp;gt;Ipv4 Vs Ipv6 En &amp;lt;/b&amp;gt;&quot; class=&quot;lightbox JSnocheck&quot; rel=&quot;lightbox[gal-a8e9b89b7c3e12a3d700ceee0285]&quot; data-url=&quot;/en/_media/notes/file_server_training/ipv4_vs_ipv6_en_.svg&quot;&gt;&lt;img width=&quot;600&quot; height=&quot;600&quot; src=&quot;/en/_media/notes/file_server_training/ipv4_vs_ipv6_en_.svg?w=600&amp;amp;h=600&amp;amp;tok=8ee9d5&quot; alt=&quot;ipv4_vs_ipv6_en_.svg&quot; loading=&quot;lazy&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;
As can be seen in the diagram, IPv6 is easier to configure than when you only have one public IPv4 address.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;SNI reverse proxy&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;SNI_reverse_proxy&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;962-1326&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit8&quot; id=&quot;Installations&quot;&gt;Installations&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
I recommend installing a hypervisor (Proxmox) to host the virtual machines or containers for the website and associated services. It is possible to use a hypervisor other than Proxmox, such as virt-manager, VirtualBox, etc.&lt;br /&gt;
In any case, it is preferable to configure the network in bridge mode to avoid having to manage NAT redirection.&lt;br /&gt;
Proxmox uses bridges by default, which suits our needs.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Installations&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;Installations&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;1327-1747&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit9&quot; id=&quot;Proxmox&quot;&gt;Proxmox&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Copy the Proxmox ISO to the USB key and boot the computer from it.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Follow the installation steps: xfs, root:30GB.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Proxmox configuration.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Add the user &lt;em&gt;user&lt;/em&gt;&lt;a href=&quot;https://your_server_proxmox:8006/#&quot; class=&quot;urlextern&quot; title=&quot;https://your_server_proxmox:8006/#&quot;&gt;https://your_server_proxmox:8006/#&lt;/a&gt; v1:0:18:4:::::::14&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Give them admin rights: &lt;a href=&quot;https://your_server_proxmox:8006/#v1:0:18:4:::::::6&quot; class=&quot;urlextern&quot; title=&quot;https://your_server_proxmox:8006/#v1:0:18:4:::::::6&quot;&gt;https://your_server_proxmox:8006/#v1:0:18:4:::::::6&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Edit /etc/ssh/sshd_config: permitrootlogin no&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Proxmox&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;Proxmox&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;1748-2127&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;Yunohost&quot;&gt;Yunohost&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Yunohost can be installed in two ways in Proxmox: as a virtual machine or as a container. This will depend on your process isolation requirements.
&lt;/p&gt;

&lt;p&gt;
I recommend installing Yunohost as a container, but if you want to install it as a virtual machine, instructions are available here: &lt;a href=&quot;https://err404.numericore.com/en/notes/file_server_training/yunohost_VM/start&quot; class=&quot;wikilink1&quot; title=&quot;notes:file_server_training:yunohost_VM:start&quot; data-wiki-id=&quot;notes:file_server_training:yunohost_VM:start&quot;&gt;Yunohost as a virtual machine&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Yunohost&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;Yunohost&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;2128-2508&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit11&quot; id=&quot;Yunohost_installation_in_container&quot;&gt;Yunohost installation (in container)&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Yunohost is installed in an existing container:
&lt;/p&gt;

&lt;p&gt;
Yunohost is based on Debian, so I install a Debian container:
&lt;/p&gt;

&lt;p&gt;
(documentation: &lt;a href=&quot;https://pve.proxmox.com/wiki/Linux_Container#pct_container_images&quot; class=&quot;urlextern&quot; title=&quot;https://pve.proxmox.com/wiki/Linux_Container#pct_container_images&quot;&gt;https://pve.proxmox.com/wiki/Linux_Container#pct_container_images&lt;/a&gt;)&lt;br /&gt;
(documentation: &lt;a href=&quot;https://doc.yunohost.org/en/admin/get_started/install_on/on_top_of_debian&quot; class=&quot;urlextern&quot; title=&quot;https://doc.yunohost.org/en/admin/get_started/install_on/on_top_of_debian&quot;&gt;https://doc.yunohost.org/en/admin/get_started/install_on/on_top_of_debian&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
Here are some commands to run as root in the Proxmox terminal to add the container images: 
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;pveam update&lt;/pre&gt;

&lt;p&gt;
 (updates the list of available container images)
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;pveam available &lt;span class=&quot;re5&quot;&gt;--section&lt;/span&gt; system &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; debian&lt;/pre&gt;

&lt;p&gt;
 (displays the list of Debian containers only)
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;pveam download &lt;span class=&quot;kw3&quot;&gt;local&lt;/span&gt; debian-&lt;span class=&quot;nu0&quot;&gt;12&lt;/span&gt;-standard_12.7-&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;_amd64.tar.zst&lt;/pre&gt;

&lt;p&gt;
 (downloads the latest available Debian image)
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; When the download is complete, you can create a container from this image. 20 &lt;abbr title=&quot;Gigabyte&quot;&gt;GB&lt;/abbr&gt; of disk space should be sufficient.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Start the container…&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Once in the container as root, retrieve the yunohost installation script and execute it:&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;root
apt update
&lt;span class=&quot;kw2&quot;&gt;wget&lt;/span&gt; install.yunohost.org &lt;span class=&quot;re5&quot;&gt;-O&lt;/span&gt; install.yunohost.sh
&lt;span class=&quot;kw2&quot;&gt;chmod&lt;/span&gt; +x install.yunohost.sh
&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;root&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;install.yunohost.sh&lt;/pre&gt;

&lt;p&gt;
Once the basic installation is complete, simply go to the web browser to continue. Or type ‘yunohost tools postinstall’ in the command line.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Yunohost installation (in container)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;Yunohost_installation_in_container&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;2509-3782&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit12&quot; id=&quot;Get_a_domain_name&quot;&gt;Get a domain name&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; either with yunohost&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; or from a registrar&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Once the domain name is registered, you just need to generate the certificate on the Yunohost/admin side.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Get a domain name&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;Get_a_domain_name&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;3783-3972&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit13&quot; id=&quot;Authoritative_domain_name_server_optional&quot;&gt;Authoritative domain name server (optional)&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
if you want to have subdomains and manage them yourself (which will avoid having to go through the registrar for each change).&lt;br /&gt;
you must then declare your main domain name as SOA, i.e. set up and declare an &lt;a href=&quot;https://err404.numericore.com/en/notes/file_server_training/dns&quot; class=&quot;wikilink1&quot; title=&quot;notes:file_server_training:dns&quot; data-wiki-id=&quot;notes:file_server_training:dns&quot;&gt;authoritative domain name server&lt;/a&gt;.&lt;br /&gt;
For example, with nsd (which I chose) or knot (which I have not yet tested).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Authoritative domain name server (optional)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;Authoritative_domain_name_server_optional&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;3973-4353&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit14&quot; id=&quot;Adding_an_application&quot;&gt;Adding an application&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Choose from:
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_button plugin_wrap&quot;&gt;
&lt;p&gt;
&lt;a href=&quot;https://err404.numericore.com/en/notes/file_server_training/dokuwiki/start&quot; class=&quot;wikilink1&quot; title=&quot;notes:file_server_training:dokuwiki:start&quot; data-wiki-id=&quot;notes:file_server_training:dokuwiki:start&quot;&gt;dokuwiki&lt;/a&gt; &lt;a href=&quot;https://err404.numericore.com/en/notes/file_server_training/nexcloud/start&quot; class=&quot;wikilink1&quot; title=&quot;notes:file_server_training:nexcloud:start&quot; data-wiki-id=&quot;notes:file_server_training:nexcloud:start&quot;&gt;nextcloud&lt;/a&gt; &lt;a href=&quot;https://err404.numericore.com/en/notes/file_server_training/calibre/start&quot; class=&quot;wikilink1&quot; title=&quot;notes:file_server_training:calibre:start&quot; data-wiki-id=&quot;notes:file_server_training:calibre:start&quot;&gt;calibre&lt;/a&gt; &lt;a href=&quot;https://err404.numericore.com/en/notes/file_server_training/galene/start&quot; class=&quot;wikilink1&quot; title=&quot;notes:file_server_training:galene:start&quot; data-wiki-id=&quot;notes:file_server_training:galene:start&quot;&gt;galene&lt;/a&gt; &lt;a href=&quot;https://err404.numericore.com/en/notes/file_server_training/jirafeau/start&quot; class=&quot;wikilink1&quot; title=&quot;notes:file_server_training:jirafeau:start&quot; data-wiki-id=&quot;notes:file_server_training:jirafeau:start&quot;&gt;jirafeau&lt;/a&gt; &lt;a href=&quot;https://err404.numericore.com/en/notes/file_server_training/lufi/start&quot; class=&quot;wikilink1&quot; title=&quot;notes:file_server_training:lufi:start&quot; data-wiki-id=&quot;notes:file_server_training:lufi:start&quot;&gt;lufi&lt;/a&gt; &lt;a href=&quot;https://err404.numericore.com/en/notes/file_server_training/start&quot; class=&quot;wikilink1&quot; title=&quot;notes:file_server_training:start&quot; data-wiki-id=&quot;notes:file_server_training:start&quot;&gt;...&lt;/a&gt; etc.
&lt;/p&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
It is possible to have several containers (or virtual machines), each with its own Yunohost, rather than having all the applications in the same Yunohost virtual machine.&lt;br /&gt;
This will mainly depend on the use, and if you choose to have several machines (virtual or not), you will need to set up a &lt;a href=&quot;https://err404.numericore.com/en/notes/file_server_training/rpsni&quot; class=&quot;wikilink1&quot; title=&quot;notes:file_server_training:rpsni&quot; data-wiki-id=&quot;notes:file_server_training:rpsni&quot;&gt;SNI reverse proxy&lt;/a&gt; (because you will probably only have one public IPv4 address and will need to share it between the machines; with IPv6, this kind of problem does not arise).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Adding an application&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;Adding_an_application&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;4354-5265&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit17&quot; id=&quot;IPv4_onlyOpening_ports_and_NAT_redirects&quot;&gt;IPv4 only: Opening ports (and NAT redirects)&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Identify the ports to be opened.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Open them on the Internet box side and specify the redirect.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; If you have set up an SNI proxy server, you will need to redirect ports 80 and 443 to the SNI proxy server.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Keep in mind that NAT issues do not exist in ipv6 (unless you have CGNAT, but in that case I recommend changing your Internet service provider).&lt;br /&gt;
In ipv6, the machine is directly connected to the Internet, with all ports exposed on the public IP (which starts with 2).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;IPv4 only: Opening ports (and NAT redirects)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;IPv4_onlyOpening_ports_and_NAT_redirects&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:17,&amp;quot;range&amp;quot;:&amp;quot;5266-5808&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit18&quot; id=&quot;Backups_very_important&quot;&gt;Backups (very important)&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://err404.numericore.com/en/_media/notes/disque_dur.jpg?w=400&amp;amp;tok=ca3069&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;br /&gt;
Yunohost is capable of backing up applications, but it does not back up itself. That&amp;#039;s why I use Yunohost in a virtual machine (or container) and have Proxmox perform the backup.&lt;br /&gt;
However, a backup should &lt;strong&gt;not remain on the same hard drive as its source&lt;/strong&gt; and should be stored in a different geographical location.
&lt;/p&gt;

&lt;p&gt;
In our case, using a second hard drive would already be a good solution.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Backups (very important)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;Backups_very_important&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:18,&amp;quot;range&amp;quot;:&amp;quot;5809-6275&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit19&quot; id=&quot;Read_the_logs_important&quot;&gt;Read the logs (important)&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Read the logs (important)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;Read_the_logs_important&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:19,&amp;quot;range&amp;quot;:&amp;quot;6276-6315&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit20&quot; id=&quot;Problems_encountered_during_self-hosting&quot;&gt;Problems encountered during self-hosting&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Some ISPs do not route properly to the IP ranges of other ISPs.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; The public IP may change without notice, in which case you will need to update the &lt;abbr title=&quot;Domain Name System&quot;&gt;DNS&lt;/abbr&gt; entries and regenerate the certificates.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; It may also happen that the box does not deliver a public IPv6 address but only a locally unique IPv6 address. In this case, you will need to force a public IPv6 address.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Some ISPs do not give IPv6 addresses to their customers, or only in certain areas.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; In general, you only have one public IPv4 address, so if you want to host multiple services that require the same ports, you will need to set up a &lt;a href=&quot;https://err404.numericore.com/en/notes/file_server_training/rpsni&quot; class=&quot;wikilink1&quot; title=&quot;notes:file_server_training:rpsni&quot; data-wiki-id=&quot;notes:file_server_training:rpsni&quot;&gt;SNI reverse proxy&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Problems encountered during self-hosting&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;Problems_encountered_during_self-hosting&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:20,&amp;quot;range&amp;quot;:&amp;quot;6316-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sun, 03 May 2026 20:13:50 +0000</pubDate>
        </item>
    </channel>
</rss>
