web-dev-qa-db-ja.com

同じホストでフォワードプロキシコンテナとDNSサーバーコンテナを実行する際の問題

これは、Docker、pi-hole(コンテナー)、およびwormholeプロキシ(コンテナー)を同じホストで実行するホーム実験です。 DockerHostのOSはRHEL7.xです。

私の当初の目的はpi-holeについて詳しく知ることだったので、VMWareESXI内でホストされているVM)でコンテナーとしてサービスをホストしました。一部のLinux VMでは、pi-を使用できました。 /etc/resolv.confファイルを編集してpi-holeを指すようにし、DNSサーバーとしての穴を作成します。そこではすべて正常に機能します。

そのため、物理的なプライマリデスクトップ(Windows 10)でテストする場合、ネットワークアダプターの設定でDNSサーバーを変更する代わりに、pi-と一緒にフォワードプロキシサーバー(ワームホールプロキシ)コンテナーをホストできると思いました。同じドッカーホスト上の穴コンテナ。そして、DNSサーバーとしてpi-holeを使用するようにForwardProxyサーバーに指示するだけです。

Forward ProxyServerがpi-holeをDNSサーバーとして使用する場合に問題が発生します。 Forward ProxyServerログに次のエラーメッセージが表示されます。

wormhole_1_e0b4b0824de0 | 2018-10-07 05:32:28,528 wormhole[5]: [691dd8][192.168.20.40]: CONNECT 502 incoming.telemetry.mozilla.org:443 (gaierror: -3 Try again)
wormhole_1_e0b4b0824de0 | 2018-10-07 05:32:28,692 wormhole[5]: [643358][192.168.20.40]: CONNECT 502 incoming.telemetry.mozilla.org:443 (gaierror: -3 Try again)
wormhole_1_e0b4b0824de0 | 2018-10-07 05:32:28,693 wormhole[5]: [654eb8][192.168.20.40]: CONNECT 502 incoming.telemetry.mozilla.org:443 (gaierror: -3 Try again)

Forward Proxy Serverコンテナとpi-holeコンテナの両方を同じDockerホストでホストする場合、プロキシサーバーにDNSとしてpi-holeを使用するように明示的に指示しないと、正常に機能します。別のVM)でフォワードプロキシサーバーコンテナをホストし、DNSサーバーとしてpi-holeを使用するようにプロキシサーバーを指定すると、それも正常に機能します。いくつかの形式の競合がありますが、ポートを共有していないため、どうなるかわかりません。

私の問題を簡単に再現するために、これが私が使用したdocker-compose.ymlsです。

以下は、ワームホールプロキシ(フォワードプロキシ)サーバーのdocker-compose.ymlです。 dns:はDockerホストを指しています。

version: "3"
services:
  wormhole:
    image: bashell/wormhole:latest
    ports:
      - "8888:8800/tcp"
      - "8888:8800/udp"
    environment:
      TZ: "America/New_York"
    restart: always
    dns:
      - 192.168.10.120

以下は、パイホールのdocker-compose.ymlです。ボリュームのホストマウントポイントを変更する必要があります。

version: "3"
services:
  pihole:
    image: pihole/pihole:v4.0_AMD64
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp"
      - "80:80/tcp"
      - "443:443/tcp"
    environment:
      # enter your docker Host IP here
      ServerIP: 192.168.10.120
      # IPv6 Address if your network supports it
      # ServerIPv6:
      # jwilder/proxy envs, see readme for more info
      PROXY_LOCATION: pihole
      VIRTUAL_Host: pihole.local
      VIRTUAL_PORT: 80
      TZ: "America/New_York"
      DNS1: 208.67.222.222
      DNS2: 1.1.1.1
      WEBPASSWORD: stackexchange
    # Add your own custom hostnames you need for your domain
    # extra_hosts:
      #   Point any of the jwilder virtual_Host addresses
      # to your docker Host ip address
      # - 'pihole.yourdomain.local:192.168.1.55'
    volumes:
      - '/Development/Applications/pi-hole/volumes/pihole/:/etc/pihole/:z'
      # WARNING: if this log don't exist as a file on the Host already
      # docker will try to create a directory in it's place making for lots of errors
      - '/Development/Applications/pi-hole/volumes/log/pihole.log:/var/log/pihole.log:z'
      - '/Development/Applications/pi-hole/volumes/dnsmasq.d:/etc/dnsmasq.d:z'
    restart: always
1
beyonddc

フォワードプロキシサーバーがDockerホストをDNSサーバーとして指すようにする代わりに、フォワードプロキシサーバーとDNSサーバーの両方が同じDockerネットワーク上にあり、フォワードプロキシサーバーがDockerによって割り当てられたDNSサーバーのIPアドレスを指すようにしました。 。

以下はdocker-compose.ymlフォワードプロキシサーバーの場合

version: "3"
services:
  wormhole:
    image: bashell/wormhole:latest
    ports:
      - "8888:8800/tcp"
      - "8888:8800/udp"
    environment:
      TZ: "America/New_York"
    restart: always
    dns:
      - 172.20.0.99
    networks:
      - beyonddc
networks:
    beyonddc:
      external: true

以下はdocker-compose.yml私のDNSサーバー用

version: "3.5"
services:
  pihole:
    image: pihole/pihole:v4.0_AMD64
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp"
      - "80:80/tcp"
      - "443:443/tcp"
    networks:
       beyonddc:
         ipv4_address: 172.20.0.99
    environment:
      # enter your docker Host IP here
      ServerIP: 192.168.10.120
      # IPv6 Address if your network supports it
      ServerIPv6: 2601:189:4200:eb2:250:56ff:febf:d245
      # jwilder/proxy envs, see readme for more info
      PROXY_LOCATION: pihole
      VIRTUAL_Host: pihole.local
      VIRTUAL_PORT: 80
      TZ: "America/New_York"
      DNS1: 208.67.222.222
      DNS2: 1.1.1.1
      WEBPASSWORD: stackexchange
    # Add your own custom hostnames you need for your domain
    # extra_hosts:
      #   Point any of the jwilder virtual_Host addresses
      # to your docker Host ip address
      # - 'pihole.yourdomain.local:192.168.1.55'
    volumes:
      - '/Development/Applications/pi-hole/volumes/pihole/:/etc/pihole/:z'
      # WARNING: if this log don't exist as a file on the Host already
      # docker will try to create a directory in it's place making for lots of errors
      - '/Development/Applications/pi-hole/volumes/log/pihole.log:/var/log/pihole.log:z'
      - '/Development/Applications/pi-hole/volumes/dnsmasq.d:/etc/dnsmasq.d:z'
    restart: always
networks:
  beyonddc:
    driver: bridge
    # Must specify the name for the network again otherwise by default
    # Docker will use the folder name as prefix of the network.
    # The name field is only available in version 3.5 and beyond
    name: beyonddc
    ipam:
      config:
        - subnet: 172.20.0.0/16
0
beyonddc

これら2つのdocker-compose.ymlファイルを1つにマージすることをお勧めします。

version: "3"
services:
  wormhole:
    image: bashell/wormhole:latest
    link: pihole:dns.local
    ports:
      - "8888:8800/tcp"
      - "8888:8800/udp"
    environment:
      TZ: "America/New_York"
    restart: always
    dns:
      - dns.local
  pihole:
    image: pihole/pihole:v4.0_AMD64
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp"
      - "80:80/tcp"
      - "443:443/tcp"
    environment:
      # enter your docker Host IP here
      ServerIP: 192.168.10.120
      # IPv6 Address if your network supports it
      # ServerIPv6:
      # jwilder/proxy envs, see readme for more info
      PROXY_LOCATION: pihole
      VIRTUAL_Host: pihole.local
      VIRTUAL_PORT: 80
      TZ: "America/New_York"
      DNS1: 208.67.222.222
      DNS2: 1.1.1.1
      WEBPASSWORD: stackexchange
    # Add your own custom hostnames you need for your domain
    # extra_hosts:
      #   Point any of the jwilder virtual_Host addresses
      # to your docker Host ip address
      # - 'pihole.yourdomain.local:192.168.1.55'
    volumes:
      - '/Development/Applications/pi-hole/volumes/pihole/:/etc/pihole/:z'
      # WARNING: if this log don't exist as a file on the Host already
      # docker will try to create a directory in it's place making for lots of errors
      - '/Development/Applications/pi-hole/volumes/log/pihole.log:/var/log/pihole.log:z'
      - '/Development/Applications/pi-hole/volumes/dnsmasq.d:/etc/dnsmasq.d:z'
    restart: always

そうすることで、両方のコンテナが同じDockerネットワークに自動的に追加され、コンテナのリンクが可能になります(上記のワームホールサービスを参照してください。ここでdns.local piholeコンテナのホスト名として、ただしワームホールコンテナのスコープ内のみ。その文は意味がありますか?)