Hoe kan ik alleen privé VPN/lokale verbinding toestaan voor een bepaalde subdomein?

Hoi,

Ik heb wireguard ingesteld met wg-easy, zoals:

  wg-easy:
    environment:
      - WG_HOST=vpn.stub.com
      - PASSWORD=notthistimelol
    image: weejewel/wg-easy
    container_name: wg-easy
    volumes:
      - ./config/wgeasy:/etc/wireguard
    ports:
      - "51820:51820/udp"
      - "51821:51821/tcp"
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1

stub.com (niet mijn werkelijke domein) is een publiek domein geregistreerd onder Cloudflare.

Ik heb een setup in caddy zoals:

stub.com {
    root * /usr/share/caddy/dashboard
    file_server
}

vpn.stub.com {
    log default {
        output stdout
    }

    @internal {
        remote_ip 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8 127.0.0.1/8 192.168.1.0/24 10.8.0.2 31.124.238.187
    }

    handle @internal {
        reverse_proxy wg-easy:51821
    }

    respond "Toegang tot het lokale netwerk is vereist. Mogelijk via wireguard."
}

Mijn probleem is dat ik geen lokale IP’s kan detecteren aangezien het IP dat wordt gegeven een publiek IP-adres is zoals 32.123.234.187, en publieke IP-adressen geven geen aanwijzingen of een apparaat verbonden is via VPN of zelfs in het netwerk is. Ik weet echt niet hoe ik alleen lokale verbindingen voor bepaalde subdomeinen kan toestaan hiermee.

{"level":"error","ts":1692290503.1930206,"logger":"http.log.access.default","msg":"verwerkte aanvraag","request":{"remote_ip":"31.124.238.187","remote_port":"53069","client_ip":"32.123.234.187","proto":"HTTP/2.0","method":"GET","host":"vpn.stub.com","uri":"/","headers":{"Accept-Language":["en-GB,en;q=0.9"],"Sec-Fetch-Dest":["document"],"Accept":["text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"],"Sec-Fetch-Site":["none"],"Cookie":[],"Accept-Encoding":["gzip, deflate, br"],"Sec-Fetch-Mode":["navigate"],"User-Agent":["Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1"]},"tls":{"resumed":false,"version":772,"cipher_suite":4865,"proto":"h2","server_name":"vpn.stub.com"}},"bytes_read":0,"user_id":"","duration":3.001454656,"size":0,"status":502,"resp_headers":{"Server":["Caddy"],"Alt-Svc":["h3=\":443\"; ma=2592000"]}}

Sorry als dit een slecht geformelde vraag is, maar alle hulp wordt zeer gewaardeerd!

Je moet ergens een DNS-server draaien en de DNS-verkeer van de clientapparaten daarnaartoe sturen. Deze DNS-server zou vpn.stub.com moeten resolve naar het privé/vpn IP-adres van caddy en alle andere queries moeten worden doorgestuurd naar een andere DNS-provider. Daarna werkt de rest van de configuratie in caddy zoals je verwacht.

Een paar andere opties zijn,

  1. Sta al het verkeer toe en filter het met basis authenticatie. Dit kan sommige applicaties verstoren (omdat ze misschien geen mogelijkheid bieden om op deze manier te authenticeren)
  2. Gebruik mTLS en configureer caddy om elk verkeer zonder mTLS-certificaat te blokkeren