CentOS 9 Streamで冗長化対応のルータを作る

ES460をルータにしてましたが、再起動しようとしたら起動しなくなってしまいました。

代わりになるハードウェアを調達してもいいんですが、故障のことを考慮すると仮想化したうえで冗長化しようと思いましたので、構築の手順です。環境としてはens192がインターネット側、ens224がイントラ側になります。

取り合えず、DHCPサーバとIPマスカレードを設定していきます。手順上プロンプトが#となっているのは両ノード、ホスト名が書いてあるのは片ノードでの実施になります。

# dnf -y install dhcp-server
# vi /etc/dhcp/dhcpd.conf
##以下を追記
option domain-name             "homelab.gurees.net";
option domain-name-servers     192.168.8.1;
default-lease-time 600;
max-lease-time 7200;
authoritative;
subnet 192.168.8.0 netmask 255.255.252.0 {
    range dynamic-bootp 192.168.11.10 192.168.11.254;
    option broadcast-address 192.168.11.255;
    option routers 192.168.8.1;
}
##追記ここまで

# firewall-cmd --add-service=dhcp --permanent
# firewall-cmd --reload

# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# vi /etc/sysctl.conf
# sysctl -p
# firewall-cmd --permanent --zone=trusted --change-interface=ens192
# firewall-cmd --permanent --zone=trusted --add-masquerade
# firewall-cmd --permanent --zone=trusted --change-interface=ens224
# firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o ens224 -j MASQUERADE
# firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i ens224 -o ens192 -j ACCEPT
# firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i ens192 -o ens224 -j ACCEPT
# firewall-cmd --reload

keepalivedで切替の設定をします。priorityは1号機を優先したいので、2号機側は90に設定します。

# dnf install -y keepalived
# vi /etc/keepalived/keepalived.conf
##中身を消して以下で上書きます
! Configuration File for keepalived
global_defs {
  vrrp_garp_master_refresh 60
  garp_master_delay        5
  advert_int               1
  router_id                250
}
vrrp_instance VI_1 {
  state             BACKUP
  interface         ens192
  priority          100
  advert_int        3
  authentication {
    auth_type PASS
    auth_pass password
  }
  virtual_ipaddress {
    192.168.1.250/24
  }
  notify_master "/usr/local/sbin/keepalived_master"
  notify_backup "/usr/local/sbin/keepalived_backup"
  notify_fault  "/usr/local/sbin/keepalived_backup"
  notify_stop   "/usr/local/sbin/keepalived_backup"
}
vrrp_instance VI_2 {
  state             BACKUP
  interface         ens224
  priority          100
  advert_int        3
  authentication {
    auth_type PASS
    auth_pass password
  }
  virtual_ipaddress {
    192.168.8.1/22
  }
}

keepalived切り替え時にdhcpdを起動するためのスクリプトを作成します。

# echo '#!/bin/sh'             >  /usr/local/sbin/keepalived_master
# echo 'systemctl start dhcpd' >> /usr/local/sbin/keepalived_master

# echo '#!/bin/sh'             >  /usr/local/sbin/keepalived_backup
# echo 'systemctl stop dhcpd'  >> /usr/local/sbin/keepalived_backup

# chmod +x /usr/local/sbin/keepalived_master
# chmod +x /usr/local/sbin/keepalived_backup

ファイアウォールでvrrpを通し、keepalivedを自動起動するようにします。

# firewall-cmd --permanent --add-protocol=vrrp --zone=trusted
# firewall-cmd --reload
# systemctl start keepalived.service
# systemctl enable keepalived.service

これで以下のように切り替わるのを確認できます。

>tracert 192.168.8.40
192.168.8.40 へのルートをトレースしています。経由するホップ数は最大 30 です
  1     3 ms     3 ms     2 ms  rtx1200.local [192.168.1.1]
  2     4 ms     4 ms     4 ms  192.168.1.251
  3     6 ms     7 ms     6 ms  192.168.8.40
トレースを完了しました。

※※192.168.1.251をシャットダウンする※※

>tracert 192.168.8.40
192.168.8.40 へのルートをトレースしています。経由するホップ数は最大 30 です
  1     5 ms     3 ms     3 ms  rtx1200.local [192.168.1.1]
  2     4 ms     3 ms     4 ms  192.168.1.252
  3     4 ms     5 ms     4 ms  192.168.8.40

※※192.168.1.251を起動する※※
>tracert 192.168.8.40
192.168.8.40 へのルートをトレースしています。経由するホップ数は最大 30 です
  1     3 ms     3 ms     2 ms  rtx1200.local [192.168.1.1]
  2     4 ms     4 ms     4 ms  192.168.1.251
  3     6 ms     7 ms     6 ms  192.168.8.40
トレースを完了しました。

次にDNSを設定します。こちらは両ノードととも起動したままで問題ないので通常通りに設定します。

# dnf -y install bind bind-utils
# mkdir /var/named/log
# chown named.named /var/named/log
# vi /etc/named.conf
##以下に書き換え
acl internal-network {
        192.168.8.0/22;
};
acl home-network {
        192.168.1.0/24;
};
options {
        listen-on port 53    { any; };
        listen-on-v6 port 53 { ::1; };
        directory          "/var/named";
        dump-file          "/var/named/data/cache_dump.db";
        statistics-file    "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        secroots-file      "/var/named/data/named.secroots";
        recursing-file     "/var/named/data/named.recursing";
        allow-query        { localhost; internal-network; home-network; };
        forwarders {
                192.168.1.1;
        };
        recursion yes;
        dnssec-validation yes;
        managed-keys-directory "/var/named/dynamic";
        geoip-directory "/usr/share/GeoIP";
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
        channel "default-log" {
                file "/var/named/log/default.log" versions 5 size 10M;
                severity debug;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
};
zone "homelab.gurees.net" {
        type master;
        file "homelab.gurees.net.zone";
};

ゾーンファイルを構成します。

# vi /var/named/homelab.gurees.net.zone
## 以下を追記
$TTL 86400
@       IN      SOA     gateway.homelab.gurees.net.   root.homelab.gurees.net. (
        2022121801  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
        IN  NS      gateway.homelab.gurees.net.
        IN  A       192.168.8.1
gateway IN  A       192.168.8.1
esxi01  IN  A       192.168.8.14
esxi01  IN  A       192.168.8.15
esxi01  IN  A       192.168.8.16
esxi01  IN  A       192.168.8.17
esxi01  IN  A       192.168.8.18
esxi01  IN  A       192.168.8.19
pve01   IN  A       192.168.9.21
pve02   IN  A       192.168.9.22
pve03   IN  A       192.168.9.23
pve04   IN  A       192.168.9.24
pve05   IN  A       192.168.9.25
svn     IN  A       192.168.10.1
jenkins IN  A       192.168.10.2

設定の確認とDNSサーバの起動を行います。

# named-checkconf -z
zone homelab.gurees.net/IN: loaded serial 2022121801
# systemctl enable --now named
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.

これで冗長対応なルータを作ることができました。今回は仮想マシンにしたので、バックアップを取っておけば故障の復旧も安心ですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)