4. 実装・構築手順
3.1. 内容
構築内容

- 構築サーバ- GW
- 外部権威DNSサーバ
- 外部Webサーバ
- 内部権威DNSサーバ
- 内部DNSキャッシュサーバ
- 内部Webサーバ
- 内部クライアント
 
構築する詳細なVM構成は以下の通りです。

| No | ノード | 名称 | OS | 構築ミドルウェア | 
|---|---|---|---|---|
| 1 | GW | gateway | vyOS | - | 
| 2 | 外部権威DNSサーバ | dmz_dns_auth | Almalinux9 | PowerDNS | 
| 3 | 外部Webサーバ | dmz_web | Almalinux9 | Nginx | 
| 4 | 内部権威DNSサーバ | internal_dns_auth | Almalinux9 | PowerDNS/PowerAdmin/MariaDB | 
| 5 | 内部DNSキャッシュサーバ | internal_dns_cache | Almalinux9 | intra_dnscacheDNS | 
| 6 | 内部Webサーバ | internal_web | Almalinux9 | Apache | 
| 7 | 内部クライアント | client | LinuxMint17 | - | 
構築環境
ホストOSのRAMは32GB以上あることを確認してください。
本プロジェクトでは最小13GB~18GB程度のRAMを使用します。
本プロジェクトでは最小13GB~18GB程度のRAMを使用します。
VirtualBox+Vagrantでサーバを構築し、ミドルウェアのインストール/設定は手動で行う構成とします。
手順にてVirtualBoxとVagrantのインストール方法の解説は割愛します。
- Windows11 24H2
- VirtualBox 7.2.2
- Vagrant 2.4.9
3.2. 構築方法
以下の手順に従い構築してください。
- 「サーバ構築手順」の実施
- 「サーバ設定手順」の各項目を順番に実施
- 「設定確認手順書」にて設定が適切で、期待通りに動くか確認
3.3. サーバ構築手順
Vagrantファイルの準備
- 任意のフォルダに以下のvagarantファイルを作成してください。
- VagrantFile
vagrant initコマンドで作成可能です。
vagrant init- 作成した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- vagrant plugin install vagrant-vyosコマンドでvyOS用のvagrant-pluginをインストールします。
vagrant plugin install vagrant-vyosVagrantコマンドの実行
- vagrant upコマンドを実行してVMをVirtualBox上に立ち上げます。
vagrant up各コマンドで以下の操作が可能です。
- vagrant haltでVMの停止(シャットダウン)
- vagrant reloadでVMの再起動
- vagrant destroyでVMの停止(シャットダウン)と削除
- vagrant statusで起動中のVM一覧確認
- 以下のusername、passwordで各VMにログイン可能です。
| 項目 | 値 | 
|---|---|
| username | vagrant | 
| password | vagrant | 
3.4. サーバ設定手順
各VMにログインしてミドルウェアのダウンロードと各種設定を行っていきます。