docker -компонент: отправить только несколько траффиков c через другой контейнер (vpn) - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть приложение, которое состоит из сканера и MySQL дБ. Я хочу go через VPN, когда я выполняю свой сканер, но затем не использую VPN, когда я подключаюсь к моей БД. Мне удалось заставить мой контейнер приложений отправлять все трафики c через мой VPN-контейнер, но теперь я не могу подключиться к своей БД, расположенной на локальном хосте. Я попытался использовать адреса хостов localhost, 127.0.0.1 и имя контейнера базы данных, но ни один из них не работает.

Как мне маршрутизировать некоторые traffi c через VPN контейнер, а некоторые траффики c просто нормально?

Вот мой docker файл для создания:

version: '3.7' 
services: 
    db:
        image: mysql:8
        restart: always
        environment: 
            MYSQL_DATABASE: my_db
            MYSQL_USER: root
            MYSQL_ROOT_PASSWORD: pw
            MYSQL_PASSWORD: pw
            MYSQL_PORT: 3308
        ports:
            - "3308:3306"
        command: --default-authentication-plugin=mysql_native_password
    vpn:
        build:
            context: ./
            dockerfile: Dockerfile-openvpn-dev
        restart: always
        cap_add:
            - NET_ADMIN
        devices: 
            - /dev/net/tun
        volumes:
            - ./openvpn:/vpn
        command: openvpn --config /vpn/config.ovpn --auth-user-pass /vpn/client.pwd --auth-nocache
    app:
        build:
            context: ./
            dockerfile: Dockerfile-crawler-dev
        environment: 
            MYSQL_DATABASE: my_db
            MYSQL_USER: root
            MYSQL_ROOT_PASSWORD: pw
            MYSQL_PASSWORD: pw
            MYSQL_HOST: db
            MYSQL_PORT: 3306
        network_mode: service:vpn

1 Ответ

0 голосов
/ 12 февраля 2020

Вы должны поместить db и vpn в одной сети. Локальный контейнерный трафик c не маршрутизируется через VPN. Если вы не хотите направлять внешний трафик c через vpn, вам придется использовать iptables в службе vpn. Также обязательно включите redirect-gateway def1 в вашу конфигурацию ovpn.

version: '3.7' 
services: 
  db:
    image: mysql:8
    restart: always
    networks:
      - default
    environment: 
      MYSQL_DATABASE: my_db
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: pw
      MYSQL_PASSWORD: pw
      MYSQL_PORT: 3308
    ports:
      - "3308:3306"
    command: --default-authentication-plugin=mysql_native_password
  vpn:
    build:
      context: ./
      dockerfile: Dockerfile-openvpn-dev
    restart: always
    networks:
      - default
    #might be necessary:
    #links:
    #  - db
    cap_add:
      - NET_ADMIN
    devices: 
      - /dev/net/tun
    volumes:
      - ./openvpn:/vpn
    command: openvpn --config /vpn/config.ovpn --auth-user-pass /vpn/client.pwd --auth-nocache
  app:
    build:
      context: ./
      dockerfile: Dockerfile-crawler-dev
    environment: 
      MYSQL_DATABASE: my_db
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: pw
      MYSQL_PASSWORD: pw
      MYSQL_HOST: db
      MYSQL_PORT: 3306
    network_mode: service:vpn
    depends_on:
      - vpn

networks:
  default:
...