背景

ついにインフラエンジニアになった。インフラエンジニアになったのであれば、インフラ関係を一通りこなせないと話にならないだろう! というお話です。ということで、クラスタ作って、クラスタがいい感じに運用できるようにいろいろとインフラを構築していこうと思う。

さらに言うと、業務でansibleを使っているので、IaC(インフラストラクチャasコード)を実現したいと思っている。これができればいつでもそのインフラが再現可能になるからね。練習も込みで。

要件

完全に独立したネットワークを構築したいと思っている。そのため、

  1. ルータ が必要。この時、内部ネットワークから外部にアクセスする必要がないよね。だから、natでいいわけだね。 次に、サブネット内でDHCPをしつつ、アドレスの固定を一括で管理したい。 それの実現方法がDHCPを使って、macアドレスとipを対応付けるという方法。 さらに、ネットワーク内で、ipアドレスではなく、ドメイン名でアクセスができるようにしたいので、DNSサーバも立てたい。

  2. 最後、K8Sのコントロールプレーンだね。これは作りたい。

  3. K8Sサーバに何を立てるかだけど、とりあえずechoサーバを立てて負荷試験をやってみたい。そうだね。将来的には配信サーバなどを立てられるといいのだけれど

  4. 後は、prometheus + graphanaで、負荷を可視化できるとなおいいよね。時系列でどれくらい負荷がかかっているのかが見れると最高だと思います。

  5. 各サーバにいちいち入るのは面倒くさいので一括でsshしたいと思っています。これを可能にする方法を岡田さんが考えてくれました。 msshですね。

各物理サーバ(ラズパイ)のハードウェアスペック

  1. router : raspi 5. RAM 8G. Storage 128G
  2. beta : raspi 4. RAM 1G. Storage 32G
  3. delta: raspi4. RAM 4G Storage 64G
  4. phi (f): raspi4. RAM 8G. Storage 32G
  5. gamma: raspi4. RAM 8G Storage 128G
  6. omega: raspi4. RAM 1G storage 32G
  7. zeta: raspi4. RAM 8G

ここから使える奴だけ選抜する。 router, delta, phi, gamma, zeta の5台。一台は、router + dhcp + dnsの役割を持たせる。 容量的にdeltaがよさそう。そのほかは、k8sクラスタになる。頑張ってくれ。 k8sちゃんと動いてくれ!! ちなみに、

参考文献

前に書いた自分の記事を参考にしてインストール これも使えそう

簡単に前提知識をまとめる

ルータの構築

まずはルータの定義をしたいと思う。

いろんな定義があるが、個人的に大事だと思うのは以下。

  1. Data Packet Forwarding
  2. Network Connectionis
  3. IP Address Management
  4. Network Addrss Translation だね。この中で思うのは、NATはData Packet Forwardingに含まれるのでは?という話。 chat GPTに聞いてみたらこんな答えが返ってきた。
So, while NAT is indeed a subset of the packet forwarding process, it plays a specialized role in managing and translating IP addresses as packets are forwarded between different networks.

うん、俺が気になるのはNATをせずに外界にアクセスできるのか?という話。これも聞いてみようか。

はい、直接インターネットにつなげるとか、VPNを使わとか、L7でプロキシを使うとか、そういう話をしてくれたけど、全部違うね。結論、できない。と思っておいていいよ。 ちなみに、IPマスカレードはNAPTのこと。リナックスのルーティング設定でやっているnatは厳密にはnaptって覚えておいた方がいいかも。

  1. Data packet Forwardingは、Linuxカーネルの機能でいける。
  2. Network Connections:これは、なんだ?
  3. これはね、DHCPを持てということだともう。
  4. NAT;これは内側から外側へのアクセスを可能すること。これはData packet ForwardingをONにした後、iptablesで実現できるよね。Ok?

実際の作業記録

ルータ構築

まず、ラズパイにubuntu 22.04以上をインストールした。 この時、初期ユーザがubuntuで初期パスワードもubuntuだった。これ知らなくて少し戸惑った。 次。usb nicをつなげても ifconfigで出てこなかったのが戸惑った。しかし、ip addrでは出てきていた。 これ、ubuntu 20.04からかな、ネットワーク関係のファイルは全部/etc/netplan/で管理されるようになって、そこに書き込まないとだめだという話だった。

  network:
    version: 2
    ethernets:
        eth0:
            dhcp4: true
            match:
                macaddress: fc:15:b4:bn:34:g5
            set-name: eth0
        wlan0:
            dhcp4: true
            match:
                macaddress: 00:22:34:f4:d3:45
            set-name: wlan0

こんな感じで書き込まなとだめだったという話である。 実際に僕が書いたネットワーク設定はこちらである。

network:
  ethernets:
    eth0:
      dhcp4: true
    enx548883dk:
      optinal: true
      address: 
        - "192.168.3.1/24"

といった感じである。問題なさそうだね。ゲートウェイだから、192.168.3.1/24になっている、という話です。ここは大事だね。

ip forwarding とNATの設定

ipフォワーディングを可能にするカーネルパラメータをいじる。

vim /etc/sysctl 

net.ip.的なのを変更。これをしないと次ののiptablesでnatの設定をしてもカーネルで通過させない設定になる。これは大事ですね。 その次、ipフォワーディングを実際に可能にする設定をiptablesに書き込む

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

次、iptablesでnatを可能にする。

iptables -A FORWARD -i enx58278cbf4b66 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o enx58278cbf4b66 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

ルールを永続化させるために、rc.localっていう、ブート時に実行されるファイルを用意していたけど、今回はそれではなく、

sudo apt install iptables-persistent

というのをインストールしました。

sudo iptables-save > /etc/iptables/rules.v4

ここまでの動作確認をします。 一応、サブネットにいるサーバたちから、

ping 8.8.8.8

は通ります。 しかし、

ping google.com

は通りません。それはなぜかというと、参照しているDNSが /etc/resolve.confを見ればわかりますが、

nameserver 127.0.0.53
options edns0 trust-ad
search .

になっているからですね。これを変えていきたいと思っています。あとでサブネットにDNSサーバを作って、名前解決できるようにします。

DHCPサーバ

入れる。isc keaってのと、isc-dhcp-serverという二つの選択肢がある。isc-keaはisc-dhcp-serverの後継。 ってことでisc-kea入れようと思ったけど、どうしよう。まあ、isc-dhcp-serverでいいか。 これは、実は前にやったことがあるって話だよね。

前に書いた自分の記事を参考にしてインストール します。

の前に、DHCPでIPアドレスを固定していきたいと思います。

#追記
subnet 192.168.3.0 netmask 255.255.255.0 {
    range 192.168.3.10 192.168.3.20;
    option routers 192.168.3.1;
    option domain-name-servers 192.168.3.1;
    option broadcast-address 192.168.3.255;
    ignore declines;

   host zeta {
        hardware ethernet DC:A6:32:FA:54:DF;  # Device's MAC address
        fixed-address 192.168.3.5;         # Fixed IP address
   }

   host gamma {
        hardware ethernet e4:5f:01:96:51:12;  # Device's MAC address
        fixed-address 192.168.3.6;         # Fixed IP address
  }

   host phi {
        hardware ethernet e4:5f:01:96:51:05;  # Device's MAC address
        fixed-address 192.168.3.7;         # Fixed IP address
   }

   host master {
        hardware ethernet d8:3a:dd:f0:f6:de;  # Device's MAC address
        fixed-address 192.168.3.8;         # Fixed IP address
   }
}

この設定にしました。そして、dhcpをリスタートすると、こんな感じになります。

sudo journalctl -u isc-dhcp-server の結果

Jul 27 09:07:57 ubuntu dhcpd[31431]: Server starting service.
Jul 27 09:08:03 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.7 from d8:3a:dd:f0:f6:de via enx58278cbf4b66: lease 192.168.3.7 unavailable.
Jul 27 09:08:03 ubuntu dhcpd[31431]: DHCPNAK on 192.168.3.7 to d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:03 ubuntu dhcpd[31431]: DHCPDISCOVER from d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:03 ubuntu dhcpd[31431]: DHCPOFFER on 192.168.3.8 to d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:03 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.8 (192.168.3.1) from d8:3a:dd:f0:f6:de via enx58278cbf4b66: lease 192.168.3.8 unavailable.
Jul 27 09:08:03 ubuntu dhcpd[31431]: DHCPNAK on 192.168.3.8 to d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:05 ubuntu dhcpd[31431]: DHCPDISCOVER from d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:05 ubuntu dhcpd[31431]: DHCPOFFER on 192.168.3.8 to d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:05 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.8 (192.168.3.1) from d8:3a:dd:f0:f6:de via enx58278cbf4b66: lease 192.168.3.8 unavailable.
Jul 27 09:08:05 ubuntu dhcpd[31431]: DHCPNAK on 192.168.3.8 to d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:09 ubuntu dhcpd[31431]: DHCPDISCOVER from d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:09 ubuntu dhcpd[31431]: DHCPOFFER on 192.168.3.8 to d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:09 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.8 (192.168.3.1) from d8:3a:dd:f0:f6:de via enx58278cbf4b66: lease 192.168.3.8 unavailable.
Jul 27 09:08:09 ubuntu dhcpd[31431]: DHCPNAK on 192.168.3.8 to d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:17 ubuntu dhcpd[31431]: DHCPDISCOVER from d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:17 ubuntu dhcpd[31431]: DHCPOFFER on 192.168.3.8 to d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:17 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.8 (192.168.3.1) from d8:3a:dd:f0:f6:de via enx58278cbf4b66: lease 192.168.3.8 unavailable.
Jul 27 09:08:17 ubuntu dhcpd[31431]: DHCPNAK on 192.168.3.8 to d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:25 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.5 from e4:5f:01:96:51:12 via enx58278cbf4b66: lease 192.168.3.5 unavailable.
Jul 27 09:08:25 ubuntu dhcpd[31431]: DHCPNAK on 192.168.3.5 to e4:5f:01:96:51:12 via enx58278cbf4b66
Jul 27 09:08:30 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.4 from e4:5f:01:96:51:05 via enx58278cbf4b66: lease 192.168.3.4 unavailable.
Jul 27 09:08:30 ubuntu dhcpd[31431]: DHCPNAK on 192.168.3.4 to e4:5f:01:96:51:05 via enx58278cbf4b66
Jul 27 09:08:33 ubuntu dhcpd[31431]: DHCPDISCOVER from d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:33 ubuntu dhcpd[31431]: DHCPOFFER on 192.168.3.8 to d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:33 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.8 (192.168.3.1) from d8:3a:dd:f0:f6:de via enx58278cbf4b66: lease 192.168.3.8 unavailable.
Jul 27 09:08:33 ubuntu dhcpd[31431]: DHCPNAK on 192.168.3.8 to d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:36 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.3 from dc:a6:32:fa:54:df via enx58278cbf4b66: lease 192.168.3.3 unavailable.
Jul 27 09:08:36 ubuntu dhcpd[31431]: DHCPNAK on 192.168.3.3 to dc:a6:32:fa:54:df via enx58278cbf4b66
Jul 27 09:08:48 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.7 from d8:3a:dd:f0:f6:de via enx58278cbf4b66: lease 192.168.3.7 unavailable.
Jul 27 09:08:48 ubuntu dhcpd[31431]: DHCPNAK on 192.168.3.7 to d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:48 ubuntu dhcpd[31431]: DHCPDISCOVER from d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:48 ubuntu dhcpd[31431]: DHCPOFFER on 192.168.3.8 to d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:48 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.8 (192.168.3.1) from d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:08:48 ubuntu dhcpd[31431]: DHCPACK on 192.168.3.8 to d8:3a:dd:f0:f6:de via enx58278cbf4b66
Jul 27 09:09:23 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.4 from e4:5f:01:96:51:05 via enx58278cbf4b66: lease 192.168.3.4 unavailable.
Jul 27 09:09:23 ubuntu dhcpd[31431]: DHCPNAK on 192.168.3.4 to e4:5f:01:96:51:05 via enx58278cbf4b66
Jul 27 09:09:23 ubuntu dhcpd[31431]: DHCPDISCOVER from e4:5f:01:96:51:05 via enx58278cbf4b66
Jul 27 09:09:23 ubuntu dhcpd[31431]: DHCPOFFER on 192.168.3.7 to e4:5f:01:96:51:05 via enx58278cbf4b66
Jul 27 09:09:23 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.7 (192.168.3.1) from e4:5f:01:96:51:05 via enx58278cbf4b66
Jul 27 09:09:23 ubuntu dhcpd[31431]: DHCPACK on 192.168.3.7 to e4:5f:01:96:51:05 via enx58278cbf4b66
Jul 27 09:09:25 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.5 from e4:5f:01:96:51:12 via enx58278cbf4b66: lease 192.168.3.5 unavailable.
Jul 27 09:09:25 ubuntu dhcpd[31431]: DHCPNAK on 192.168.3.5 to e4:5f:01:96:51:12 via enx58278cbf4b66
Jul 27 09:09:28 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.3 from dc:a6:32:fa:54:df via enx58278cbf4b66: lease 192.168.3.3 unavailable.
Jul 27 09:09:28 ubuntu dhcpd[31431]: DHCPNAK on 192.168.3.3 to dc:a6:32:fa:54:df via enx58278cbf4b66
Jul 27 09:09:28 ubuntu dhcpd[31431]: DHCPDISCOVER from dc:a6:32:fa:54:df via enx58278cbf4b66
Jul 27 09:09:28 ubuntu dhcpd[31431]: DHCPOFFER on 192.168.3.5 to dc:a6:32:fa:54:df via enx58278cbf4b66
Jul 27 09:09:28 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.5 (192.168.3.1) from dc:a6:32:fa:54:df via enx58278cbf4b66
Jul 27 09:09:28 ubuntu dhcpd[31431]: DHCPACK on 192.168.3.5 to dc:a6:32:fa:54:df via enx58278cbf4b66
Jul 27 09:10:16 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.5 from e4:5f:01:96:51:12 via enx58278cbf4b66: lease 192.168.3.5 unavailable.
Jul 27 09:10:16 ubuntu dhcpd[31431]: DHCPNAK on 192.168.3.5 to e4:5f:01:96:51:12 via enx58278cbf4b66
Jul 27 09:10:16 ubuntu dhcpd[31431]: DHCPDISCOVER from e4:5f:01:96:51:12 via enx58278cbf4b66
Jul 27 09:10:16 ubuntu dhcpd[31431]: DHCPOFFER on 192.168.3.6 to e4:5f:01:96:51:12 via enx58278cbf4b66
Jul 27 09:10:16 ubuntu dhcpd[31431]: DHCPREQUEST for 192.168.3.6 (192.168.3.1) from e4:5f:01:96:51:12 via enx58278cbf4b66
Jul 27 09:10:16 ubuntu dhcpd[31431]: DHCPACK on 192.168.3.6 to e4:5f:01:96:51:12 via enx58278cbf4b66

でログを見ると、本当にDHCp requestが来て、割り当てているのがわかる。これは面白いね。

DNSサーバ

bindというDNSサーバを立てたいと思ます。これもISCが開発したサーバです。

必要ツールのインストール

sudo apt install bind9 bind9utils bind9-doc

/etc/bind/named.conf.optionsの設定

options {
    directory "/var/cache/bind";
    listen-on { any; };  # or specify an interface
    allow-query { 192.168.3.0/24; };
    forwarders {
        8.8.8.8;
        8.8.4.4;
    };
    recursion yes;
    dnssec-validation auto;
    auth-nxdomain no;    # conform to RFC1035
};

/etc/bind/named.conf.localの編集

zone "ingenboy.local" {
    type master;
    file "/etc/bind/db.ingenboy.local";
    allow-update { key "rndc-key"; };
};

rndc keyの生成

sudo rndc-confgen -a
sudo chown bind:bind /etc/bind/rndc.key

これはマジで何かわからんなという話。

/etc/dhcp/dhcpd.confのアップデート

option domain-name "ingenboy.local";
option domain-name-servers 192.168.3.1;

default-lease-time 600;
max-lease-time 7200;

zone ingenboy.local. {
    primary 127.0.0.1;    # This is your local DNS server
    key rndc-key;
}

zone 3.168.192.in-addr.arpa. {
    primary 127.0.0.1;
    key rndc-key;
}

subnet 192.168.3.0 netmask 255.255.255.0 {
    range 192.168.3.10 192.168.3.20;
    option routers 192.168.3.1;
    option domain-name-servers 192.168.3.1;
    option broadcast-address 192.168.3.255;
    ignore declines;

    host zeta {
        hardware ethernet DC:A6:32:FA:54:DF;  # Device's MAC address
        fixed-address 192.168.3.5;           # Fixed IP address
    }

    host gamma {
        hardware ethernet e4:5f:01:96:51:12;  # Device's MAC address
        fixed-address 192.168.3.6;           # Fixed IP address
    }

    host phi {
        hardware ethernet e4:5f:01:96:51:05;  # Device's MAC address
        fixed-address 192.168.3.7;           # Fixed IP address
    }

    host master {
        hardware ethernet d8:3a:dd:f0:f6:de;  # Device's MAC address
        fixed-address 192.168.3.8;           # Fixed IP address
    }
}

zoneファイルを作る

テンプレをコピー

sudo cp /etc/bind/db.local /etc/bind/db.ingenboy.local
$TTL    604800
@       IN      SOA     ns1.ingenboy.local. admin.ingenboy.local. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns1.ingenboy.local.
ns1     IN      A       192.168.3.1     ; Assuming the DNS server is on 192.168.3.1
zeta    IN      A       192.168.3.5
gamma   IN      A       192.168.3.6
phi     IN      A       192.168.3.7
master  IN      A       192.168.3.8

configの確認

sudo named-checkzone ingenboy.local /etc/bind/db.ingenboy.local

最終的なdhcpd.conf

# Domain and DNS settings
option domain-name "ingenboy.local";
option domain-name-servers 192.168.3.1;

# Default and max lease time
default-lease-time 600;
max-lease-time 7200;

# Define the key used for DNS updates
key "rndc-key" {
    algorithm hmac-md5;
    secret "the_secret_from_rndc.key_file";  # This is just a placeholder; your actual key is in rndc.key
}

# Zone configurations for DNS dynamic updates
zone ingenboy.local. {
    primary 127.0.0.1;    # IP of your DNS server, assuming it's the local machine
    key rndc-key;
}

zone 3.168.192.in-addr.arpa. {
    primary 127.0.0.1;
    key rndc-key;
}

# Subnet configuration
subnet 192.168.3.0 netmask 255.255.255.0 {
    range 192.168.3.10 192.168.3.20;  # Range of IPs for dynamic allocation
    option routers 192.168.3.1;
    option domain-name-servers 192.168.3.1;
    option broadcast-address 192.168.3.255;
    ignore declines;

    # Fixed IP assignments
    host zeta {
        hardware ethernet DC:A6:32:FA:54:DF;  # Device's MAC address
        fixed-address 192.168.3.5;           # Fixed IP address
    }

    host gamma {
        hardware ethernet e4:5f:01:96:51:12;  # Device's MAC address
        fixed-address 192.168.3.6;           # Fixed IP address
    }

    host phi {
        hardware ethernet e4:5f:01:96:51:05;  # Device's MAC address
        fixed-address 192.168.3.7;           # Fixed IP address
    }

    host master {
        hardware ethernet d8:3a:dd:f0:f6:de;  # Device's MAC address
        fixed-address 192.168.3.8;           # Fixed IP address
    }
}

テスト

ray@master:~ $ ping zeta.ingenboy.local
PING zeta.ingenboy.local (192.168.3.5) 56(84) bytes of data.
64 bytes from 192.168.3.5 (192.168.3.5): icmp_seq=1 ttl=64 time=0.280 ms
64 bytes from 192.168.3.5 (192.168.3.5): icmp_seq=2 ttl=64 time=0.212 ms

といった感じで動いている。いいですね。

ちなみににDNSがどのポートで動いているかなんですけど、実は

ray@gamma:~$ sudo nmap ns1.ingenboy.local
Starting Nmap 7.80 ( https://nmap.org ) at 2024-07-27 10:38 UTC
Nmap scan report for ns1.ingenboy.local (192.168.3.1)
Host is up (0.0014s latency).
rDNS record for 192.168.3.1: _gateway
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
53/tcp open  domain
MAC Address: 58:27:8C:BF:4B:66 (Buffalo.inc)

って感じで、53番ポートで動いています。はい。

ちなみに、サブネットのphiから、ping bg.ingenboy.comをした時の様子を dns (delta) の53番ポートでtsharkで捕まえた時の結果がこちらになります。

 1 0.000000000  192.168.3.7 → 192.168.3.1  DNS 88 Standard query 0x9a15 A bg.ingenboy.com OPT
    2 0.000823601  192.168.3.7 → 192.168.3.1  DNS 88 Standard query 0x2b44 AAAA bg.ingenboy.com OPT
    3 0.001801164 192.168.0.27 → 8.8.4.4      DNS 100 Standard query 0x6ac0 A bg.ingenboy.com OPT
    4 0.001933311 192.168.0.27 → 8.8.4.4      DNS 100 Standard query 0x9cb7 AAAA bg.ingenboy.com OPT
    5 0.014198447      8.8.4.4 → 192.168.0.27 DNS 104 Standard query response 0x6ac0 A bg.ingenboy.com A 162.43.28.215 OPT
    6 0.014815588      8.8.4.4 → 192.168.0.27 DNS 155 Standard query response 0x9cb7 AAAA bg.ingenboy.com SOA dns01.muumuu-domain.com OPT
    7 0.015363859 192.168.0.27 → 8.8.4.4      DNS 97 Standard query 0x7432 DS ingenboy.com OPT
    8 0.025734832      8.8.4.4 → 192.168.0.27 DNS 614 Standard query response 0x7432 DS ingenboy.com NSEC3 RRSIG SOA a.gtld-servers.net RRSIG NSEC3 RRSIG OPT
    9 0.030683460  192.168.3.1 → 192.168.3.7  DNS 104 Standard query response 0x9a15 A bg.ingenboy.com A 162.43.28.215 OPT
   10 0.030911365  192.168.3.1 → 192.168.3.7  DNS 158 Standard query response 0x2b44 AAAA bg.ingenboy.com SOA dns01.muumuu-domain.com OPT
   11 0.048858547  192.168.3.7 → 192.168.3.1  DNS 99 Standard query 0x7048 PTR 215.28.43.162.in-addr.arpa OPT
   12 0.049779980 192.168.0.27 → 8.8.4.4      DNS 111 Standard query 0x211f PTR 215.28.43.162.in-addr.arpa OPT
   13 0.069771879      8.8.4.4 → 192.168.0.27 DNS 145 Standard query response 0x211f PTR 215.28.43.162.in-addr.arpa PTR x162-43-28-215.static.xvps.ne.jp OPT
   14 0.070867626 192.168.0.27 → 8.8.4.4      DNS 89 Standard query 0x5613 DS arpa OPT
   15 0.078166301      8.8.4.4 → 192.168.0.27 DNS 412 Standard query response 0x5613 DS arpa DS RRSIG OPT
   16 0.081543206 192.168.0.27 → 8.8.4.4      DNS 97 Standard query 0xf63e DS in-addr.arpa OPT
   17 0.090093663      8.8.4.4 → 192.168.0.27 DNS 569 Standard query response 0xf63e DS in-addr.arpa DS DS DS DS RRSIG OPT
   18 0.091050893 192.168.0.27 → 8.8.4.4      DNS 89 Standard query 0xa17b DNSKEY arpa OPT
   19 0.097703909      8.8.4.4 → 192.168.0.27 DNS 921 Standard query response 0xa17b DNSKEY arpa DNSKEY DNSKEY RRSIG OPT 
   20 0.100476006 192.168.0.27 → 8.8.4.4      DNS 101 Standard query 0x5c49 DS 162.in-addr.arpa OPT
   21 0.106870155      8.8.4.4 → 192.168.0.27 DNS 309 Standard query response 0x5c49 DS 162.in-addr.arpa DS RRSIG OPT    
   22 0.107978975 192.168.0.27 → 8.8.4.4      DNS 97 Standard query 0x701b DNSKEY in-addr.arpa OPT
   23 0.114495678      8.8.4.4 → 192.168.0.27 DNS 85 Standard query response 0x701b DNSKEY in-addr.arpa OPT
   24 0.115122207 192.168.0.27 → 8.8.4.4      TCP 76 39251 → 53 [SYN] Seq=0 Win=64660 Len=0 MSS=1220 SACK_PERM=1 TSval=670793320 TSecr=0 WS=    32 0.129581485 192.168.0.27 → 8.8.4.4      TCP 68 39251 → 53 [ACK] Seq=56 Ack=1344 Win=64256 Len=0 TSval=670793334 TSecr=276138244        
   33 0.129868130 192.168.0.27 → 8.8.4.4      TCP 68 39251 → 53 [FIN, ACK] Seq=56 Ack=1344 Win=64384 Len=0 TSval=670793334 TSecr=276138244   
   34 0.132475322 192.168.0.27 → 8.8.4.4      DNS 104 Standard query 0x4b32 DS 43.162.in-addr.arpa OPT
   35 0.136691866      8.8.4.4 → 192.168.0.27 TCP 68 53 → 39251 [FIN, ACK] Seq=1344 Ack=57 Win=65536 Len=0 TSval=276138252 TSecr=670793334   
   36 0.136791328 192.168.0.27 → 8.8.4.4      TCP 68 39251 → 53 [ACK] Seq=57 Ack=1345 Win=64384 Len=0 TSval=670793341 TSecr=276138252        
   37 0.139114856      8.8.4.4 → 192.168.0.27 DNS 544 Standard query response 0x4b32 DS 43.162.in-addr.arpa SOA z.arin.net NSEC 0.43.162.in-addr.arpa RRSIG RRSIG OPT
   38 0.140350435 192.168.0.27 → 8.8.4.4      DNS 101 Standard query 0x39d3 DNSKEY 162.in-addr.arpa OPT
   39 0.146972747      8.8.4.4 → 192.168.0.27 DNS 89 Standard query response 0x39d3 DNSKEY 162.in-addr.arpa OPT
   40 0.147406668 192.168.0.27 → 8.8.4.4      TCP 76 34411 → 53 [SYN] Seq=0 Win=64660 Len=0 MSS=1220 SACK_PERM=1 TSval=670793352 TSecr=0 WS=128
   41 0.153103676      8.8.4.4 → 192.168.0.27 TCP 76 53 → 34411 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=1412 SACK_PERM=1 TSval=3779884023 TSecr=670793352 WS=256
   42 0.153186879 192.168.0.27 → 8.8.4.4      TCP 68 34411 → 53 [ACK] Seq=1 Ack=1 Win=64768 Len=0 TSval=670793358 TSecr=3779884023
   43 0.153401580 192.168.0.27 → 8.8.4.4      DNS 127 Standard query 0x3bdd DNSKEY 162.in-addr.arpa OPT
   44 0.159389252      8.8.4.4 → 192.168.0.27 TCP 68 53 → 34411 [ACK] Seq=1 Ack=60 Win=65536 Len=0 TSval=3779884030 TSecr=670793358
   45 0.159961486      8.8.4.4 → 192.168.0.27 TCP 1276 53 → 34411 [ACK] Seq=1 Ack=60 Win=65536 Len=1208 TSval=3779884031 TSecr=670793358 [TCP segment of a reassembled PDU]
   46 0.160004837 192.168.0.27 → 8.8.4.4      TCP 68 34411 → 53 [ACK] Seq=60 Ack=1209 Win=64256 Len=0 TSval=670793364 TSecr=3779884031       
   47 0.160045522      8.8.4.4 → 192.168.0.27 DNS 235 Standard query response 0x3bdd DNSKEY 162.in-addr.arpa DNSKEY DNSKEY DNSKEY DNSKEY RRSIG RRSIG OPT
   48 0.160094781 192.168.0.27 → 8.8.4.4      TCP 68 34411 → 53 [ACK] Seq=60 Ack=1376 Win=64256 Len=0 TSval=670793365 TSecr=3779884031       
   49 0.160354278 192.168.0.27 → 8.8.4.4      TCP 68 34411 → 53 [FIN, ACK] Seq=60 Ack=1376 Win=64384 Len=0 TSval=670793365 TSecr=3779884031  
   50 0.163618574 192.168.0.27 → 8.8.4.4      DNS 107 Standard query 0x24f1 DS 28.43.162.in-addr.arpa OPT
   51 0.166275506      8.8.4.4 → 192.168.0.27 TCP 68 53 → 34411 [FIN, ACK] Seq=1376 Ack=61 Win=65536 Len=0 TSval=3779884037 TSecr=670793365  
   52 0.166364264 192.168.0.27 → 8.8.4.4      TCP 68 34411 → 53 [ACK] Seq=61 Ack=1377 Win=64384 Len=0 TSval=670793371 TSecr=3779884037       
   53 0.174239377      8.8.4.4 → 192.168.0.27 DNS 545 Standard query response 0x24f1 DS 28.43.162.in-addr.arpa SOA z.arin.net NSEC 29.43.162.in-addr.arpa RRSIG RRSIG OPT
   54 0.176503128  192.168.3.1 → 192.168.3.7  DNS 145 Standard query response 0x7048 PTR 215.28.43.162.in-addr.arpa PTR x162-43-28-215.static.xvps.ne.jp OPT

bind9はいったいどこで動いているのか??

という質問ですが、53で動いているみたいですね。ただ、プロセスとして動いているのが確認できないんですよね。 いや、namedというプロセスが動いています。そして、どこで聞いてるか見てみたけど、普通に53万ポートで動いているみたい。

構築した感想

DHCP側でIPアドレスを固定できるとすごく楽になるという感想。 あと、routerの構築はまじで簡単だという感想。 ただ、新しいubuntuでは、/etc/netplan/….confで全て管理している。という話。しかし、意外と分かりやすい設定になっていると思う。

ここまでのインフラ構築をansbleで実現したい。とりあえずやってみようか??

はい、playbookはこんな感じです。

router_dhcp_dns/
├── inventory
├── playbook.yml
└── roles/
    ├── router/
    │   └── tasks/
    │       └── main.yml
    ├── dhcp/
    │   └── tasks/
    │       └── main.yml
    └── dns/
        └── tasks/
            └── main.yml

inventoryはこんな感じですね?

[routers]
your_router_ip_or_hostname

[dhcp_servers]
your_dhcp_server_ip_or_hostname

[dns_servers]
your_dns_server_ip_or_hostname

もちろん全部同じにしてもいんですよ。

roles/router/tasks/main.yml

---
- name: Enable IP forwarding
  sysctl:
    name: net.ipv4.ip_forward
    value: '1'
    state: present
    reload: yes

- name: Configure NAT with iptables
  iptables:
    chain: FORWARD
    protocol: all
    in_interface: enx58278cbf4b66
    out_interface: eth0
    jump: ACCEPT

- name: Configure NAT for established connections
  iptables:
    chain: FORWARD
    protocol: all
    in_interface: eth0
    out_interface: enx58278cbf4b66
    match: state
    state: RELATED,ESTABLISHED
    jump: ACCEPT

- name: Configure NAT masquerade
  iptables:
    table: nat
    chain: POSTROUTING
    protocol: all
    out_interface: eth0
    jump: MASQUERADE

roles/dhcp/tasks/main.yml

---
- name: Install ISC DHCP server
  apt:
    name: isc-dhcp-server
    state: present

# Configuration of DHCP server can be added here, for example:
- name: Configure DHCP server
   template:
    src: dhcpd.conf.j2
    dest: /etc/dhcp/dhcpd.conf
   notify: restart dhcp server

# handlers:
 - name: restart dhcp server
   service:
     name: isc-dhcp-server
     state: restarted

と入った感じです。

ちょっと面倒くさいので、この辺で終わりにしたいと思いますが。

K8sの構築

の構築はまた次の記事でって感じかな。