ただの備忘ブログ

ただの備忘録

Ubuntu_20.04_LTS でIPアドレスを変更する

NetworkManager で設定しない

CentOS8 では、NetworkManager を使ってIPアドレスを設定したが、Ubuntu_20.04 ではどうやら違うらしい。
LPIC の試験では、「/etc/network/interfaces」という設定ファイルを変更する。みたいな感じで書かれていたが、そもそも Ubuntu_20.04 にはそんなファイルが存在していなかった。

rev1a@rev1a-VirtualBox:~$ ls -al /etc/network/
合計 32
drwxr-xr-x 6 root root 4096 8月 8 09:29 .
drwxr-xr-x 129 root root 12288 11月 23 22:17 ..
drwxr-xr-x 2 root root 4096 8月 8 09:31 if-down.d
drwxr-xr-x 2 root root 4096 8月 8 09:31 if-post-down.d
drwxr-xr-x 2 root root 4096 8月 8 09:31 if-pre-up.d
drwxr-xr-x 2 root root 4096 8月 8 09:31 if-up.d

YAML ファイルを弄る

既存YAMLファイルの無効化

どうやら ubuntu_20.04 では、「/etc/netplan/」内にある yamlファイルを編集するらしい。(詳しくは知らない。)
ということで、まずデフォルトで存在している yamlファイルを無効にする。

rev1a@rev1a-VirtualBox:~$ sudo mv /etc/netplan/01-network-manager-all.yaml /etc/netplan/01-network-manager-all.yaml.disable
※デフォルトで存在しているファイルは、削除しても良いらしいが、なんかこわいのでファイル名を変更して、yamlファイルとして認識されないようにする。

新規YAMLファイルの作成

新規にyamlファイルを作成し、IPアドレス等々を設定する。

rev1a@rev1a-VirtualBox:~$ sudo vi /etc/netplan/99-netcfg.yaml
network:
ethernets:
# ネットワークインターフェース名
enp0s3:
dhcp4: no
# IPアドレス/サブネットマスク
addresses: [192.168.1.77/24]
# デフォルトゲートウェイ
gateway4: 192.168.1.1
nameservers:
# 参照するネームサーバー
addresses: [192.168.1.1]
dhcp6: no
version: 2
設定を反映する。
rev1a@rev1a-VirtualBox:~$ sudo netplan apply 
設定されたか確認する。
rev1a@rev1a-VirtualBox:~$ ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:63:90:a5 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.77/24 brd 192.168.1.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet6 240d:1e:149:a400:a00:27ff:fe63:90a5/64 scope global tentative dynamic mngtmpaddr noprefixroute
valid_lft 6172sec preferred_lft 6172sec
inet6 fe80::3767:d144:d0a2:78dc/64 scope link noprefixroute
valid_lft forever preferred_lft forever

Apacheでhttpサーバをhttpsサーバにする

はじめに

Apache でwebサーバを構築すると、何もしなければ「http 80/tcp」の通信になり、セキュリティ的に推奨されていないものになってしまう。
そこてで、今回はあらかじめ作成されている「httpサーバ」に「自己証明書」を作成し、「httpsサーバ」にする。
※「httpサーバ」は作成されているものとする。

https化に必要なモジュールをインストールする。

Apachehttpsサーバを構築するには、「mod_ssl」モジュールが必要になる。

[root@web01 ~]# dnf -y install mod_ssl
メタデータの期限切れの最終確認: 1:39:30 時間前の 2020年11月15日 10時57分53秒 に実施しました。
依存関係が解決しました。
======================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
======================================================================================================================
インストール中:
mod_ssl x86_64 1:2.4.37-21.module_el8.2.0+494+1df74eae AppStream 132 k

完了しました!

サーバの秘密鍵を作る

秘密鍵を作成。

[root@web01 ~]# openssl genrsa -aes128 2048 > server.key
Generating RSA private key, 2048 bit long modulus (2 primes)
....+++++
.......................................................................+++++
e is 65537 (0x010001)
Enter pass phrase: #パスフレーズを入力
Verifying - Enter pass phrase: #パスフレーズを再入力

作成した秘密鍵からパスフレーズを削除する。

[root@web01 ~]# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key: #パスフレーズを入力
writing RSA key

証明書署名要求(CSR)を作成する

基本的にすべての項目を[Enterキー]でスキップする。

[root@web01 ~]# openssl req -utf8 -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
ーーーー
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

サーバ証明書を発行する

今回は、無料で証明書を発行したいため自分自身で証明書を作る。
先ほど作成した証明書署名要求「server.csr」をもとに、サーバ証明書「server.crt」を有効期限:10年間で作成する。

[root@web01 ~]# openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
Signature ok
subject=C = XX, L = Default City, O = Default Company Ltd
Getting Private key

SSLモジュールの設定

証明書・鍵の移動

先ほど作成したサーバ証明書「server.crt」とサーバ秘密鍵「server.key」を管理しやすいように移動させる。

[root@web01 ~]# mkdir /etc/httpd/conf/ssl
[root@web01 ~]# mv server.key /etc/httpd/conf/ssl/
[root@web01 ~]# mv server.crt /etc/httpd/conf/ssl/

SSLモジュールの設定変更

証明書と鍵の場所を加える

[root@web01 ~]# vi /etc/httpd/conf.d/ssl.conf
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that restarting httpd will prompt again. Keep
# in mind that if you have both an RSA and a DSA certificate you
# can configure both in parallel (to also allow the use of DSA
# ciphers, etc.)
# Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt)
# require an ECC certificate which can also be configured in
# parallel.
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt #コメントアウト
SSLCertificateFile /etc/httpd/conf/ssl/server.crt

# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
# ECC keys, when in use, can also be configured in parallel
#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key #コメントアウト
SSLCertificateKeyFile /etc/httpd/conf/ssl/server.key

Apacheを再起動する

最後に「httpd」を再起動し、動作確認をする。

[root@web01 ~]# systemctl restart httpd
再起動完了後に、ブラウザから「https://[IPアドレス]」を検索し、表示されれば成功。

NTPサーバの構築

はじめに

NTPサーバを構築するためには、「chrony」をインストールする必要がある。
(centos8 サーバ用でインストールした際は、デフォルトでインストールされていた。)

「chrony」とは

深くは書かない。長くなりそうだから。
PCをNTPサーバ兼クライアントソフトとして動作させるための
「NTP用のソフトウェアスイート」。

  • chronyd(chronyデーモン)
  • chronyc

「chronyd」は、「chronyc」というコマンドラインユーティリティを使用して、管理及び監視をしている。

NTPサーバを構築

「chrony」のインストール。

主は、「centos8」を使用しているがデフォルトでインストールされていた。
一応、インストールする。

[root@ntp ~]# dnf install -y chrony
CentOS-8 - AppStream 1.5 MB/s | 5.8 MB 00:03
CentOS-8 - Base 1.8 MB/s | 2.2 MB 00:01
CentOS-8 - Extras 5.5 kB/s | 8.6 kB 00:01
パッケージ chrony-3.5-1.el8.x86_64 はすでにインストールされています。
依存関係が解決しました。
行うべきことはありません。
完了しました!
確認方法
(最初にこれやればよかった?)
[root@ntp ~]# dnf list installed | grep chrony
chrony.x86_64 3.5-1.el8 @anaconda

設定を変更

念のためオリジナルファイルをコピーしておく。

[root@ntp ~]# cp /etc/chrony.conf /etc/chrony.conf.orig

設定ファイルを編集

[root@ntp ~]# vi /etc/chrony.conf

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
pool 2.centos.pool.ntp.org iburst
/////////////////
# Allow NTP client access from local network.
#allow 192.168.0.0/16

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#日本の標準時間を提供しているNTPサーバ(stratum 1)
server ntp.nict.jp iburst
/////////////////
# Allow NTP client access from local network.
#allow 192.168.0.0/16
allow 192.168.0.0/24

サービスの起動

「chronyデーモン」を起動

[root@ntp ~]# systemctl start chronyd
[root@ntp ~]# systemctl enable chronyd

「chronyデーモン」のステータスを確認

[root@ntp ~]# systemctl status chronyd
chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-11-20 22:24:41 JST; 37min ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Main PID: 866 (chronyd)
Tasks: 1 (limit: 6041)
Memory: 1.7M
CGroup: /system.slice/chronyd.service
mq866 /usr/sbin/chronyd
正常に動作している。

NTPサーバの時刻同期状態の確認

[root@ntp ~]# chronyc sources
210 Number of sources = 4
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ vpn.ms.mff.cuni.cz 2 8 377 94 +1062us[+1062us] +/- 176ms
^- ns2.vedur.is 3 8 377 34 -8573us[-8573us] +/- 211ms
^* ott130.hkcable.com.hk 3 7 377 103 +1567us[+1776us] +/- 79ms
^+ ntpool0.603.newcontinuum> 2 8 377 37 +57us[ +57us] +/- 107ms

NTPサーバ名の前に「^+」「^*」があれば時刻を同期している。

NetworkManagerでインタフェースの設定をする

virtual box を使って、アダプタをブリッジにして追加したが、
下記のコマンドを実行したところ、インタフェースが反映されていなかった。


[root@lb01 ~]# nmcli device
DEVICE TYPE STATE CONNECTION
enp0s3 ethernet 接続済み enp0s3
enp0s8 ethernet 切断済み --
enp0s9 ethernet 切断済み --
lo loopback 管理無し --
 
そもそもインタフェースの設定ファイルが存在していなかった。

[root@lb01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s9
cat: /etc/sysconfig/network-scripts/ifcfg-enp0s9: そのようなファイルやディレクトリはありません
 

まずは、インタフェースの設定ファイルを作成する。


[root@lb01 ~]# nmcli connection add type ethernet con-name enp0s9 ifname enp0s9
接続 'enp0s9' (36e6beb5-80c7-49b1-a18a-b49b30f76187) が正常に追加されました。

  • 接続タイプは、「ethernet
  • インタフェースの接続名、「enp0s8」

※「/etc/sysconfig/network-scripts/ifcfg-xxx」←「xxx」の部分にも使われる

  • インタフェース名は、「enp0s8」

上記コマンドにより、


/etc/sysconfig/network-scripts/ifcfg-enp0s9
が作成される。

作成した後は、


# nmcli connection up enp0s8
により、「DHCP」で ipアドレス・NWアドレス・デフォルトゲートウェイ等が
自動設定される。

設定後に確認してみる。


[root@lb01 ~]# nmcli device
DEVICE TYPE STATE CONNECTION
enp0s3 ethernet 接続済み enp0s3
enp0s9 ethernet 接続済み enp0s9
enp0s8 ethernet 接続済み enp0s8
lo loopback 管理無し --
接続されたことが確認できた。


インタフェースの設定を変更する。

変更点としては、

  1. IPアドレス
  2. デフォルトゲートウェイ

 の2点とする。

  • IPアドレスを変更する。

 [root@lb01 ~]# nmcli connection modify enp0s9 ipv4.addresses 192.168.1.100/24

  • インタフェースのデフォルトゲートウェイを変更する。

 [root@lb01 ~]# nmcli connection modify enp0s9 ipv4.gateway 192.168.1.1

  • 「DHCP」->「Manual(手動)」に切り替える。

[root@lb01 ~]# nmcli connection modify enp0s9 ipv4.method manual

  • インタフェースを再起動し、設定を反映させる。

[root@lb01 ~]# nmcli connection down enp0s9
接続 'enp0s9' が正常に非アクティブ化されました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@lb01 ~]# nmcli connection up enp0s9
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/4)

  • IPアドレスが変更されたか確認する。

[root@lb01 ~]# ip addr show | grep "enp0s9"
4: enp0s9: mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 192.168.1.100/24 brd 192.168.1.255 scope global noprefixroute enp0s9

LVS+keepalivedを使ってwebサーバを負荷分散

今回作るvirual box上のネットワーク構成図。
f:id:Tryota:20201027223945p:plain

仮想サーバを作成

上記のネットワーク図に記載した分の仮想マシンを作成する

  • 踏み台サーバ×2台
  • Load Balancer×2台
  • webサーバ×2台

各サーバの構成内容

  • 踏み台サーバは、webサーバへアクセスした時にLoad Balancerによって負荷分散されているか確認するためGUIとする。
  • Load Balancer 及び webサーバは、CLIとしてインストールする。

踏み台サーバを作成

  • 踏み台サーバは、冗長化してアクティブ機に障害が発生してもサーバが停止しない構成とする。
  • 上記を実現するため、keepalivedをインストールする。1号機をアクティブ、2号機をスタンバイとする。

1. keepalived をインストール
[root@bastin01 ~]# dnf -y install keepalived
CentOS-8 - AppStream 3.3 MB/s | 5.8 MB 00:01
CentOS-8 - Base 2.0 MB/s | 2.2 MB 00:01
CentOS-8 - Extras 9.1 kB/s | 8.1 kB 00:00
依存関係が解決しました。

完了しました!

2. 設定ファイルをコピー
[root@bastin01 ~]# cd /etc/keepalived/
[root@bastin01 keepalived]# cp keepalived.conf keepalived.conf.orig
[root@bastin01 keepalived]# vi keepalived.conf

####################################
! Configuration File for keepalived

global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER #MASTER/BACKUP(1号機:MASTER 2号機:BACKUP)
interface enp0s3
virtual_router_id 51 #1、2号機で合わせる
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #virtual IPアドレスの設定
192.168.1.50/24 dev enp0s3
10.0.0.50/24 dev enp0s8
}
}
####################################

3. firewalld で「VRRP」パケットを許可する
[root@bastin01 ~]# firewall-cmd --permanent --add-protocol=vrrp
success
[root@bastin01 ~]# firewall-cmd --reload
success

[root@bastin01 ~]# systemctl start keepalived.service
[root@bastin01 ~]# systemctl enable keepalived.service
Created symlink /etc/systemd/system/multi-user.target.wants/keepalived.service → /usr/lib/systemd/system/keepalived.service.

4. 1号機に設定した virtual IPアドレスが振り分けられていることを確認する
[root@bastin01 ~]# ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:1c:f5:08 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.51/24 brd 192.168.1.255 scope global noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet 192.168.1.50/24 scope global secondary enp0s3
valid_lft forever preferred_lft forever
inet6 240d:1e:149:a400:661b:ec36:d833:f7b4/64 scope global dynamic noprefixroute
valid_lft 10411sec preferred_lft 10411sec
inet6 fe80::460c:3b21:de30:5f13/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: enp0s8: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:28:af:5d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.51/24 brd 10.0.0.255 scope global noprefixroute enp0s8
valid_lft forever preferred_lft forever
inet 10.0.0.50/24 scope global secondary enp0s8
valid_lft forever preferred_lft forever
inet6 fe80::f556:a17a:a07:3543/64 scope link noprefixroute
valid_lft forever preferred_lft forever

Load Balancerを作成

  • webサーバへのアクセスを集中させないため負荷分散装置を作成。
  • 踏み台サーバと同じくkeepalivedをインストールし、冗長化構成にする。ただ、今回はkeepalivedを使ってリアルサーバ(バックエンドサーバ)の稼働状況の監視をさせる設定を組み込む。

! Configuration File for keepalived

global_defs {
router_id LVS_server
}

vrrp_instance VI_1 {
state MASTER
interface enp0s3
virtual_router_id 100
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
10.0.0.10 dev enp0s3
172.16.0.10 dev enp0s8
}
}

#リアルサーバの稼働状況を監視する設定を追加
virtual_server 10.0.0.10 80 {
delay_loop 6
lb_algo rr #負荷分散アルゴリズム
lb_kind NAT #負荷分散方式
persistence_timeout 50
protocol TCP

real_server 172.16.0.100 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
}
}

real_server 172.16.0.101 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
}
}
}

  • 負荷分散装置として動作させるため、LVS(Linux Virtual Server)をインストール。(LVSの管理ユーティリティであるipvsadmをインストール)
  • LVSの設定

1. ipvsadm をインストール
[root@LB01 ~]# dnf install -y ipvsadm
メタデータの期限切れの最終確認: 0:22:38 時間前の 2020年10月29日 21時45分41秒 に実施しました。
依存関係が解決しました。

完了しました!

2. ipvsのシステム設定ファイルを作成
[root@LB01 ~]# touch /etc/sysconfig/ipvsadm

3. ipフォワーディングを設定
[root@LB01 ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

4. Load Balanceの設定(-A:virtual server -a:VSに振り分け先のリアルサーバを追加 -r:リアルサーバ -m:転送方法の設定(mはNAT方式))
[root@LB01 ~]# ipvsadm -C
[root@LB01 ~]# ipvsadm -A -t 10.0.0.10:80 -s wlc
[root@LB01 ~]# ipvsadm -a -t 10.0.0.10:80 -r 172.16.0.100:80 -m
[root@LB01 ~]# ipvsadm -a -t 10.0.0.10:80 -r 172.16.0.101:80 -m
[root@LB01 ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.10:http wlc
-> 172.16.0.100:http Masq 1 0 0
-> 172.16.0.101:http Masq 1 0 0

webサーバを作成

  • Load Balancerによって負荷分散できているか確認するため、webサーバを2台作成。
  • webサーバ用にapacheをインストールする。
  • firewalldでhttpもしくは80/tcpを許可する。

routingの設定

踏み台サーバ→webサーバへの通信はLBを経由するようにする。
[root@bastin01 ~]# ip route add 172.16.0.0/24 via 10.0.0.10 dev enp0s8


追記

上記設定では、
踏み台サーバ→ロードバランサ→webサーバ
の通信は成功するが、帰りの通信が成功しなかった。
パケットキャプチャをしたが、踏み台サーバにwebサーバからの「SYN+ACKパケット」が到達していなかった。
恐らく「firewalld」でIPマスカレード設定をしていないのが原因。
今回は、ローカルだし設定めんどくさいし...ってことで、「firewalld」自体を停止させた。

[root@LB01 ~]# systemctl stop firewalld.service
「firewalld」を停止させたら成功した。

centos8を冗長構成にする

Linuxサーバを冗長化するには、keepalivedを使用する。

 

冗長化する目的

  • NW機器やサーバに障害が発生してとしてもサービスを提供できるようにする。
  • 構成変更時、スタンバイ系の1台ずつ変更できる。結果、サービスを停止しないで作業ができる。

今回、冗長化するための構成図↓

f:id:Tryota:20201020214938p:plain

負荷分散装置(LVS:Linux Virtual Server)については、

前回の記事を参照。

 

keepalivedの設定をしていく。

 

keepalived のインストール

dnf install -y keepalived

 

以下に設定ファイルが置かれる

/etc/keepalived/keepalived.conf

 

設定ファイルをコピー

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.org

 

設定ファイルを編集

vi /etc/keepalived/keepalived.conf

 

! Configuration File for keepalived

 global_defs {
  router_id LVS_server
 }

 vrrp_instance VI_1 { #HAクラスタ冗長化クラスタ)の設定
  state MASTER #1号機と2号機で変える(MASTER/BACKUP)
  interface enp0s3 #冗長化するインタフェース
  virtual_router_id 51 #1号機と2号機で合わせる
  priority 100
  advert_int 3 #1号機と2号機で合わせる
  authentication {
   auth_type PASS
   auth_pass password
  }
  virtual_ipaddress {#パケットを送受信する仮想サーバ(1号機と2号機で合わせる)
   192.168.1.202/24
  }
 }

 

firewalldの設定

vrrpの許可

firewall-cmd --permanent --add-protocol=vrrp

firewall-cmd --reload

 

設定を保存して、serviceの起動

systemctl start keepalived.service

systemctl enable keepalived.service

 

 

負荷分散の設定

LVS(Linux Virtual Server)とは、

Linuxサーバをロードバランサとして使用するためのソフトウェア。

クライアントからの複数のリクエストをリアルサーバ(バックエンドサーバ)に

振り分ける機能を提供する。

 

※リアルサーバ:実際のサービス(http)などを提供するサーバ

※ロードバランサ:仮想サーバともいう。クライアントからのリクエストを

         代わりに受け付けて、リアルサーバに処理を割り振る。

 

LVSの主要コンポーネント

 IPVS:カーネルモジュールの【ip_vs】として実装。

 lvsd:デーモン。

 ipvsadm:LVSの管理ユーティリティ。コマンド。

 

実際の設定方法

設定する前に、

リアルサーバのデフォルトゲートウェイを仮想サーバの内側(リアルサーバ側)に設定しておくこと。

これを設定しないとリアルサーバ -> クライアントへのパケットが配送されない

 

#LVSのインストール

dnf -y install ipvsadm

#ipフォワードを設定

echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf

sysctl -p

 

#ipvsサービスの起動

touch /etc/sysconfig/ipvsadm

systemctl start ipvs.service

systemctl enable ipvs.service

#テーブルのクリア

ipvsadm -C

#-A:仮想サーバの追加 -t:TCPの指定 -s:負荷分散のスケジューリングアルゴリズムの指定
ipvsadm -A -t 192.168.1.50:80 -s wlc

#-a:仮想サーバにリアルサーバを追加 -r:リアルサーバの指定 -m:フォワーディング方式にマスカレーディング(NAT)を指定
ipvsadm -a -t 192.168.1.50:80 -r 10.0.2.11:80 -m
ipvsadm -a -t 192.168.1.50:80 -r 10.0.2.12:80 -m

#テーブルの確認

ipvsadm -l

 

 

エラー発生時

systemctl restart ipvsadm.service
Job for ipvsadm.service failed because the control process exited with error code.
See "systemctl status ipvsadm.service" and "journalctl -xe" for details.
● ipvsadm.service - Initialise the Linux Virtual Server
Loaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Sat 2020-08-22 07:55:50 JST; 13s ago
Process: 28426 ExecStart=/bin/bash -c exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm (code=exited
Main PID: 28426 (code=exited, status=1/FAILURE)

8月 22 07:55:50 centos8-LB02 systemd[1]: Starting Initialise the Linux Virtual Server...
8月 22 07:55:50 centos8-LB02 bash[28426]: /bin/bash: /etc/sysconfig/ipvsadm: そのようなファイルやディレ
8月 22 07:55:50 centos8-LB02 systemd[1]: ipvsadm.service: Main process exited, code=exited, status=1/FA
8月 22 07:55:50 centos8-LB02 systemd[1]: ipvsadm.service: Failed with result 'exit-code'.
8月 22 07:55:50 centos8-LB02 systemd[1]: Failed to start Initialise the Linux Virtual Server.

要するに、

/etc/sysconfig/ipvsadm

上記のファイルを作成していなかった。

 

#ファイルを作成

touch /etc/sysconfig/ipvsadm

#サービスの起動

systemctl start ipvsadm.service
systemctl enable ipvsadm.service
Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service →
/usr/lib/systemd/system/ipvsadm.service.

 

無事に起動できた。

 

centos にある「/etc/sysconfig」というディレクトリは、

通常の設定ファイルとは別のシステムの設定ファイルが置かれている。

今回の場合は、「/etc/sysconfig/ipvs」ファイルには「ipvsサービス」起動時に

「lvsdデーモン」に引き渡す引数を記述するために使用されている。