首页 > 解决方案 > 从另一个容器访问 VPN 容器上的客户端

问题描述

再会,

抱歉,如果这是重复的,我有与这篇文章相同的请求,但它没有答案,这就是我再次询问的原因。

我在服务器上运行了多个容器,但假设只有以下 3 个:

  1. 容器 A 运行 Web 服务
  2. 容器 B 运行数据库
  3. 容器 C 运行 OpenVPN,可以访问 2 个客户端 C1(192.168.100.1)和 C2(192.168.100.2

我希望只有容器 A 可以访问容器 C 上的 VPN 网络(能够 ping C1 和 C2),并且不允许容器 B(其他任何容器)访问 C1 和 C2。

目前,VPN 容器连接到 HOST 网络,但这允许所有容器访问 VPN

这是我尝试过的:

容器 A 和 C

version: '2'
services:
  odoo:
    container_name: container_a
    ports:
      - "8990:8069"
      - "8992:8072"
    tty: true
    external_links:
      - db12
    networks:
      - default
      - vpn_network

  vpn:
      image: dperson/openvpn-client
      container_name: container_c
      cap_add:
        - net_admin
      networks:
        - vpn_network
      read_only: true
      tmpfs:
        - /run
        - /tmp
      restart: unless-stopped
      security_opt:
        - label:disable
      stdin_open: true
      tty: true
      volumes:
        - /dev/net:/dev/net:z
        - ./vpn:/vpn ## This is where the VPN config is

      ## THIS GIVES ACCESS FOR ALL CONTAINERS AND I DO NOT WANT THAT
      # network_mode: "host"

networks:
  default:
    external:
      name: postgres_default12
  vpn_network:
    external:
      name: vpn_network

集装箱 B

version: '2'

services:
  db_primary:
    build: .
    image: sudotechodoo/odoo:postgres12
    container_name: db12
    ports:
      - "5432:5432"
    restart: always
    volumes:
      - data_postgres_main:/var/lib/postgresql/data

volumes:
  data_postgres_main:
    external:
      name: postgres_data12

networks:
  default:
    external:
      name: postgres_default12

如何更改它,以便我可以在容器 A 内 ping C1 或 C2,但不能从容器 C?

先感谢您

标签: dockerdocker-composeopenvpn

解决方案


推荐阅读