Skip to main content

PVE - Gymo

Configurazione Caddy Gateway e accesso VM Ant Media

Obiettivo

Configurare una VM Debian 13 con Caddy come:

  • reverse proxy / Caddy L4;
  • gateway Internet per la rete privata 10.244.10.0/24;
  • jump host SSH per accedere alle VM interne;
  • punto di accesso pubblico tramite IP 194.183.5.19.

La VM Ant Media sarà raggiungibile all'indirizzo:

10.244.10.11

Ant Media verrà installato tramite Docker.


Configurazione di rete

La VM Caddy utilizza due interfacce:

ens19: 10.244.10.10/24
ens20: 194.183.5.19/29

Routing:

default via 194.183.5.17 dev ens20
10.244.10.0/24 dev ens19
194.183.5.16/29 dev ens20

ens19 rappresenta quindi la rete privata, mentre ens20 è l'interfaccia pubblica.


Abilitazione IP forwarding

Creare:

/etc/sysctl.d/99-router.conf

con:

net.ipv4.ip_forward=1

Applicare:

sysctl --system

Verifica:

sysctl net.ipv4.ip_forward

Configurazione nftables

File:

/etc/nftables.conf

Configurazione:

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0;
        policy drop;

        iifname "lo" accept
        ct state established,related accept

        # Accesso dalla LAN
        iifname "ens19" accept

        # SSH pubblico
        iifname "ens20" tcp dport 22 accept

        # Caddy HTTP / HTTPS
        iifname "ens20" tcp dport { 80, 443 } accept
        iifname "ens20" udp dport 443 accept

        # ICMP
        ip protocol icmp accept
        ip6 nexthdr icmpv6 accept
    }

    chain forward {
        type filter hook forward priority 0;
        policy drop;

        # LAN -> Internet
        iifname "ens19" oifname "ens20" accept

        # Traffico di ritorno
        iifname "ens20" oifname "ens19" ct state established,related accept
    }

    chain output {
        type filter hook output priority 0;
        policy accept;
    }
}

table ip nat {
    chain postrouting {
        type nat hook postrouting priority srcnat;
        policy accept;

        ip saddr 10.244.10.0/24 oifname "ens20" masquerade
    }
}

Verifica sintassi:

nft -c -f /etc/nftables.conf

Abilitazione:

systemctl enable --now nftables
systemctl restart nftables

Verifica:

nft list ruleset

Configurazione VM Ant Media

La VM Ant Media utilizzerà ad esempio:

IP:      10.244.10.11/24
Gateway: 10.244.10.10
DNS:     DNS aziendale oppure DNS pubblico

Il gateway 10.244.10.10 permette alla VM di accedere a Internet tramite NAT sulla VM Caddy.

Ant Media verrà installato tramite Docker sulla VM 10.244.10.11.


Accesso SSH tramite Caddy

La VM Ant Media non necessita di essere esposta direttamente su Internet.

È possibile utilizzare la VM Caddy come jump host.

Configurazione client SSH:

Host unidata-antmedia
    HostName 10.244.10.11
    User root
    Port 22
    ProxyCommand ssh -p 22 root@194.183.5.19 nc %h %p

Connessione:

ssh unidata-antmedia

Il percorso della connessione sarà:

Client
  |
  | SSH
  v
194.183.5.19
Caddy / Gateway
  |
  | rete privata
  v
10.244.10.11
Ant Media

In questo modo la porta SSH della VM Ant Media rimane accessibile esclusivamente dalla rete privata.


Caddy L4

Per utilizzare funzionalità Layer 4, Caddy deve essere compilato tramite xcaddy includendo:

xcaddy build --with github.com/mholt/caddy-l4

Verifica:

caddy list-modules | grep layer4

Caddy L4 potrà successivamente essere utilizzato per pubblicare verso Internet i servizi Ant Media necessari senza assegnare direttamente un IP pubblico alla VM applicativa.


Architettura finale

Internet
   |
   | 194.183.5.19
   v
+--------------------+
| Debian 13 / Caddy  |
|                    |
| ens20: Public WAN  |
| ens19: 10.244.10.10|
|                    |
| Caddy L4           |
| nftables / NAT     |
| SSH Jump Host      |
+---------+----------+
          |
          | 10.244.10.0/24
          |
          v
+--------------------+
| Ant Media          |
| 10.244.10.11       |
| Docker             |
+--------------------+