4. 実装・構築手順

3.1. 内容

構築内容

構成3
サーバ構成図

  • 構築サーバ
    • GW
    • 外部権威DNSサーバ
    • 外部Webサーバ
    • 内部権威DNSサーバ
    • 内部DNSキャッシュサーバ
    • 内部Webサーバ
    • 内部クライアント

構築する詳細なVM構成は以下の通りです。

構成3
構築するVM

Noノード名称OS構築ミドルウェア
1GWgatewayvyOS-
2外部権威DNSサーバdmz_dns_authAlmalinux9PowerDNS
3外部Webサーバdmz_webAlmalinux9Nginx
4内部権威DNSサーバinternal_dns_authAlmalinux9PowerDNS/PowerAdmin/MariaDB
5内部DNSキャッシュサーバinternal_dns_cacheAlmalinux9intra_dnscacheDNS
6内部Webサーバinternal_webAlmalinux9Apache
7内部クライアントclientLinuxMint17-

構築環境

ホストOSのRAMは32GB以上あることを確認してください。
本プロジェクトでは最小13GB~18GB程度のRAMを使用します。

VirtualBox+Vagrantでサーバを構築し、ミドルウェアのインストール/設定は手動で行う構成とします。
手順にてVirtualBoxとVagrantのインストール方法の解説は割愛します。

  • Windows11 24H2
  • VirtualBox 7.2.2
  • Vagrant 2.4.9

3.2. 構築方法

以下の手順に従い構築してください。

  1. サーバ構築手順」の実施
  2. サーバ設定手順」の各項目を順番に実施
  3. 設定確認手順書」にて設定が適切で、期待通りに動くか確認

3.3. サーバ構築手順

Vagrantファイルの準備

  1. 任意のフォルダに以下のvagarantファイルを作成してください。
    • VagrantFile
  • vagrant initコマンドで作成可能です。

    vagrant init
    1. 作成したVagrantFileに以下内容を貼り付けてください。
    VagrantFile
    Vagrant.configure("2") do |config|
    
      # 共通設定
      ALMA_BOX = "almalinux/9"
      VM_MEMORY = 2048
    
      # --------------------------------------------------------------------------
      # 1. Gateway-VM (VyOS) - ルーター、DMZ/内部NWのゲートウェイ
      # --------------------------------------------------------------------------
      # FW/ルータ用VMの設定
      config.vm.define "gateway" do |gw|
        gw.vm.box = "higebu/vyos"
        gw.vm.hostname = "gateway"
        
        # インターネット出口
        # デフォルトでNAT割り当て
    
        # DMZ
        gw.vm.network "private_network", type: "manual", 
                          virtualbox__intnet: "DMZ_NETWORK",
                          ip: "10.0.0.1", 
                          auto_config: false
        # 内部NW
        gw.vm.network "private_network", type: "manual", 
                          virtualbox__intnet: "INTERNAL_NETWORK", 
                          ip: "172.16.0.1",
                          auto_config: false
    
        # ホストOSからDMZへのアクセスを許可するポートフォワーディング
        # 外部Web (10.0.0.20:80) へのアクセスをホストOSの8080ポートに転送
        gw.vm.network "forwarded_port", 
                          guest: 80, 
                          host: 8080, 
                          protocol: "tcp",
                          # NATを経由してDMZ内のWebサーバーへパケットをルーティング
                          forward_ip: "10.0.0.20" 
        gw.vm.network "forwarded_port", 
                          guest: 53, 
                          host: 5353, 
                          protocol: "udp",
                          forward_ip: "10.0.0.10"
    
        gw.vm.provider "virtualbox" do |vb|
          vb.name = "Gateway"
          vb.memory = "512"
        end
      end
    
      # --------------------------------------------------------------------------
      # 2. DMZ (10.0.0.0/24) に配置するサーバ
      # --------------------------------------------------------------------------
      # 外部権威DNSサーバ (PowerDNS)
      config.vm.define "dmz-dns-auth" do |dmz_dns|
        dmz_dns.vm.box = ALMA_BOX
        dmz_dns.vm.hostname = "dmz-dnsauth"
    
        # DMZに接続 (10.0.0.0/24 セグメント)
        dmz_dns.vm.network "private_network", 
                            virtualbox__intnet: "DMZ_NETWORK", 
                            ip: "10.0.0.10"
        
        dmz_dns.vm.provider "virtualbox" do |vb| 
          vb.name = "DMZ-dnsauth"
          vb.memory = VM_MEMORY     
        end
      end
    
      # 外部向けWebサーバ (Nginx)
      config.vm.define "dmz-web" do |dmz_web|
        dmz_web.vm.box = ALMA_BOX
        dmz_web.vm.hostname = "dmz-web"
    
        # DMZに接続 (10.0.0.0/24 セグメント)
        dmz_web.vm.network "private_network", 
                            virtualbox__intnet: "DMZ_NETWORK", 
                            ip: "10.0.0.20"
        
        dmz_web.vm.provider "virtualbox" do |vb|
          vb.name = "DMZ-web"
          vb.memory = VM_MEMORY
        end
      end
      
      # --------------------------------------------------------------------------
      # 3. 内部NW (172.16.0.0/16) に配置するサーバ
      # --------------------------------------------------------------------------
      # 内部権威DNSサーバ & PowerAdmin
      config.vm.define "intra-dnsauth" do |intra_dnsauth|
        intra_dnsauth.vm.box = ALMA_BOX
        intra_dnsauth.vm.hostname = "intra-dnsauth"
    
        # 内部NWに接続 (172.16.0.0/16 セグメント)
        intra_dnsauth.vm.network "private_network", 
                            virtualbox__intnet: "INTERNAL_NETWORK", 
                            ip: "172.16.0.110"
        
        intra_dnsauth.vm.provider "virtualbox" do |vb| 
          vb.name = "Intra-dnsauth"
          vb.memory = VM_MEMORY
        end
      end
    
      # DNSキャッシュサーバ (intra_dnscacheDNS)
      config.vm.define "intra-dnscache" do |intra_dnscache|
        intra_dnscache.vm.box = ALMA_BOX
        intra_dnscache.vm.hostname = "intra-dnscache"
    
        # 内部NWに接続 (172.16.0.0/16 セグメント)
        intra_dnscache.vm.network "private_network", 
                            virtualbox__intnet: "INTERNAL_NETWORK", 
                            ip: "172.16.0.120"
        
        intra_dnscache.vm.provider "virtualbox" do |vb| 
          vb.name = "Intra-dnscache"
          vb.memory = VM_MEMORY
        end
      end
    
      # 内部向けWebサーバ (Apache)
      config.vm.define "intra-web" do |intra_web|
        intra_web.vm.box = ALMA_BOX
        intra_web.vm.hostname = "intra-web"
    
        # 内部NWに接続 (172.16.0.0/16 セグメント)
        intra_web.vm.network "private_network", 
                            virtualbox__intnet: "INTERNAL_NETWORK", 
                            ip: "172.16.0.130"
        
        intra_web.vm.provider "virtualbox" do |vb| 
          vb.name = "Intra-web"
          vb.memory = VM_MEMORY
        end
      end
    
      # クライアントVM (Linux-mint)
      config.vm.define "client" do |client|
        client.vm.box = "adabits/linuxmint17-64"
        client.vm.hostname = "client"
    
        # 内部NWに接続 (172.16.0.0/16 セグメント)
        client.vm.network "private_network", 
                            virtualbox__intnet: "INTERNAL_NETWORK", 
                            ip: "172.16.0.10"
        
        client.vm.provider "virtualbox" do |vb| 
          vb.name = "Intra-Client"
          vb.memory = "2048"
          vb.cpus = 2
        end # GUIのためメモリを多めに
      end
    end
    1. vagrant plugin install vagrant-vyosコマンドでvyOS用のvagrant-pluginをインストールします。
    vagrant plugin install vagrant-vyos

    Vagrantコマンドの実行

    1. vagrant upコマンドを実行してVMをVirtualBox上に立ち上げます。
    vagrant up

    各コマンドで以下の操作が可能です。

    • vagrant haltでVMの停止(シャットダウン)
    • vagrant reloadでVMの再起動
    • vagrant destroyでVMの停止(シャットダウン)と削除
    • vagrant statusで起動中のVM一覧確認
    1. 以下のusername、passwordで各VMにログイン可能です。
    項目
    usernamevagrant
    passwordvagrant

    3.4. サーバ設定手順

    各VMにログインしてミドルウェアのダウンロードと各種設定を行っていきます。