[VPN-Docker] Conteneur wireguard et Lan (résolu)

Applications, problèmes de configuration réseau
Chr0nos
Hankyu
Messages : 16
Inscription : mer. 22 nov. 2017, 18:31

[VPN-Docker] Conteneur wireguard et Lan (résolu)

Message par Chr0nos »

Bonjour,
je suis actuellement en train d'essayer de dockeriser mon vpn wireguard ( en tant que client ) dans un conteneur wireguard avec docker-compose afin que ma machine hote n'ai plus tout son trafic qui passe par le vpn mais uniquement certains conteneurs

pour se faire jai setup mon docker-compose.yaml de la sorte:

Code : Tout sélectionner

  vpn:
    privileged: true
    build:
      context: ./apps/vpn
      dockerfile: Dockerfile.thorin
    restart: 'unless-stopped'
    deploy:
      replicas: 1
    sysctls:
      - "net.ipv4.conf.all.rp_filter=2"
      - "net.ipv6.conf.all.disable_ipv6=0"
    cap_add:
      - net_admin
      - sys_module
    network_mode: bridge
du cote du dockerfile:

Code : Tout sélectionner

FROM archlinux
RUN pacman-key --init && pacman-key --populate archlinux
RUN pacman -Sy && pacman -S --noconfirm archlinux-keyring && pacman -Su --noconfirm
RUN pacman -S --noconfirm wireguard-tools openresolv traceroute
WORKDIR /root
COPY scripts/ /root/
COPY thorin.conf /etc/wireguard/wg0.conf
ENTRYPOINT ["/root/startup.sh"]
et enfin le startup script:

Code : Tout sélectionner

#!/bin/bash
set -euo pipefail

wg-quick up wg0

VPN_IP=$(grep -Po 'Endpoint\s=\s\K[^:]*' /etc/wireguard/wg0.conf)

function finish {
    echo "$(date): Shutting down vpn"
    wg-quick down wg0
}

function setup_lan_routing {
    CONTAINER_IP=$(ip address show dev eth0 | grep "inet " | cut -d ' ' -f 6 | cut -d '/' -f 1)
    GATEWAY_IP="192.168.0.1"
    LAN_MASK="192.168.0.0/16"

    echo "Using container ip: ${CONTAINER_IP} to route ${LAN_MASK} over ${GATEWAY_IP}"
    ip rule add from ${CONTAINER_IP} table 128
    ip route add table 128 to ${LAN_MASK} dev eth0
    ip route add table 128 default via ${GATEWAY_IP}

    echo "routing rules applied"
}

# Our IP address should be the VPN endpoint for the duration of the
# container, so this function will give us a true or false if our IP is
# actually the same as the VPN's
function has_vpn_ip {
    curl --silent --show-error --retry 10 --fail http://checkip.dyndns.com/ | \
        grep $VPN_IP
}

# If our container is terminated or interrupted, we'll be tidy and bring down
# the vpn
trap finish TERM INT

# setup_lan_routing
# Every minute we check to our IP address
while [[ has_vpn_ip ]]; do
    sleep 60;
done

echo "$(date): VPN IP address not detected"
et c'est ici que le bas blesse: si je lance l'appel de "setup_lan_routing" je n'ai plus de trafic du tout, mais si je le commente je ne pas pas contacter mes addresses en 192.168.x.x car le trafic tente de passer par le vpn
si je l'active j'ai bien dans mes logs:
services-vpn-1 | Using container ip: 172.17.0.2 to route 192.168.0.0/16 over 192.168.0.1
services-vpn-1 | routing rules applied
je fais sans doute quelque chose de travers, la question reste a savoir.. quoi?
Dernière modification par Chr0nos le mar. 13 déc. 2022, 14:18, modifié 1 fois.
Ryzen 3700X - 16gb ram - Nvidia rtx-3080 - dm: Mate - Aur: trizen
Chr0nos
Hankyu
Messages : 16
Inscription : mer. 22 nov. 2017, 18:31

Re: [VPN-Docker] Conteneur wireguard et Lan (en cours)

Message par Chr0nos »

bon le probleme venais bien de ma table de routage, avec cette fonction ca marche

Code : Tout sélectionner

function setup_lan_routing {
    echo "Configuring lan routing"
    LAN_MASK="192.168.0.0/16"

    DROUTE=$(ip route | grep default | awk '{print $3}');
    echo "Droute: ${DROUTE}"
    ip route add ${LAN_MASK} via $DROUTE;
    iptables -I OUTPUT -d ${LAN_MASK} -j ACCEPT
    echo "routing rules applied"
}
Ryzen 3700X - 16gb ram - Nvidia rtx-3080 - dm: Mate - Aur: trizen
Répondre