5.DNSサーバーを先に試して:実装開始
今回は計画した内容でDNSサーバーを試してみました。実際のDNS用で「andyshinn/dnsmasq」と仮サーバーの確認用で「httpd:2.4」のイメージを利用してみます。
ネットワークの設定
新しくVPNを作ってIPを固定で指定します。versionは3でdocker-compose.ymlを作成します。
version: "3" networks: local-server-net: driver: bridge ipam: driver: default config: - subnet: 172.16.0.0/24
ペースはbridgeで作成しました。
仮サーバーを追記
ページさえ表示されれば良いので設定は殆どしない感じにします。
version: "3" services: web: image: httpd:2.4 container_name: web restart: always logging: options: max-size: 5m max-file: "5" networks: local-server-net: ipv4_address: 172.16.0.2 networks: local-server-net: driver: bridge ipam: driver: default config: - subnet: 172.16.0.0/24
一応、簡単に作ったところで「あっ!Dockerのインストール」、Mac用のDockerについて異常遅い話(参考)で「edge」をインストールします。
ダウンロード場所:https://docs.docker.com/docker-for-mac/edge-release-notes/
では、Build&実装してみます。作成した「docker-compose.yml」があるディレクトに移動して以下のコンマンドを実行します。
$ docker-compose up -d --build Creating network "test_local-server-net" with driver "bridge" Pulling web (httpd:2.4)... 2.4: Pulling from library/httpd bc51dd8edc1b: Pull complete dca5bc65e18f: Pull complete ccac3445152a: Pull complete 8515f2015fbc: Pull complete e35494488b8c: Pull complete Digest: sha256:b783a610e75380aa152dd855a18368ea2f3becb5129d0541e2ec8b662cbd8afb Status: Downloaded newer image for httpd:2.4 Creating web ... done $ docker-compose ps Name Command State Ports ---------------------------------------- web httpd-foreground Up 80/tcp
「http://172.16.0.2」でブラウザで見ても反応がないですね。やはり「reverse proxy server」がないといけないのか。。。80ポートを公開してみます。
version: "3" services: web: image: httpd:2.4 container_name: web ports: - 80:80 restart: always logging: options: max-size: 5m max-file: "5" networks: local-server-net: ipv4_address: 172.16.0.2 networks: local-server-net: driver: bridge ipam: driver: default config: - subnet: 172.16.0.0/24
もう一度buildしましょう!!
$ docker-compose --compatibility up -d --build --force-recreate Recreating web ... done
「http://127.0.0.1」画面が出ました。
DNSサーバーの設定
dns/dnsmasq.confを作成します。
# Do not use /etc/hosts as nameserver no-resolv # Use this file as a hosts file addn-hosts=/etc/hosts-dnsmasq # Upstream DNS Server server=192.168.11.1 # Log all dns queries log-queries
dns/hosts-dnsmasqを作成します。 - 「server=192.168.11.1」:PC本体(host)の既存DNSサーバー、これを正しく設定しないとDNSサーバーに登録しても上手く動かなかった。
127.0.0.1 local
docker-compose.ymlに設定を追記します。
version: "3" services: web: image: httpd:2.4 container_name: web ports: - 80:80 restart: always logging: options: max-size: 5m max-file: "5" networks: local-server-net: ipv4_address: 172.16.0.2 dns: image: andyshinn/dnsmasq container_name: dns ports: - "53:53/udp" - "53:53/tcp" volumes: - ./dns/dnsmasq.conf:/etc/dnsmasq.conf - ./dns/hosts-dnsmasq:/etc/hosts-dnsmasq restart: always cap_add: - NET_ADMIN networks: local-server-net: ipv4_address: 172.16.0.4 networks: local-server-net: driver: bridge ipam: driver: default config: - subnet: 172.16.0.0/24
テストしてみましょう!!
$dig @127.0.0.1 local ; <<>> DiG 9.10.6 <<>> @127.0.0.1 local ; (1 server found) ;; global options: +cmd ;; Got answer: ;; WARNING: .local is reserved for Multicast DNS ;; You are currently testing what happens when an mDNS query is leaked to DNS ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5779 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;local. IN A ;; ANSWER SECTION: local. 0 IN A 127.0.0.1 ;; Query time: 3 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Fri Feb 07 18:42:36 JST 2020 ;; MSG SIZE rcvd: 50
DNSの設定(iOSのみ)
iOS(Mac)でのみ調査しました。Widnows系は別途調査して頂きたいです。
% mkdir /etc/resolver/ % sudo vi /etc/resolver/localnet.intra search local nameserver 127.0.0.1
追記 2020.02.10 上記の方法では対応できなかったので、以下の内容を追加しました。
% networksetup -listnetworkserviceorder % networksetup -setdnsservers "Apple USB Ethernet Adapter" 127.0.0.1 既存DNサーバー % sudo killall -HUP mDNSResponder
じゃブラウザーで確認しましょう!!
ご存知だと思いますが、Chromeでは「http://」から入力してください。