2021年12月27日月曜日

商用OSのEOSを調べてみた!2021年末版

私は年末に主要な商用OSのEnd of Support (EOS) を調査しており、本記事ではその結果を記載する

結論を先に言うと、2022年中に完全にサポート期限を迎える製品はvSphere 6.0のみとなる。それ以外は2022年はまだサポートが継続できる。

2022年にサポート期限を迎える製品については、太字で強調表示した。

なお、本記事で「EOS」と表現する場合は、製品として完全にすべてのサポートが終了する期限を指すことにする。例えば、通常サポートが終了しても延長サポートが存在するような場合は、EOSとは表現しない。

Windows (PC用)

Windows 10以降は新しいWindows OSはリリースされないと思われていたが、2021年はまさかのWindows 11がリリースされた年となった。

結果、現時点でサポートが残っているWindows OSは、Windows 8.1、Windows 10、Windows 11の3つとなる。

Windows 8.1

Windows 8.1は固定ライフサイクルポリシーであり、2023年1月まで延長サポートが継続される。

OS名 サポート状況 サポート期限
Windows 8.1 延長サポート 2023/01/10

Windows 10

Windows 10は、モダンライフサイクルポリシーが適用される。なお、今までの単純なメインストリームサポートと延長サポートの構成を「固定ライフサイクルポリシー」と呼ぶ。

モダンライフサイクルポリシーについて簡単に説明すると、Windows 10では3月と9月の年2回、機能更新プログラムのリリースが予定されており、この機能更新プログラムのリリースから18ヶ月 (EnterpriseとEducation Editonについては、9月更新は+1年された30ヶ月) が、その機能更新プログラムを適用したWindows 10のサポート期間となる。

機能更新プログラムは2020年4月まではYYMMの形式で表現されていたが、最新の2020年10月のアップデートからは20H2という名称になっている。2021年は21H1、21H2といった名称でリリースされることになる。

また、Windows 10, version 21H2以降は、今までの半期に1回の機能更新プログラムリリースから、年1回下期のリリースのみに変更された。

以下に現時点におけるサポート中のバージョンを以下に記載する。

OS名 サポート期限 (Home and Pro) サポート期限 (Enterprise and Education)
Windows 10, version 20H2 2022/05/10 2023/05/09
Windows 10, version 21H1 2022/12/13 2022/12/13
Windows 10, version 21H2 2023/06/13 2024/06/11

Windows 11

Windows 11もモダンライフサイクルポリシーが適用されるが、サポート期間がWindows10より6ヶ月延長され、24ヶ月 (EnterpriseとEducation Editonについては36ヶ月) となった。

OS名 サポート期限 (Home and Pro) サポート期限 (Enterprise and Education)
Windows 11 (Version 21H2) 2023/10/10 2024/10/08

Windows Server

2021年はWindows Server 2022がリリースされた。

Windows Serverは現時点で、Windows Server 2012、2012 R2、2016、2019、2022の5つのバージョンがサポートされる状況となっている。

Windows Server 2016のメインストリームサポートが2022年に終了するものの、完全にサポート終了する製品はないため、しばらくは平和に過ごすことができそうだ。

OS名 サポート状況 サポート期限
Windows Server 2012 延長サポート 2023/10/10
Windows Server 2012 R2 延長サポート 2023/10/10
Windows Server 2016 メインストリームサポート 2022/01/11
Windows Server 2016 延長サポート 2027/01/12
Windows Server 2019 メインストリームサポート 2024/01/09
Windows Server 2019 延長サポート 2029/01/09
Windows Server 2022 メインストリームサポート 2026/10/13
Windows Server 2022 延長サポート 2031/10/14

VMware vSphere

昨年の2020年にvSphere 7.0がリリースされた以降、大きな動きはないが、2022年3月でvSphere 6.0はTECHNICAL GUIDANCEが終了するので注意。vSphere 6.5とvSphere 6.7はGENERAL SUPPORTが終了する。

OS名 サポート状況 サポート期限
vSphere 6.0 TECHNICAL GUIDANCE 2022/03/12
vSphere 6.5 GENERAL SUPPORT 2022/10/15
vSphere 6.5 TECHNICAL GUIDANCE 2023/11/15
vSphere 6.7 GENERAL SUPPORT 2022/10/15
vSphere 6.7 TECHNICAL GUIDANCE 2023/11/15
vSphere 7.0 GENERAL SUPPORT 2025/04/02
vSphere 7.0 TECHNICAL GUIDANCE 2027/04/02

Red Hat Enterprise Linux

現在、RHEL 6は延長サポートフェーズのみとなっている。RHEL 7及び8の延長サポートフェーズ期限は昨年までは未発表となっていたが、日程が確定したようだ。

また、2022年にはRHEL 9のリリースが控えている。

OS名 サポート状況 サポート期限
Red Hat Enterprise Linux 6 Extended Life-cycle Support 2024/06/30
Red Hat Enterprise Linux 7 Maintenance Support 2024/06/30
Red Hat Enterprise Linux 7 Extended Life-cycle Support 2026/06/30
Red Hat Enterprise Linux 8 Maintenance Support 2029/05/31
Red Hat Enterprise Linux 8 Extended Life-cycle Support 2031/05/31

AIX

AIXはTL (Technology Level)毎にサポート期限が異なる。本記事では各メジャーバージョンの最新TLのEOSを記載する。なお、2021年12月にAIX 7.3 TL0がリリースされているが、AIX 7.1、7.2のサポート期限に変更はないようだ。

OS名 サポート状況 サポート期限
AIX 7.1 TL5 Service Pack Support 2023/04/30 (予想)
AIX 7.2 TL5 Service Pack Support 2023/11/30 (予想)
AIX 7.3 TL0 Service Pack Support 2024/12/30 (予想)

HP-UX

HP-UXはあまり頻繁なバージョンアップはなく、2007年4月に発表されたHP-UX 11i v3が未だに最新という状況となっている。2020年末に引き続き、HP-UX 11i v2のサポート期限がさらに1年延長したようだ。

OS名 サポート状況 サポート期限
HP-UX 11i v2 延長サポート(開発元支援なし) 2021/12月→2022/12月→ 2023/12月
HP-UX 11i v3 (HPE Integrity) 標準サポート 2025/12月

参考

2021年12月25日土曜日

PowerShellでMTUを計測する

先日WireGuardを使って、外部からインターネット回線経由で自宅にVPN接続できるよう構成した。

しかし、インターネット回線で接続する際に、ファイル共有やSSHによる接続は問題なくできるが、リモートデスクトップ接続が黒い画面で接続・切断を繰り返すという事象が発生し悩まされた。

結論としては、MTUの問題であった。自宅のv6プラスのインターネット回線 (ドコモ光) は最大MTUサイズが1460byteであり、WireGuardのヘッダーサイズを考慮して、MTUサイズを小さくしなければ、フラグメント禁止フラグ (DFフラグ; Don’t Fragmentフラグ) が設定されたパケットが通過できず通信が不安定になっていたのだ。

具体的にWireGuardで必要となるヘッダーサイズは以下の通り。

項目 ヘッダーサイズ (byte)
IPヘッダー 20 (IPv4の場合)、40 (IPv6の場合)
UDPヘッダー 8
WireGuardで必要なヘッダーサイズ 32
合計 60 (IPv4の場合)、80 (IPv6の場合)

上記の通りとなるため、回線の最大MTUサイズから60または80byteを引いた値をWireGuardのサーバ側のMTU設定にて指定する必要がある。

今回は、このような状況を想定して、通過可能なMTUサイズをPowerShellを使って測定するコマンドを記載する。

MTUを計測用PowerShellコマンド

1. PowerShellコマンド

MTUサイズを1500から1ずつ下げながら、DFフラグを付けたpingを実行し、成功した際のMTUサイズを表示するコマンドとなる。ping先はwww.yahoo.co.jpとさせてもらった。

for($mtu = 1500; $mtu -ge 1420; $mtu--){
  ping -f -l ${mtu} -n 1 www.yahoo.co.jp > $null
  if($? -eq $true){
    Write-Host "回線のMTUは"($mtu + 28)"です。"
    break
  }
}

実際の実行結果を以降に示す。

2. ドコモ・AUをテザリングで使用した場合の測定結果

ドコモ・AUをテザリングで利用した際のMTUサイズは1500byteのようだ。

PS C:\> for($mtu = 1500; $mtu -ge 1420; $mtu--){
>>   ping -f -l ${mtu} -n 1 www.yahoo.co.jp > $null
>>   if($? -eq $true){
>>     Write-Host "回線のMTUは"($mtu + 28)"です。"
>>     break
>>   }
>> }
回線のMTUは 1500 です。

3. v6プラスのインターネット回線 (ドコモ光) の測定結果

v6プラスのインターネット回線 (ドコモ光) のMTUサイズは1460byteのようだ。

PS C:\> for($mtu = 1500; $mtu -ge 1420; $mtu--){
>>   ping -f -l ${mtu} -n 1 www.yahoo.co.jp > $null
>>   if($? -eq $true){
>>     Write-Host "回線のMTUは"($mtu + 28)"です。"
>>     break
>>   }
>> }
回線のMTUは 1460 です。

参考

2021年12月18日土曜日

VMware PowerCLIをLinuxにインストールする手順

VMware製品を操作できるPowerShellベースのCLIツールである「PowerCLI」は、PowerShellベースで動作するため、以前は必ずWindows環境から実行する必要があった。

しかし、以下記事で記載した通り、PowerShell 7.2はLinuxに対してもインストールすることができる

そのため、PowerCLIもモジュールをインポートすることでLinux環境で動作させることが可能となった。本記事では、PowerCLIをLinux環境で動かすための手順を記載する。なお、インターネット経由でオンラインでインストールする方法と、オフラインでインストールする2パターンの手順を記載する。

環境

導入環境は以下の通りとなる。RHELについては、7と8両方でインストール確認をしている。

  • RHEL 8.3
  • RHEL 7.6

RHELへPowerCLIをインストールする手順 (オンライン)

1. RHELへPowerShellをインストール

RHELへPowerShellをインストールする手順は、以下記事を参照いただきたい。

2. Install-ModuleにてPowerCLIをオンラインインストール

Install-Moduleを使うことで、インターネット経由でモジュールのインストールが可能となる。PowerShellにシェルを変更したのち、以下の通りインストールを実施する。

# pwsh
PowerShell 7.2.0
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

PS /root> Install-Module -Name VMware.PowerCLI

Untrusted repository
You are installing the modules from an untrusted repository. If you trust this
repository, change its InstallationPolicy value by running the Set-PSRepository
 cmdlet. Are you sure you want to install the modules from 'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "N"):y ←★"y"を選択
Installing package 'VMware.PowerCLI' [Installing dependent package 'VMware.V…]
  Installing package 'VMware.VimAutomation… [Downloaded 13.36 MB out of 14.8…]
↑★オンラインでモジュールがインストールされる

Get-Moduleコマンドでインストール後の確認を行うと、VMwareから始まる各種モジュールがインストールされていることが確認できる。今回はPowerCLIのバージョン12.4.1がインストールされていることがわかる。

PS /root> Get-Module -ListAvailable | where { $_.Name -like "VMware*" }

    Directory: /root/.local/share/powershell/Modules

ModuleType Version    PreRelease Name                                PSEdition
---------- -------    ---------- ----                                ---------
Script     12.4.0.18…            VMware.CloudServices                Desk
Script     7.0.2.178…            VMware.DeployAutomation             Desk
Script     7.0.2.178…            VMware.ImageBuilder                 Desk
Manifest   12.4.1.18…            VMware.PowerCLI                     Desk

~(中略)~

Script     12.2.0.17…            VMware.VimAutomation.vROps          Desk
Script     12.4.0.18…            VMware.VimAutomation.WorkloadManag… Desk
Script     12.1.0.16…            VMware.VumAutomation                Desk

3. vCenter Serverへ接続確認

それでは実際にPowerCLIのConnect-VIServerを使ってvCenter Serverに接続してみよう。

PS /root> Connect-VIServer 192.168.11.160 -Force

Specify Credential
Please specify server credential
User: administrator@vsphere.local
Password for user administrator@vsphere.local: ************


Name                           Port  User
----                           ----  ----
192.168.11.160                 443   VSPHERE.LOCAL\Administrator

問題なくvCenter Serverに接続できたので、Get-VMで仮想マシン一覧を確認してみよう。以下の通り、問題なく仮想マシンの情報を取得することができた。

PS /root> Get-VM

Name                 PowerState Num CPUs MemoryGB
----                 ---------- -------- --------
t1164vsrm            PoweredOn  2        8.000
testvm-02            PoweredOn  2        4.000
testvm               PoweredOn  2        4.000
t1160vcsa            PoweredOn  2        12.000
vCLS (2)             PoweredOn  1        0.125

以上でRHELへPowerCLIをオンラインでインストールする手順は完了となる。

RHELへPowerCLIをインストールする手順 (オフライン)

1. PowerCLIのファイルを入手

PowerCLIのモジュール一式は、以下サイトからzip形式でダウンロードできる。

今回はバージョン12.4.1をダウンロードした。

ダウンロードしたファイルは、インストール対象のLinuxへアップロードしておこう。

2. RHELへPowerShellをインストール

RHELへPowerShellをインストールする手順は、以下記事を参照いただきたい。

3. PowerCLIをオフラインインストール

PowerShellインストール後、一度pwshにてPowerShellのシェルに変更したのち抜けておく。これにより、PowerShellのモジュールをインストールするディレクトリがホームディレクトリ配下に作成される。

# pwsh
PowerShell 7.2.0
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

PS /root> exit

モジュールをインストールするディレクトリは、ホームディレクトリ配下の~/.local/share/powershell/Modules/となる

# ls -ld ~/.local/share/powershell/Modules/
drwxr-xr-x 2 root root 6 11月 21 10:59 .local/share/powershell/Modules/

本ディレクトリにダウンロードしたPowerCLIのzipファイルを配置し解凍する。これだけでインストールは完了となる。

# cp VMware-PowerCLI-12.4.1-18769701.zip ~/.local/share/powershell/Modules/
# cd ~/.local/share/powershell/Modules/
# unzip VMware-PowerCLI-12.4.1-18769701.zip
# ls -l
合計 79676
-rw-r--r-- 1 root root 81582404 11月 21 11:05 VMware-PowerCLI-12.4.1-18769701.zip
drwxr-xr-x 4 root root      154 11月 21 11:08 VMware.CloudServices
drwxr-xr-x 3 root root      142 11月 21 11:08 VMware.DeployAutomation

~(中略)~

drwxr-xr-x 4 root root      243 11月 21 11:08 VMware.VimAutomation.WorkloadManagement
drwxr-xr-x 4 root root      172 11月 21 11:08 VMware.VimAutomation.vROps
drwxr-xr-x 3 root root      117 11月 21 11:08 VMware.VumAutomation
# rm VMware-PowerCLI-12.4.1-18769701.zip

インストールが問題なくできていることをPowerShellからも確認しておこう。Get-Moduleコマンドにて確認すると、VMwareから始まる各種モジュールがインストールされていることが確認できる。

PS /root> Get-Module -ListAvailable | where { $_.Name -like "VMware*" }

    Directory: /root/.local/share/powershell/Modules

ModuleType Version    PreRelease Name                                PSEdition
---------- -------    ---------- ----                                ---------
Script     12.4.0.18…            VMware.CloudServices                Desk
Script     7.0.2.178…            VMware.DeployAutomation             Desk
Script     7.0.2.178…            VMware.ImageBuilder                 Desk
Manifest   12.4.1.18…            VMware.PowerCLI                     Desk

~(中略)~

Script     12.2.0.17…            VMware.VimAutomation.vROps          Desk
Script     12.4.0.18…            VMware.VimAutomation.WorkloadManag… Desk
Script     12.1.0.16…            VMware.VumAutomation                Desk

4. vCenter Serverへ接続確認

それでは実際にPowerCLIのConnect-VIServerを使ってvCenter Serverに接続してみよう。

PS /root> Connect-VIServer 192.168.11.160 -Force

Specify Credential
Please specify server credential
User: administrator@vsphere.local
Password for user administrator@vsphere.local: ************


Name                           Port  User
----                           ----  ----
192.168.11.160                 443   VSPHERE.LOCAL\Administrator

問題なくvCenter Serverに接続できたので、Get-VMで仮想マシン一覧を確認してみよう。以下の通り、問題なく仮想マシンの情報を取得することができた。

PS /root> Get-VM

Name                 PowerState Num CPUs MemoryGB
----                 ---------- -------- --------
t1164vsrm            PoweredOn  2        8.000
testvm-02            PoweredOn  2        4.000
testvm               PoweredOn  2        4.000
t1160vcsa            PoweredOn  2        12.000
vCLS (2)             PoweredOn  1        0.125

以上でRHELへPowerCLIをオフラインでインストールする手順は完了となる。

2021年12月11日土曜日

PowerShell 7.2をWindowsとLinuxにインストールする手順

PowerShell 7.2が2021/11/8にリリースされた。

PowerShell 7.2はWindowsだけでなく各種Linuxディストリビューションにおいても利用できるようなので、早速インストールしてみることにした。

本記事では、PowerShell 7.2をWindows ServerとLinux (RHEL) にインストールする手順を記載する。

環境

導入環境は以下の通りとなる。RHELについては、7と8両方でインストール確認をしている。

  • Windows Server 2019
  • RHEL 8.3
  • RHEL 7.6

Windowsへのインストール

1. MSIのインストーラをダウンロード

以下公式のGitHubからrpmをダウンロードする。ダウンロード対象のファイルはPowerShell-7.2.0-win-x64.msiとなる。

2. インストーラを起動しインストールを実施

ダウンロードしたMSIファイルをダブルクリックするとインストールウィザードが起動する。インストールウィザードでは、以下のようなPowerShellをモチーフにしたヒーローが表示される。

インストールウィザードではデフォルトの設定を選択すれば問題ないだろう。デフォルトの設定を選択することで、Windows Update時にPowerShell 7.2のアップデートの確認ができるようになる。

なお、インストールウィザードに表示されるPowerShellヒーローの活躍は、Microsoftより公開されている「Nanoman - Server of realm」というアメコミで確認できる。ぜひ読んでおこう!

3. PowerShell 7.2のコンソールを起動

PowerShell 7.2は通常のOSにインストールされているコンソールとは別に用意がされている。プログラムメニューでは「PowerShell 7」という名前となっているで、そちらを選択しコンソールを起動してみよう。

コンソールを起動すると、いつもの青い画面ではなく黒い画面のコンソールが起動する。試しに$PSVersionTableにてバージョンを確認してみると以下の通り7.2となっていることがわかる。

なお、通常のPowerShell (Windows Server 2019の場合は、バージョン5.1) は、引き続き利用することができる。

以上でWindows環境へのPowerShell 7.2の導入は完了となる。

RHELへのインストール

1. rpmをダウンロード

以下公式のGitHubからrpmをダウンロードする。ダウンロード対象のファイルはpowershell-lts-7.2.0-1.rh.x86_64.rpmとなる。

図14

2. rpmをインストール

PowerShellは特に依存関係なくインストールすることができる。

# rpm -ivh powershell-lts-7.2.0-1.rh.x86_64.rpm
警告: powershell-lts-7.2.0-1.rh.x86_64.rpm: ヘッダー V4 RSA/SHA256 Signature、鍵 ID be1229cf: NOKEY
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:powershell-lts-7.2.0-1.rh        ################################# [100%]

3. PowerShellにシェルを変更

PowerShellへのシェル変更はpwshコマンドにて行う。試しに$PSVersionTableにてバージョンを確認してみると以下の通り7.2となっていることがわかる。

# pwsh
PowerShell 7.2.0
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

PS /root> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      7.2.0
PSEdition                      Core
GitCommitId                    7.2.0
OS                             Linux 3.10.0-957.48.1.el7.x86_64 #1 SMP Fri Mar 6 14:14:26 EST 2020
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

シェルを変更せず、直接コマンドを実行する場合は-cオプションを用いる。

# pwsh -c "Get-Date"

2021年11月21日日曜日 15:29:19

.ps1ファイルを読み込ませて実行させる場合は、-fオプションを用いる。

# cat test.ps1
Get-Date
# pwsh -f test.ps1

2021年11月21日日曜日 15:31:37

以上でRHEL環境へのPowerShell 7.2の導入は完了となる。

参考

2021年12月4日土曜日

OpenLDAP入門③ (LinuxのSSSDを使ってOpenLDAPと認証連携する) 

前回及び前々回の記事において、OpenLDAPによるLDAPサーバ構築とLDAPS有効化を実現できた。今回は、実際にOpenLDAPサーバーに対してLDAPクライアントから認証を行うことにする。

RHELではLDAPクライアントとして、SSSD (System Security Services Daemon) と呼ばれるソフトウェアを利用できる。SSSDを使うことで、OpenLDAPにて登録したユーザを用いてOSへのログインを行うことができる。

本記事では、LinuxのSSSDを使ってOpenLDAPサーバと認証連携する手順を記載する。

環境

RHEL 7にてOpenLDAPサーバ (LDAPS有効化済み) を構築済みの環境において、同じくRHEL 7にてSSSDの設定を行い認証連携を行う。なお、RHEL 8においても一部手順が異なるだけで、ほぼ本記事に記載の手順でSSSDの設定は可能となる (手順が異なる箇所については本記事でも言及する)。

  • LDAPクライアントOS : Red Hat Enterprise Linux 7.7
  • OpenLDAPサーバOS : Red Hat Enterprise Linux 7.7
  • OpenLDAP : 2.4.44

OpenLDAPのドメイン等の情報は以下とする。

設定項目 設定値
ドメイン dc=example,dc=com
RootDN cn=Manager,dc=example,dc=com
OU ou=group,dc=example,dc=com
グループ cn=ldapgrp,ou=group,dc=example,dc=com
ユーザ1 uid=user01,ou=group,dc=example,dc=com
ユーザ2 uid=user01,ou=group,dc=example,dc=com

SSSD設定手順

1. SSSDをインストール

yumを用いてSSSDをインストールする。openldap-clientsはLDAP通信が問題なくできることの確認のためにインストールしておく。oddjob-mkhomedirはLDAP認証したユーザのホームディレクトリを自動生成するサービスとなる。

# yum install openldap-clients sssd sssd-ldap oddjob-mkhomedir -y

2. OpenLDAPサーバのサーバ証明書をコピー

LDAPSを使用する場合は、OpenLDAPサーバのサーバ証明書を登録しておく必要がある。前回記事で作成したldaps.crtを以下の通りコピーして配置する。

# cp ldaps.crt /etc/openldap/certs/core-dirsrv.ca.pem

3. OpenLDAPクライアントから認証情報を取得できることを確認

SSSDの設定を行う前に、ldapsearchコマンドでOpenLDAPサーバと問題なく通信できることを確認する。

OpenLDAPのクライアントの設定を行う前にldapsearchコマンドを実行すると、Can't contact LDAP serverのように通信に失敗することがわかる。

# ldapsearch -x -D "uid=user01,ou=group,dc=example,dc=com" -w password -b "dc=example,dc=com" -H "ldaps://192.168.11.117/"
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

以下の通りOpenLDAPのクライアントの設定を追加する。

# cat << EOF >> /etc/openldap/ldap.conf
URI ldap://192.168.11.117/
BASE ou=group,dc=example,dc=com
TLS_CACERT /etc/openldap/certs/core-dirsrv.ca.pem
EOF

再度ldapsearchコマンドを実行し、以下の通り登録されているグループやユーザの情報が出力されればOKとなる。

# ldapsearch -x -D "uid=user01,ou=group,dc=example,dc=com" -w password -b "dc=example,dc=com" -H "ldaps://192.168.11.117/"
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# example.com
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.

# group, example.com
dn: ou=group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group

~(以下略)~

4. SSSDを設定

それではSSSDの設定を行う。SSSDの設定ファイルはsssd.confとなるが、このファイルはデフォルトで存在しないため、以下の通り一から作成する。

# cat << EOF >> /etc/sssd/sssd.conf
[domain/default]
id_provider = ldap
autofs_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://192.168.11.117/
ldap_search_base = ou=group,dc=example,dc=com
ldap_id_use_start_tls = True
cache_credentials = True
ldap_tls_cacertdir = /etc/openldap/certs
ldap_tls_cacert = /etc/openldap/certs/core-dirsrv.ca.pem
ldap_tls_reqcert = hard

[sssd]
services = nss, pam, autofs
domains = default

[nss]
homedir_substring = /home
EOF

この設定ファイルは以下の通りパーミッションを設定することがセオリーのようなので、以下コマンドで設定しておこう。

# chmod 600 /etc/sssd/sssd.conf
# chown root:root /etc/sssd/sssd.conf

5. SSSDの有効化

SSSDの設定ファイルを作成したら、認証プロバイダーとしてSSSDを使用できるようにする。今回はRHEL 7がクライアントとなるため、authconfigコマンドにて設定する。RHEL 8の場合はauthselectコマンドを利用するため注意すること。

以下、RHEL 7とRHEL 8の設定コマンドを記載する。

RHEL 7の場合

# authconfig --update --enablesssd --enablesssdauth --enablemkhomedir

↓★確認コマンド。pam_sssとpam_mkhomedirがenableになっていることを確認
# authconfig --test | egrep 'pam_sss|pam_mkhomedir'
pam_sss is enabled by default
pam_mkhomedir or pam_oddjob_mkhomedir is enabled (umask=0077)

RHEL 8の場合

# authselect select sssd with-mkhomedir --force
プロファイル "sssd" が設定されました。
以下の nsswitch マップはプロファイルで上書きされます:
- passwd
- group
- netgroup
- automount
- services

Make sure that SSSD service is configured and enabled. See SSSD documentation for more information.

- with-mkhomedir is selected, make sure pam_oddjob_mkhomedir module
  is present and oddjobd service is enabled
  - systemctl enable oddjobd.service
  - systemctl start oddjobd.service

6. SSSDを再起動

ここで一度SSSDを再起動して、各種設定を反映させる。

# systemctl restart sssd oddjobd
# systemctl enable sssd oddjobd

今回の手順では問題は発生しないはずだが、SSSD再起動時に、以下のようなstatus=4/NOPERMISSIONのエラーが発生することがある。

# systemctl restart sssd oddjobd
Job for sssd.service failed because the control process exited with error code. See "systemctl status sssd.service" and "journalctl -xe" for details.
# systemctl status sssd -l

~(中略)~

10月 24 06:26:21 localhost.localdomain systemd[1]: Starting System Security Services Daemon...
10月 24 06:26:22 localhost.localdomain systemd[1]: sssd.service: main process exited, code=exited, status=4/NOPERMISSION
10月 24 06:26:22 localhost.localdomain systemd[1]: Failed to start System Security Services Daemon.
10月 24 06:26:22 localhost.localdomain systemd[1]: Unit sssd.service entered failed state.
10月 24 06:26:22 localhost.localdomain systemd[1]: sssd.service failed.

このエラーの原因はsssd.confが正しく記載されていないことが原因となる。authconfigコマンドにて、他オプションを指定して実行した場合は、sssd.confの一部設定が消えることがあるようなので、再度記載に問題がないか確認したうえで、サービス再起動をすること。私の遭遇した事象ではdomainsの設定が本来defaultであるところが空白になっており、サービス再起動に失敗していた。

[sssd]
services = nss, pam, autofs
domains =  ←★本来ここがdefaultになっている必要あり

7. LDAP登録ユーザにてログイン確認

最後に実際にSSHを用いてLDAP登録ユーザでログインできることを確認する。

Tera Termを用いてLDAPに登録されているuser01でログインする。なお、ドメイン名 (本環境ではexample.com) は不要となる。

特に設定に問題がなければ、以下の通りホームディレクトリが自動作成され、ログインに成功する。UIDやGIDを確認するとOpenLDAPサーバにて登録された番号となっていることも確認できる。

Creating home directory for user01.
Last login: Sat Oct 23 20:41:07 2021 from t1081w219.intrat.local
[user01@localhost ~]$ pwd
/home/user01
[user01@localhost ~]$ id
uid=10001(user01) gid=10000(ldapgrp) groups=10000(ldapgrp) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

以上で、SSSDを用いてにてOpenLDAPサーバと認証連携する手順は完了となる。

2021年11月27日土曜日

OpenLDAP入門② (OpenLDAPでLDAPSを有効化する)

前回、RHEL 7にOpenLDAPをインストールして、OpenLDAPサーバを構築する手順を記載した。しかし、LDAPは通信が暗号化されておらず、認証情報が平文でネットワークに流れてしまう。そこで、LDAPをSSLで暗号化するLDAPS (LDAP over SSL) を使い通信の暗号化を行うことで、セキュリティ強化を図る。

本記事では、OpenLDAPサーバに設定追加を行いLDAPSにて通信できるように構成するための手順を記載する。

環境

RHEL 7にてOpenLDAPサーバを構築済みの環境から、LDAPSを有効にする手順を記載する。OpenLDAPサーバの構築手順は前回記事を参照いただきたい。

  • OS : Red Hat Enterprise Linux 7.7
  • OpenLDAP : 2.4.44

OpenLDAPのドメイン等の情報は以下とする。

設定項目 設定値
ドメイン dc=example,dc=com
RootDN cn=Manager,dc=example,dc=com
OU ou=group,dc=example,dc=com
グループ cn=ldapgrp,ou=group,dc=example,dc=com
ユーザ1 uid=user01,ou=group,dc=example,dc=com
ユーザ2 uid=user01,ou=group,dc=example,dc=com

OpenLDAPのLDAPS有効化手順

1. LDAPS用のサーバ証明書を作成

LDAPSはLDAP over SSLの略である通り、SSLサーバ証明書の作成が必要となる。OpenLDAPのサーバ証明書は/etc/openldap/certs/に配置する。

まず、SSLサーバ証明書に必要となるSAN (Subject Alternative Name) を設定するためのファイルを作成する。今回は、以下の通り作成した。

# cd /etc/openldap/certs/
# cat << EOF > san.txt
subjectAltName = DNS:*.example.com, IP:192.168.11.117
EOF

サーバ証明書は、以下コマンドで作成する。

# openssl genrsa 2048 > ldaps.key
# openssl req -new -key ldaps.key > ldaps.csr
# openssl x509 -days 3650 -req -signkey ldaps.key -in ldaps.csr -out ldaps.crt -extfile san.txt

実際のコマンド実行結果は以下の通り。CSR作成時に証明書作成に必要な情報を対話式で入力する。

# openssl genrsa 2048 > ldaps.key
Generating RSA private key, 2048 bit long modulus
..............................................................+++
..................+++
e is 65537 (0x10001)

# openssl req -new -key ldaps.key > ldaps.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]:JP ←★JPを入力
State or Province Name (full name) []:Tokyo ←★任意の都市名を入力
Locality Name (eg, city) [Default City]: ←★そのままEnter
Organization Name (eg, company) [Default Company Ltd]: ←★そのままEnter
Organizational Unit Name (eg, section) []: ←★そのままEnter
Common Name (eg, your name or your server's hostname) []:LDAPS ←★任意の名称を入力。今回はLDAPSと入力
Email Address []: ←★そのままEnter

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

# openssl x509 -days 3650 -req -signkey ldaps.key -in ldaps.csr -out ldaps.crt -extfile san.txt
Signature ok
subject=/C=JP/ST=Tokyo/L=Default City/O=Default Company Ltd/CN=LDAPS
Getting Private key

2. LDAPS有効化に必要な設定を追加

OpenLDAPサーバの設定ファイルに以下の通りLDAPSに必要となる設定を追加する。

# cp /etc/sysconfig/slapd{,.org}
# vi /etc/sysconfig/slapd
SLAPD_URLS="ldapi:/// ldap:/// ldaps:///" ←★「ldaps:///」を追加

次にssl.ldifというLDIFファイルを作成し、LDAPS用の証明書及び秘密鍵となるファイルの指定を行う。このLDIFファイルをldapaddコマンドにて設定追加する。

# cd ~
# cat << EOF > ssl.ldif
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/ldaps.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/ldaps.key
EOF

# ldapadd -Y EXTERNAL -H ldapi:// -f ssl.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

3. OpenLDAPを再起動

ここまで設定したら、OpenLDAPを再起動し、LDAPSの636ポートが開放されることを確認する。

# systemctl restart slapd

# ss -nl | egrep '389|636'
tcp    LISTEN     0      128       *:636                   *:*
tcp    LISTEN     0      128       *:389                   *:*
tcp    LISTEN     0      128    [::]:636                [::]:*
tcp    LISTEN     0      128    [::]:389                [::]:*

4. LDP.exeを使った確認

LDAPSはそのままではLDP.exeにて接続することができず、OpenLDAPサーバにて作成したSSLサーバ証明書の公開鍵であるldaps.crtを「信頼されたルート証明機関」として登録が
必要
となる。

/etc/openldap/certs/ldaps.crtLDP.exeを実行するサーバにダウンロードし、ファイルをダブルクリックすると証明書の情報を確認することができ、「証明書のインストール」を選択することで「証明書のインポートウィザード」を開始できる。

インポートウィザードでは証明書ストアにて「信頼されたルート証明機関」を選択する。

セキュリティ警告が表示される場合があるが、自己署名証明書による証明書エラーとなることから、そのまま「はい」を選択する。

証明書をインポートしたのち、再度LDP.exeにて接続すると、以下の通りSSLによる接続に成功する。

以上でOpenLDAPでLDAPSを有効化する手順は完了となる。次回は、LinuxのSSSDを使って本サーバに対して認証連携を行うことにする。

2021年11月23日火曜日

VyOSで冗長化したDHCPサーバを構築する

VyOSはDHCPサーバ機能を備えており、さらに2台のVyOSでDHCPサーバの機能を冗長化することができる。今回は、VyOSを使った冗長化されたDHCPサーバの構築手順を以下に記載する。

環境

VyOSのバージョンによって設定コマンドが若干異なるため、以下2つのバージョンを使用して手順確認を行った。

VyOS 1.4.x

  • VyOS#1 (Primary) : 1.4-rolling-202111220318
  • VyOS#2 (Secondary) : 1.4-rolling-202111220318

VyOS 1.3.x

  • VyOS#1 (Primary) : 1.3-rolling-202012311144
  • VyOS#2 (Secondary) : 1.3-rolling-202012311144

192.168.11.0/24のネットワークに対し、192.168.11.201-240のレンジからIPアドレスのリースを行うよう設定する。また、static-mappingの設定にて、特定のMACアドレスを持つクライアントのIPアドレスを固定する。

DHCPサーバ構築手順 (1.4.x)

1. VyOS#1側設定 (Primary)

設定に必要なコマンドを以下にコメントを付けて記載する。

# VyOS#2をremote、VyOS#1をsource-addressとしてIPアドレスを設定
set service dhcp-server failover name dhcp1
set service dhcp-server failover remote 192.168.11.32
set service dhcp-server failover source-address 192.168.11.33

# VyOS#1をPrimaryに設定
set service dhcp-server failover status primary

# DHCPで配布するデフォルトゲートウェイとDNS
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 default-router '192.168.11.31'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 name-server '192.168.11.61'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 name-server '192.168.11.62'

# DHCPリース時間を86400秒 (24時間) に設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 lease '86400'

# DHCPリースを行うIPアドレスの開始・終了を指定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 range 0 start '192.168.11.201'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 range 0 stop '192.168.11.240'

# 対象のサブネットをフェイルオーバー対象に設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 enable-failover

# IPアドレス固定設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 static-mapping <任意の文字列> ip-address '192.168.11.15'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 static-mapping <任意の文字列> mac-address 'aa:bb:cc:11:22:33'

設定投入後、commitsaveをしておく。

# commit
# save

2. VyOS#2側設定 (Secondary)

設定に必要なコマンドを以下にコメントを付けて記載する。設定内容はIPアドレスやPrimary/Secondaryの設定を除けば、VyOS#1側と同様となる。

# VyOS#1をremote、VyOS#2をsource-addressとしてIPアドレスを設定
set service dhcp-server failover name dhcp1
set service dhcp-server failover remote 192.168.11.33
set service dhcp-server failover source-address 192.168.11.32

# VyOS#2をSecondaryに設定
set service dhcp-server failover status secondary

# DHCPで配布するデフォルトゲートウェイとDNS
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 default-router '192.168.11.31'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 name-server 192.168.11.61
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 name-server 192.168.11.62

# DHCPリース時間を86400秒 (24時間) に設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 lease '86400'

# DHCPリースを行うIPアドレスの開始・終了を指定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 range 0 start '192.168.11.201'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 range 0 stop '192.168.11.240'

# 対象のサブネットをフェイルオーバー対象に設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 enable-failover

# IPアドレス固定設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 static-mapping <任意の文字列> ip-address '192.168.11.15'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 static-mapping <任意の文字列> mac-address 'aa:bb:cc:11:22:33'

設定投入後、commitsaveをしておく。

# commit
# save

DHCPサーバ構築手順 (1.3.x)

1. VyOS#1側設定 (Primary)

設定に必要なコマンドを以下にコメントを付けて記載する。

# DHCPで配布するデフォルトゲートウェイとDNS
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 default-router '192.168.11.31'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 dns-server '192.168.11.61'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 dns-server '192.168.11.62'

# VyOS#1をlocal、VyOS#2をpeerとしてIPアドレスを設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 failover local-address '192.168.11.33'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 failover peer-address '192.168.11.32'

# フェイルオーバーグループ名とステータスをPrimaryに設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 failover name 'dhcp1'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 failover status 'primary'

# DHCPリース時間を86400秒 (24時間) に設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 lease '86400'

# DHCPリースを行うIPアドレスの開始・終了を指定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 range 0 start '192.168.11.201'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 range 0 stop '192.168.11.240'

# IPアドレス固定設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 static-mapping <任意の文字列> ip-address '192.168.11.15'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 static-mapping <任意の文字列> mac-address 'aa:bb:cc:11:22:33'

設定投入後、commitsaveをしておく。

# commit
# save

2. VyOS#2側設定 (Secondary)

設定に必要なコマンドを以下にコメントを付けて記載する。設定内容はIPアドレスやPrimary/Secondaryの設定を除けば、VyOS#1側と同様となる。

# DHCPで配布するデフォルトゲートウェイとDNS
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 default-router '192.168.11.31'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 dns-server '192.168.11.61'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 dns-server '192.168.11.62'

# VyOS#1をlocal、VyOS#2をpeerとしてIPアドレスを設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 failover local-address '192.168.11.32'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 failover peer-address '192.168.11.33'

# フェイルオーバーグループ名とステータスをSecondaryに設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 failover name 'dhcp1'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 failover status 'secondary'

# DHCPリース時間を86400秒 (24時間) に設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 lease '86400'

# DHCPリースを行うIPアドレスの開始・終了を指定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 range 0 start '192.168.11.201'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 range 0 stop '192.168.11.240'

# IPアドレス固定設定
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 static-mapping <任意の文字列> ip-address '192.168.11.15'
set service dhcp-server shared-network-name dhcp_scope_01 subnet 192.168.11.0/24 static-mapping <任意の文字列> mac-address 'aa:bb:cc:11:22:33'

設定投入後、commitsaveをしておく。

# commit
# save

DHCPの動作確認

実際にWindows等を同じネットワークに接続させて、DHCPにてIPアドレスを取得できることを確認してみる。

VyOSのDHCPサーバにてリースしたIPアドレスの一覧は、show dhcp server leasesで確認できる。冗長化しているため、VyOS#1、#2の両方で同一結果が出力されるはずだ。

VyOS#1側

$ show dhcp server leases
IP address      Hardware address    State    Lease start          Lease expiration     Remaining    Pool           Hostname
--------------  ------------------  -------  -------------------  -------------------  -----------  -------------  ----------------
192.168.11.223  00:0c:29:31:7a:11   active   2021/01/03 07:26:51  2021/01/03 07:56:51  0:29:37      dhcp-scope-01
192.168.11.224  00:0c:29:31:7a:1b   active   2021/01/03 07:26:51  2021/01/03 07:56:51  0:29:37      dhcp-scope-01
192.168.33.202  3c:6a:a7:92:95:3c   active   2021/01/01 22:53:23  2021/01/02 22:22:06               dhcp-scope-02  DESKTOP-9I8V9NC
192.168.33.204  fc:f5:c4:95:22:ee   active   2021/01/02 20:51:48  2021/01/03 20:51:48  13:24:34     dhcp-scope-02

VyOS#2側

$ show dhcp server leases
IP address      Hardware address    State    Lease start          Lease expiration     Remaining    Pool           Hostname
--------------  ------------------  -------  -------------------  -------------------  -----------  -------------  ----------------
192.168.11.223  00:0c:29:31:7a:11   active   2021/01/03 07:26:51  2021/01/03 07:56:51  0:29:53      dhcp_scope_01
192.168.11.224  00:0c:29:31:7a:1b   active   2021/01/03 07:26:51  2021/01/03 07:56:51  0:29:53      dhcp_scope_01
192.168.33.202  3c:6a:a7:92:95:3c   active   2021/01/01 22:53:23  2021/01/02 22:22:06               dhcp-scope-02  DESKTOP-9I8V9NC
192.168.33.204  fc:f5:c4:95:22:ee   active   2021/01/02 20:51:48  2021/01/03 20:51:48  13:24:50     dhcp_scope_02

参考

更新履歴

  • 2021/11/23 VyOS 1.4.xの設定手順を追加
2021年11月20日土曜日

OpenLDAP入門① (OpenLDAP初期構築手順)

Red Hat Enterprise Linux 7 (RHEL7) で利用できるOpenLDAPは、ユーザやパスワード情報を一元管理し、認証機能を提供することができる。ただし、Red Hat Enterprise Linux 8 (RHEL8) になってから、OpenLDAPは非サポートとなり、代わりに「Red Hat Directory Server (RHDS)」が利用できるようになった。

なお、RHEL 8でもしOpenLDAPを利用したい要件がある場合の選択肢としては、OSSTech製のOpenLDAPを利用するという方法もある。

そのような状況ではあるが、本記事では純粋な「RHEL 7のOpenLDAP」を使ってLDAPサーバを構築する手順を記載する。内容が多いため、以下の3回に分けて記載する。

環境

前述した通り、今回はRHEL 7のOpenLDAPを構築する。

  • OS : Red Hat Enterprise Linux 7.7
  • OpenLDAP : 2.4.44

OpenLDAPのドメイン等の情報は以下とする。

設定項目 設定値
ドメイン dc=example,dc=com
RootDN cn=Manager,dc=example,dc=com
OU ou=group,dc=example,dc=com
グループ cn=ldapgrp,ou=group,dc=example,dc=com
ユーザ1 uid=user01,ou=group,dc=example,dc=com
ユーザ2 uid=user01,ou=group,dc=example,dc=com

OpenLDAPサーバ構築手順

1. OpenLDAPパッケージのインストール

OpenLDAPを使うためには、yumを使用してopenldap-serversopenldap-clientsをインストールするだけでよい。

# yum install openldap-servers openldap-clients -y

~(中略)~

インストール:
  openldap-clients.x86_64 0:2.4.44-21.el7_6
  openldap-servers.x86_64 0:2.4.44-21.el7_6

完了しました!

特に依存関係もないため、rpmを使って直接インストールすることも可能。RHEL 7のインストールメディアからインストールする場合は、以下の通り実行する。

# rpm -ivh openldap-servers-2.4.44-21.el7_6.x86_64.rpm
# rpm -ivh openldap-clients-2.4.44-21.el7_6.x86_64.rpm

2. OpenLDAPの起動

インストールをしたら、とりあえずOpenLDAPを起動させる。

# systemctl start slapd
# systemctl enable slapd

3. 管理用パスワードの設定

いよいよOpenLDAPの設定を実施していく。まず、設定ファイルをディレクトリ丸ごとバックアップしておこう。

# cp -pr /etc/openldap/slapd.d{,_20211016}
# ls -ld /etc/openldap/slapd.d*
drwxr-x---. 3 ldap ldap 45  7月 18 14:49 /etc/openldap/slapd.d
drwxr-x---. 3 ldap ldap 45  7月 18 14:49 /etc/openldap/slapd.d_20210718

OpenLDAPはldapaddldapmodifyldapdeleteコマンドを使用して設定する。これらのコマンドに「LDIF」と呼ばれるLDAP用の設定情報が記載されたファイルを読み込ませることで、直接設定ファイルを編集しなくとも設定することができる

今回はldapaddコマンドにて設定を行う。構文は以下と覚えておく。

ldapadd -Y EXTERNAL -H ldapi:/// -f [ファイル名].ldif

-Y EXTERNAL : root作業時のパスワード入力をスキップ
-H ldapi:/// : ローカルのLDAPに対する作業

まずOpenLDAPに必要となる管理用パスワードを設定する。パスワードは平文ではなくハッシュ値にてLDIFファイルに記載する。パスワードのハッシュ値を生成するためのコマンドとして、slappasswdが用意されているため、こちらを利用してパスワードのハッシュ値を生成する。

生成されたパスワードはソルト付きのSHA-1のハッシュ値となり、{SSHA}という文字が先頭に付いた32文字となる。

# slappasswd
New password:
Re-enter new password:
{SSHA}XXX~(省略)~XXX

以下の通りLDIFファイルを作成して、ldapaddコマンドにて設定する。

# cat << EOF > rootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootDN
olcRootDN: cn=config
-
add: olcRootPW
olcRootPW: {SSHA}XXX~(省略)~XXX
EOF

# ldapadd -Y EXTERNAL -H ldapi:/// -f rootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

設定内容を確認するコマンドとしてはldapsearchを使う。指定するオプションは以下の通り。

オプション 説明
-LLL LDIF バージョンを表示させないため、Lオプションを3つ付与する。
-b LDAPの検索位置を指定する。

実際に確認した結果は以下の通りとなる。

# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'olcDatabase={0}config,cn=config'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth" manage by * none
olcRootDN: cn=config
olcRootPW: {SSHA}XXX~(省略)~XXX

4. 管理者パスワードの設定

管理者パスワードとして、monitorとhdbのパスワードを設定する。monitorはモニターデータベース、hdbはLDAPのデータベース本体と理解しておこう。

今回、それぞれの管理ユーザは「cn=Manager,dc=example,dc=com」で設定する。この管理ユーザをRootDNと呼ぶ。

以下の通りLDIFファイルを作成して、ldapaddコマンドにて設定する。

# cat << EOF > hdbpw.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=example,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com
-
replace: olcRootDN
olcRootDN: cn=Manager,dc=example,dc=com
-
add: olcRootPW
olcRootPW: {SSHA}XXX~(省略)~XXX
EOF

# ldapadd -Y EXTERNAL -H ldapi:/// -f hdbpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

5. スキーマの追加

LDAPで利用するスキーマを設定する。スキーマは、cosine.ldifinetorgperson.ldifnis.ldifを登録すればLDAPサーバとして利用できる。

登録コマンドは以下の通り。

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif

実際の実行結果は以下の通り。

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"

6. BaseDN、OU、グループを登録

ここまで設定すれば、LDAPサーバにBaseDNや、OU、グループが登録できる。

設定項目 設定値
ドメイン dc=example,dc=com
OU ou=group,dc=example,dc=com
グループ cn=ldapgrp,ou=group,dc=example,dc=com

以下の通りLDIFファイルを作成する。

# cat << EOF > base.ldif
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.

dn: ou=group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group

dn: cn=ldapgrp,ou=group,dc=example,dc=com
objectClass: posixGroup
gidNumber: 10000
cn: ldapgrp
EOF

ここからはldapaddコマンドを利用することは変わらないが、少しオプションが異なり、先ほど設定した管理者 (cn=Manager,dc=example,dc=com) を指定して登録を行う点に注意する。

# ldapadd -x -D "cn=Manager,dc=example,dc=com" -w '[RootDNのパスワード]' -f base.ldif
adding new entry "dc=example,dc=com"

adding new entry "ou=group,dc=example,dc=com"

adding new entry "cn=ldapgrp,ou=group,dc=example,dc=com"

7. ユーザを登録

ユーザを登録する。

設定項目 設定値
ユーザ1 uid=user01,ou=group,dc=example,dc=com
ユーザ2 uid=user01,ou=group,dc=example,dc=com

以下の通りLDIFファイルを作成して、ldapaddコマンドにて設定する。

# cat << EOF > user.ldif
dn: uid=user01,ou=group,dc=example,dc=com
uid: user01
cn: Hoge Hoge
sn: user01
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword: {SSHA}XXX~(省略)~XXX
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10000
homeDirectory: /home/user01

dn: uid=user02,ou=group,dc=example,dc=com
uid: user02
cn: Hoge Hoge
sn: user02
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword: {SSHA}XXX~(省略)~XXX
loginShell: /bin/bash
uidNumber: 10002
gidNumber: 10000
homeDirectory: /home/user02
EOF

# ldapadd -x -D "cn=Manager,dc=example,dc=com" -w '[RootDNのパスワード]' -f user.ldif
adding new entry "uid=user01,ou=group,dc=example,dc=com"

adding new entry "uid=user02,ou=group,dc=example,dc=com"

これで一通り設定が完了したので、最後にldapsearchコマンドで登録結果を確認してみよう。

# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'ou=group,dc=example,dc=com'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: ou=group,dc=example,dc=com ←★OU「group」の情報
objectClass: organizationalUnit
ou: Group

dn: cn=ldapgrp,ou=group,dc=example,dc=com ←★グループ「ldapgrp」の情報
objectClass: posixGroup
gidNumber: 10000
cn: ldapgrp

dn: uid=user01,ou=group,dc=example,dc=com ←★ユーザ「user01」の情報
uid: user01
cn: Hoge Hoge
sn: user01
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword:: e1NTSEF9TFdVQXZyNzUvQlBpUDJ2MWZ5amxFdDlEVlB0d0lVYmU=
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10000
homeDirectory: /home/user01

dn: uid=user02,ou=group,dc=example,dc=com ←★ユーザ「user02」の情報
uid: user02
cn: Hoge Hoge
sn: user02
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword:: e1NTSEF9TFdVQXZyNzUvQlBpUDJ2MWZ5amxFdDlEVlB0d0lVYmU=
loginShell: /bin/bash
uidNumber: 10002
gidNumber: 10000
homeDirectory: /home/user02

8. LDP.exeを使った確認

ここまでの設定を行ったことで、OpenLDAPサーバに対してLDAPによる接続が可能となる。

実際に、外部からアクセスできることをWindows ServerのLDP.exeを利用して確認する。なお、LDP.exeは、役割管理ツールの「AD DSおよびAD LDSツール」に含まれる。

「ファイル名を指定して実行」にてldpを入力し「OK」を押すと、LDP.exeが起動する。

「ファイル」→「接続」を選択し、OpenLDAPサーバのIPアドレスとポート番号「389」を指定する。また、今回はLDAPSを使用しないため、SSLのチェックを外しておく。

次に、「表示」→「ツリー」を選択し、「ou=group,dc=example,dc=com」を入力する。

以下の通りOUに登録されているグループとユーザが表示されれば、問題なくOpenLDAPの設定は完了となる。

なお、バインドせずともOpenLDAPサーバに登録されているグループとユーザが表示される理由は、LDAPのデータベースに対してアクセス権を設定していない場合は、デフォルトで匿名ユーザの参照権限が有効となるためである。権限の設定方法は、別記事で紹介することとし、今回は割愛する。

以上で、OpenLDAPサーバの構築は完了となる。次回以降は今回構築したOpenLDAPサーバに対して、LDAPSの有効化やLinuxのSSSDを使って認証連携を行うことにする。

参考

2021年11月17日水曜日

AlmaLinuxをESXiにインストールしてみた

Red Hat Enterprise Linux (RHEL) のダウンストリーム版のディストリビューションであるCentOS 8は2021年末でサポートが終了し、以降はRHELのアップストリーム版であるCentOS Streamのみがサポートされることが発表された。

当初、CentOS 8は2029年までサポートされる予定であったが、突然サポート期間が短縮されてしまったことにより、CentOS 8を利用しているユーザは、早急にCentOS StreamやRHELへの移行を検討する必要が生じている

そんな中、今までのCentOSと同様の位置付けのRHELダウンストリーム版のディストリビューションの開発がいくつかのプロジェクトで進められており、「AlmaLinux」もそのディストリビューションの1つである。

AlmaLinuxは2021/3/30にバージョン8.3が正式リリースされたので、実際にAlmaLinuxをESXi上の仮想マシンとしてインストールしてみた

環境

  • ESXi : 6.7 Update 3
  • OS : AlmaLinux 8.3

AlmaLinuxインストール手順

1. AlmaLinuxのISOイメージをダウンロード

AlmaLinuxのISOイメージは、以下URLからダウンロードできる。

RHEL 8やCentOS 8と同様に、DVDのISOイメージ (AlmaLinux-8.3-x86_64-dvd.iso) は8.6GBもあるため、容量が大きすぎて困る場合は、minimal (AlmaLinux-8.3-x86_64-minimal.iso) をダウンロードし、必要なパッケージは別途インストールしても問題ない。

今回は、minimalをダウンロードしてインストールを行う。

2. ESXiにて仮想マシンを作成

ESXiの仮想マシンは以下設定にて作成する。

  • ゲストOSのファミリ : Linux
  • ゲストOSのバージョン : その他の Linux 4.x 以降 (64 ビット)
  • [仮想マシンのオプション] → [UEFIセキュアブートの有効化] : チェックを外す

CentOS 8と異なり「UEFIセキュアブートの有効化」のチェックが有効のままではインストールが開始できないので、必ずチェックを外すこと。
※【注意】AlmaLinux 8.4以降はSecure Bootに対応したため本手順は不要。

もし、チェックをしたままだと「EFI VMware Virtual SATA CDROM Drive (0.0)… unsuccessful.」のメッセージが表示され、ISOイメージからの起動ができない。なお、OSインストール後に有効に戻してもAlmaLinuxは起動できないことを確認している。

3. RHELやCentOSと同様にインストール

ISOイメージからブートしてしまえば、RHELやCentOSでおなじみのインストールウィザードが開始される。最低限、言語設定、時刻と日付 (タイムゾーン)、rootパスワード、インストール先を設定し、インストールを開始する。

4. インストール後、ログイン

インストール後、仮想コンソールを使ってrootでログインし、nmtuiなどを使ってネットワークの設定を行う。

なお、redhat-releaseを確認したところ、以下の通り「AlmaLinux 8.3」となっていることが確認できた。

# cat /etc/redhat-release
AlmaLinux release 8.3 (Purple Manul)

5. open-vm-toolsをインストール

ネットワークの設定を行いインターネットに接続できるようになったら、dnfにてopen-vm-toolsをインストールする。

# dnf install open-vm-tools -y
最速のミラーを確定しています (70 hosts).. done. ---  B/s |   0  B     --:-- ETA
AlmaLinux 8 - BaseOS                            3.4 MB/s | 3.4 MB     00:01
AlmaLinux 8 - AppStream                          12 MB/s | 6.8 MB     00:00
AlmaLinux 8 - PowerTools                         13 MB/s | 2.1 MB     00:00
AlmaLinux 8 - Extras                             65 kB/s | 3.6 kB     00:00
依存関係が解決しました。
================================================================================
 パッケージ           Arch        バージョン               リポジトリー   サイズ
================================================================================
インストール:
 open-vm-tools        x86_64      11.1.0-2.el8             appstream      715 k
依存関係のインストール:
 fuse                 x86_64      2.9.7-12.el8             baseos          82 k
 fuse-common          x86_64      3.2.1-12.el8             baseos          21 k
 libdrm               x86_64      2.4.101-1.el8            appstream      164 k
 libmspack            x86_64      0.7-0.3.alpha.el8.4      appstream       71 k
 libpciaccess         x86_64      0.14-1.el8               baseos          32 k
 libtool-ltdl         x86_64      2.4.6-25.el8             baseos          58 k
 libxslt              x86_64      1.1.32-5.el8             baseos         249 k
 pciutils             x86_64      3.6.4-2.el8              baseos         102 k
 tar                  x86_64      2:1.30-5.el8             baseos         837 k
 xmlsec1              x86_64      1.2.25-4.el8             appstream      190 k
 xmlsec1-openssl      x86_64      1.2.25-4.el8             appstream       93 k

トランザクションの概要
================================================================================
インストール  12 パッケージ

ダウンロードサイズの合計: 2.6 M
インストール済みのサイズ: 7.6 M
パッケージのダウンロード:
done.inux 8 - BaseOS     [            ===     ] ---  B/s |   0  B     --:-- ETA
(1/12): fuse-common-3.2.1-12.el8.x86_64.rpm     1.2 MB/s |  21 kB     00:00
(2/12): libpciaccess-0.14-1.el8.x86_64.rpm      1.2 MB/s |  32 kB     00:00
(3/12): fuse-2.9.7-12.el8.x86_64.rpm            2.5 MB/s |  82 kB     00:00
(4/12): libtool-ltdl-2.4.6-25.el8.x86_64.rpm    3.1 MB/s |  58 kB     00:00
(5/12): pciutils-3.6.4-2.el8.x86_64.rpm         5.5 MB/s | 102 kB     00:00
(6/12): libxslt-1.1.32-5.el8.x86_64.rpm         7.8 MB/s | 249 kB     00:00
(7/12): libdrm-2.4.101-1.el8.x86_64.rpm         4.0 MB/s | 164 kB     00:00
(8/12): tar-1.30-5.el8.x86_64.rpm                11 MB/s | 837 kB     00:00
(9/12): libmspack-0.7-0.3.alpha.el8.4.x86_64.rp 1.2 MB/s |  71 kB     00:00
(10/12): xmlsec1-1.2.25-4.el8.x86_64.rpm        9.9 MB/s | 190 kB     00:00
(11/12): xmlsec1-openssl-1.2.25-4.el8.x86_64.rp 2.9 MB/s |  93 kB     00:00
(12/12): open-vm-tools-11.1.0-2.el8.x86_64.rpm  8.2 MB/s | 715 kB     00:00
--------------------------------------------------------------------------------
合計                                            9.4 MB/s | 2.6 MB     00:00

~(中略)~

インストール済み:
  fuse-2.9.7-12.el8.x86_64            fuse-common-3.2.1-12.el8.x86_64
  libdrm-2.4.101-1.el8.x86_64         libmspack-0.7-0.3.alpha.el8.4.x86_64
  libpciaccess-0.14-1.el8.x86_64      libtool-ltdl-2.4.6-25.el8.x86_64
  libxslt-1.1.32-5.el8.x86_64         open-vm-tools-11.1.0-2.el8.x86_64
  pciutils-3.6.4-2.el8.x86_64         tar-2:1.30-5.el8.x86_64
  xmlsec1-1.2.25-4.el8.x86_64         xmlsec1-openssl-1.2.25-4.el8.x86_64

完了しました!

open-vm-toolsがインストールされると、ESXiでもホスト名やIPアドレスを認識するようになる。

以上でAlmaLinuxのインストールが完了となる。

更新履歴

  • 2021/11/17 AlmaLinux 8.4 GA版のリリースに伴い内容を更新 (Secure Bootにサポートした旨追記)

Rocky LinuxをESXiにインストールしてみた

Red Hat Enterprise Linux (RHEL) のダウンストリーム版のディストリビューションであるCentOS 8は2021年末でサポートが終了し、以降はRHELのアップストリーム版であるCentOS Streamのみがサポートされることが発表された。

当初、CentOS 8は2029年までサポートされる予定であったが、突然サポート期間が短縮されてしまったことにより、CentOS 8を利用しているユーザは、早急にCentOS StreamやRHELへの移行を検討する必要が生じている

そんな中、今までのCentOSと同様の位置付けのRHELダウンストリーム版のディストリビューションの開発がいくつかのプロジェクトで進められており、「Rocky Linux」もそのディストリビューションの1つである。

Rocky Linuxは2021/4/30にバージョン8.3 RC版がリリースされ、2021/6/4にバージョン8.4 RC版、そしてついに2021/6/21にバージョン8.4 GA版がリリースされた。本記事では、実際にRocky LinuxをESXi上の仮想マシンとしてインストールしてみた

環境

  • ESXi : 6.7 Update 3
  • OS : Rocky Linux 8.4

Rocky Linuxインストール手順

1. Rocky LinuxのISOイメージをダウンロード

Rocky LinuxのISOイメージは、以下URLからダウンロードできる。

RHEL 8やCentOS 8と同様に、DVDのISOイメージ (Rocky-8.X-x86_64-dvd1.iso) は8.6GBもあるため、容量が大きすぎて困る場合は、minimal (Rocky-8.X-x86_64-minimal.iso) をダウンロードし、必要なパッケージは別途インストールしても問題ない。

今回は、minimalをダウンロードしてインストールを行う。

2. ESXiにて仮想マシンを作成

ESXiの仮想マシンは以下設定にて作成する。

  • ゲストOSのファミリ : Linux
  • ゲストOSのバージョン : その他の Linux 4.x 以降 (64 ビット)
  • [仮想マシンのオプション] → [UEFIセキュアブートの有効化] : チェックを外す

CentOS 8と異なり「UEFIセキュアブートの有効化」のチェックが有効のままではインストールが開始できないので、必ずチェックを外すこと。
※【注意】Rocky Linux 8.5以降はSecure Bootに対応したため本手順は不要。

もし、チェックをしたままだと「EFI VMware Virtual SATA CDROM Drive (0.0)… unsuccessful.」のメッセージが表示され、ISOイメージからの起動ができない。なお、OSインストール後に有効に戻してもRocky Linuxは起動できないことを確認している。

3. RHELやCentOSと同様にインストール

ISOイメージからブートしてしまえば、RHELやCentOSでおなじみのインストールウィザードが開始される。最低限、言語設定、時刻と日付 (タイムゾーン)、rootパスワード、インストール先を設定し、インストールを開始する。なお、Rocky Linuxでは「ソフトウェアの選択」がデフォルトでは「サーバー」になっている。少しでも不要なパッケージをインストールしたくない場合は、「最小限のインストール」に変更すること。

4. インストール後、ログイン

インストール後、仮想コンソールを使ってrootでログインし、nmtuiなどを使ってネットワークの設定を行う。

なお、redhat-releaseを確認したところ、以下の通り「Rocky Linux 8.4」となっていることが確認できた。

# cat /etc/redhat-release
Rocky Linux release 8.4 (Green Obsidian)

5. open-vm-toolsをインストール

ネットワークの設定を行いインターネットに接続できるようになったら、dnfにてopen-vm-toolsをインストールする。

# dnf install open-vm-tools -y
Rocky Linux 8 - AppStream                       3.7 MB/s | 6.7 MB     00:01
Rocky Linux 8 - BaseOS                          5.5 MB/s | 2.5 MB     00:00
Rocky Linux 8 - Extras                          2.8 kB/s | 1.6 kB     00:00
依存関係が解決しました。
================================================================================
 パッケージ           Arch        バージョン               リポジトリー   サイズ
================================================================================
インストール:
 open-vm-tools        x86_64      11.1.0-2.el8             appstream      716 k
依存関係のインストール:
 fuse                 x86_64      2.9.7-12.el8             baseos          81 k
 fuse-common          x86_64      3.2.1-12.el8             baseos          20 k
 libdrm               x86_64      2.4.101-1.el8            appstream      164 k
 libmspack            x86_64      0.7-0.3.alpha.el8.4      appstream       69 k
 libpciaccess         x86_64      0.14-1.el8               baseos          31 k
 libtool-ltdl         x86_64      2.4.6-25.el8             baseos          57 k
 libxslt              x86_64      1.1.32-5.el8             baseos         248 k
 pciutils             x86_64      3.6.4-2.el8              baseos         101 k
 tar                  x86_64      2:1.30-5.el8             baseos         837 k
 xmlsec1              x86_64      1.2.25-4.el8             appstream      191 k
 xmlsec1-openssl      x86_64      1.2.25-4.el8             appstream       94 k

トランザクションの概要
================================================================================
インストール  12 パッケージ

ダウンロードサイズの合計: 2.5 M
インストール済みのサイズ: 7.6 M
パッケージのダウンロード:
(1/12): libmspack-0.7-0.3.alpha.el8.4.x86_64.rp  22 MB/s |  69 kB     00:00
(2/12): xmlsec1-1.2.25-4.el8.x86_64.rpm          66 MB/s | 191 kB     00:00
(3/12): xmlsec1-openssl-1.2.25-4.el8.x86_64.rpm  46 MB/s |  94 kB     00:00
(4/12): fuse-2.9.7-12.el8.x86_64.rpm             79 MB/s |  81 kB     00:00
(5/12): open-vm-tools-11.1.0-2.el8.x86_64.rpm    65 MB/s | 716 kB     00:00
(6/12): fuse-common-3.2.1-12.el8.x86_64.rpm      19 MB/s |  20 kB     00:00
(7/12): libpciaccess-0.14-1.el8.x86_64.rpm       31 MB/s |  31 kB     00:00
(8/12): libtool-ltdl-2.4.6-25.el8.x86_64.rpm     55 MB/s |  57 kB     00:00
(9/12): libxslt-1.1.32-5.el8.x86_64.rpm         144 MB/s | 248 kB     00:00
(10/12): libdrm-2.4.101-1.el8.x86_64.rpm         11 MB/s | 164 kB     00:00
(11/12): pciutils-3.6.4-2.el8.x86_64.rpm        9.9 MB/s | 101 kB     00:00
(12/12): tar-1.30-5.el8.x86_64.rpm               21 MB/s | 837 kB     00:00
--------------------------------------------------------------------------------
合計                                            7.2 MB/s | 2.5 MB     00:00

~(中略)~

インストール済み:
  fuse-2.9.7-12.el8.x86_64            fuse-common-3.2.1-12.el8.x86_64
  libdrm-2.4.101-1.el8.x86_64         libmspack-0.7-0.3.alpha.el8.4.x86_64
  libpciaccess-0.14-1.el8.x86_64      libtool-ltdl-2.4.6-25.el8.x86_64
  libxslt-1.1.32-5.el8.x86_64         open-vm-tools-11.1.0-2.el8.x86_64
  pciutils-3.6.4-2.el8.x86_64         tar-2:1.30-5.el8.x86_64
  xmlsec1-1.2.25-4.el8.x86_64         xmlsec1-openssl-1.2.25-4.el8.x86_64

完了しました!

open-vm-toolsがインストールされると、ESXiでもホスト名やIPアドレスを認識するようになる。

以上でRocky Linuxのインストールが完了となる。

更新履歴

  • 2021/05/06 新規作成
  • 2021/06/05 Rocky Linux 8.4 RC版のリリースに伴い内容を更新
  • 2021/06/22 Rocky Linux 8.4 GA版のリリースに伴い内容を更新 
  • 2021/11/17 Rocky Linux 8.5 GA版のリリースに伴い内容を更新 (Secure Bootにサポートした旨追記)

2021年11月13日土曜日

WireGuardを使ってスマホから自宅にVPN接続する

先日、WireGuardサーバをLinux上で構築し、Windows用のWireGuardクライアントを用いてVPN接続を行う手順を記事にした。

WindowsのPCから接続できるだけでなく、スマホからもVPNで接続できると自宅のNASのデータなどにアクセスできて便利であることから、今回は、Android用のWireGuardクライアントを使ってインターネット越しに自宅にVPN接続する手順を記載する。

環境

WireGuardサーバの構築手順は前回の記事を参照いただきたい。

  • スマホOS : Android 11
  • WireGuardサーバOS : AlmaLinux 8.3

Android用WireGuardクライアント設定手順

1. WireGuardクライアントのインストール

Google Playストアより「wireguard」で検索を行い、「WireGuard」をインストールする。

2. WireGuardのconfファイル作成

Windows用のWireGuardクライアントと同一の設定ファイルを作成し、スマホに保存しておく。今回は以下の通り作成した。

[Interface]

設定値 設定内容
Address WireGuardクライアントで使用するIPアドレスを指定。
PrivateKey wgclient.keyの内容を指定。

[Peer]

設定値 設定内容
PublicKey wgserver.pubの内容を指定。
AllowedIPs 対向先の接続機器と通信をさせるIPアドレスを記載する。通常はWireGuardサーバのIPアドレスと自宅のプライベートアドレスを指定すればよい。もしすべての通信をWireGuardのVPN経由とさせる場合は、0.0.0.0/0を指定する。
Endpoint 自宅のグローバルIPまたはDDNS名などを設定している場合はFQDNを用いて[IP or FQDN]:[ポート番号]の形式で接続先のWireGuardサーバを指定する。

今回は以下のように設定ファイルを作成した。

[Interface]
PrivateKey = [wgclient.keyの内容を指定]
Address = 10.0.33.11/32

[Peer]
PublicKey = [wgserver.pubの内容を指定]
AllowedIPs = 10.0.33.1/32, 192.168.0.0/16
Endpoint = [自宅のグローバルIP or FQDN]:[ポート番号]

3. 設定ファイルのインポート

青色の「+」ボタンを選択すると、設定方法の選択肢が表示される。

「IMPORT FROM FILE OR ARCHIVE」を選択する。

先ほど作成した設定ファイル (私の環境ではwgclient.conf) を選択する。

インポートに成功すると、以下の通りVPN接続用の設定が追加される。

4. 接続確認

先ほど追加されたVPN設定のボタンを押し有効化する。特に問題なければすぐに接続状態になり、Androidの上部ステータスバーに鍵マークが表示される。

実際に自宅のQNAPのNASのファイル閲覧をしてみたところ、問題なくインターネット越しにファイル閲覧をすることができた。

以上で、Android用のWireGuardクライアントを使ってインターネット越しに自宅にVPN接続する手順は完了となる。

2021年11月8日月曜日

WireGuardを使って自宅にVPN接続する方法

自宅環境ではインターネット経由でVPN接続をできるように、QNAP NASのQVPN Serviceの機能を利用してOpenVPNサーバを構築している。OpenVPNによる接続手順は以下記事にて記載している。

最近はWireGuardと呼ばれる比較的新しいOSSのVPNソフトウェアが存在する。ソースコードが4,000行程度と非常にコンパクトで、Linuxのカーネルモジュールとして動作するという特徴がある。

QNAP NASの最新OSであるQTS 5.0.0でもWireGuardによるVPN接続がサポートされたとのことだが、残念ながらx86のCPUのみ利用可能となっており、私のQNAP TS-231Pでは対応していなかった。

そこで、今回はWireGuardをLinux上に構築し、Windows用のWireGuardクライアントからインターネット越しに自宅にVPN接続する手順を記載する。

環境

今回はRHELクローンであるAlmaLinuxにて構築を行ったが、CentOSや本家RHELでも同様の手順で構築できるだろう。なお、8.xと9.xのOSにおいて一部手順に差異がある。

  • OS : AlmaLinux 8.3、AlmaLinux 9.2

なお、スマホからもWireGuardでVPN接続は可能であり、設定方法は別記事「WireGuardを使ってスマホから自宅にVPN接続する」を参照いただきたい。

WireGuard構築手順 (Linux)

1. パッケージのインストール

今回はRed Hat系LinuxにおけるWireGuardの構築手順となる。その他のディストリビューションにおける構築手順は、以下公式サイトの内容を確認いただきたい。

WireGuardは、RHEL 8.xはEPELのリポジトリに用意されており、RHEL 9は通常のリポジトリ存在する。したがって、dnfyumを用いてパッケージによるインストールが可能となる。注意点として、RHEL 8.xの場合は、一度OSを再起動しなければ以降の手順でエラーとなるため注意すること(RHEL 9.xの場合は再起動は不要)。

★RHEL 8.xの場合
# dnf install elrepo-release epel-release -y
# dnf install kmod-wireguard wireguard-tools -y
# reboot
★RHEL 9.xの場合
# dnf install wireguard-tools -y

以下に、RHEL 8.xのパッケージインストール後にリブートしなかった場合のエラー情報を参考までに記載する。WireGaurd用のインタフェースを作成しようとしても、以下の通りError: Unknown device typeにてエラーとなる。

# ip link add dev wg0 type wireguard
Error: Unknown device type.
# modprobe wireguard
modprobe: FATAL: Module wireguard not found in directory /lib/modules/4.18.0-240.el8.x86_64

2. サーバ用の秘密鍵と公開鍵を作成

WireGuardは、サーバもクライアントも必ず秘密鍵と公開鍵のペアを設定する必要がある。wgコマンドにて鍵作成をすることができるたため、以下の通りサーバとクライアント用の鍵を作成する。

ファイル名 説明
wgserver.key サーバ用秘密鍵
wgserver.pub サーバ用公開鍵
wgclient.key クライアント用秘密鍵
wgclient.pub クライアント用公開鍵
# cd /etc/wireguard
# wg genkey > wgserver.key
# wg pubkey < wgserver.key > wgserver.pub
# wg genkey > wgclient.key
# wg pubkey < wgclient.key > wgclient.pub

# chmod 600 wgserver.key
# chmod 600 wgclient.key
# ls -l wg*
-rw------- 1 root root  45 10月 30 19:52 wgclient.key
-rw-r--r-- 1 root root  45 10月 30 19:52 wgclient.pub
-rw------- 1 root root  45 10月 27 06:46 wgserver.key
-rw-r--r-- 1 root root  45 10月 27 06:46 wgserver.pub

3. ポートフォワードの設定

WireGuardはVPN用途としてインタフェースとIPアドレスが作成される。このインタフェースとLinuxサーバの本来の通信を行うインタフェース間で通信をできるようにする必要があるため、以下の通りポートフォワードを有効にする。

# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# sysctl -p
net.ipv4.ip_forward = 1

4. WireGuardのconfファイル作成

WireGuardの設定はwgコマンドによる設定もできるが、今回はwg0.confというファイル名で設定ファイルを作成し、wg-quickコマンドを用いて読み込ませることで設定反映を行う。

設定ファイルの内容は以下の通りとなる。[Interface]は自分側の設定となり、[Peer]は対向側の設定となる。

[Interface]

設定値 設定内容
Address WireGuardで使用するIPアドレスを指定。
MTU 接続時のMTUを記載。デフォルトでは1420が設定されるが、環境によってはリモートデスクトップ接続がうまく動作しない (黒い画面が表示され接続・切断を繰り返す) ため1400や1380に設定する。私の環境では1380に設定すると問題なく動作するようになった。
PrivateKey wgserver.keyの内容を指定。
ListenPort WireGuardが使用するポート番号を指定。デフォルトは51820。
PostUp WireGuard起動時に実行するコマンドを指定。WireGuardで使用するIPアドレスはセグメントが異なることから、そのままでは通信ができないため、iptablesを用いてNATを有効にする。
PostDown WireGuard停止時に実行するコマンドを指定。

[Peer]

設定値 設定内容
PublicKey wgclient.pubの内容を指定。
AllowedIPs 対向先の接続機器と通信をさせるIPアドレスを記載する。通常はクライアントに割り当てるIPアドレスを指定すればよい。

設定ファイルは、以下のように新規作成する。

# cat << EOF > /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.33.1/32
MTU = 1380
PrivateKey = [wgserver.keyの内容を指定]
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens192 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens192 -j MASQUERADE

[Peer]
PublicKey = [wgclient.pubの内容を指定]
AllowedIPs = 10.0.33.11/32
EOF

5. WireGuard起動確認

設定ファイルを作成後、一度手動でWireGuardを起動させる。コマンドはwg-quick upコマンドを使用する。

# wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.33.1/32 dev wg0
[#] ip link set mtu 1400 up dev wg0
[#] ip -4 route add 10.0.33.11/32 dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens192 -j MASQUERADE

WireGuardを停止する際は、wg-quick downコマンドを使用する。

# wg-quick down wg0
[#] ip link delete dev wg0
[#] iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens192 -j MASQUERADE

6. systemctlにて自動起動設定

先ほどの起動・停止が問題なくできることを確認したら、systemctlにてWireGuardを自動起動するよう設定する。

# systemctl start wg-quick@wg0
# systemctl enable wg-quick@wg0
# systemctl status wg-quick@wg0
● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
   Loaded: loaded (/usr/lib/systemd/system/wg-quick@.service; enabled; vendor p>
   Active: active (exited) since Sat 2021-10-30 15:42:05 JST; 2s ago
     Docs: man:wg-quick(8)
           man:wg(8)
           https://www.wireguard.com/
           https://www.wireguard.com/quickstart/
           https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
           https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
  Process: 8128 ExecStop=/usr/bin/wg-quick down wg0 (code=exited, status=0/SUCC>
  Process: 8156 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCE>
 Main PID: 8156 (code=exited, status=0/SUCCESS)

10月 30 15:42:05 t3036vpns systemd[1]: Starting WireGuard via wg-quick(8) for w>
10月 30 15:42:05 t3036vpns wg-quick[8156]: [#] ip link add wg0 type wireguard
10月 30 15:42:05 t3036vpns wg-quick[8156]: [#] wg setconf wg0 /dev/fd/63
10月 30 15:42:05 t3036vpns wg-quick[8156]: [#] ip -4 address add 10.0.33.1/32 d>
10月 30 15:42:05 t3036vpns wg-quick[8156]: [#] ip link set mtu 1400 up dev wg0
10月 30 15:42:05 t3036vpns wg-quick[8156]: [#] ip -4 route add 10.0.33.11/32 de>
10月 30 15:42:05 t3036vpns wg-quick[8156]: [#] iptables -A FORWARD -i wg0 -j AC>
10月 30 15:42:05 t3036vpns systemd[1]: Started WireGuard via wg-quick(8) for wg

ブロードバンドルータの設定

WireGuardはUDPの58120ポートを使うため、ブロードバンドルータでポート開放を行う必要がある。設定方法は各社のルーターのマニュアルを確認すること。通常は「ポートマッピング」といった呼ばれ方の設定項目があるはずで、外部からの特定ポートのアクセスをLAN側の特定のサーバに転送する設定を行えばよい。

以下NECのAtermでの設定例を記載する。

  • LAN側ホスト:WireGuardサーバのIPアドレスを設定
  • プロトコル : UDP
  • 変換対象ポート番号:任意で指定
  • 宛先ポート番号:58120

WireGuard接続手順 (Windows)

1. WireGuardクライアントのインストール

Windows用のWireGuardクライアントは、以下公式サイトからダウンロードする。

インストーラのサイズは約80KBと極めて容量が小さく、インターネット経由でダウンロードしてインストールをするようだ。

2. WireGuardのconfファイル作成

Windows用のWireGuardクライアントも設定ファイルを読み込ませることで設定投入が可能となる。

設定ファイルの内容は以下の通りとなる。[Interface]は自分側の設定となり、[Peer]は対向側の設定となる。

[Interface]

設定値 設定内容
Address WireGuardクライアントで使用するIPアドレスを指定。
PrivateKey wgclient.keyの内容を指定。

[Peer]

設定値 設定内容
PublicKey wgserver.pubの内容を指定。
AllowedIPs 対向先の接続機器と通信をさせるIPアドレスを記載する。通常はWireGuardサーバのIPアドレスと自宅のプライベートアドレスを指定すればよい。もしすべての通信をWireGuardのVPN経由とさせる場合は、0.0.0.0/0を指定する。
Endpoint 自宅のグローバルIPまたはDDNS名などを設定している場合はFQDNを用いて[IP or FQDN]:[ポート番号]の形式で接続先のWireGuardサーバを指定する。

今回は以下のように設定ファイルを作成した。

[Interface]
PrivateKey = [wgclient.keyの内容を指定]
Address = 10.0.33.11/32

[Peer]
PublicKey = [wgserver.pubの内容を指定]
AllowedIPs = 10.0.33.1/32, 192.168.0.0/16
Endpoint = [自宅のグローバルIP or FQDN]:[ポート番号]

3. 設定ファイルのインポート

WireGuardクライアントにて「トンネルの追加」→「トンネルをファイルからインポート」を選択し、先ほど作成した設定ファイルをインポートする。

4. 接続確認

インポート後「有効化」ボタンを押す。ただし、WireGuardサーバと接続の成功・失敗に関係なく有効化はされるので、実際の接続状況はPingなどで確認をすること。

WireGuardサーバ側ではwgコマンドにて接続状態を確認することができる。

# wg
interface: wg0
  public key: XXXX
  private key: (hidden)
  listening port: 51820

peer: XXXX
  endpoint: 1.2.3.4:1025
  allowed ips: 10.0.33.11/32
  latest handshake: 18 seconds ago
  transfer: 902.41 KiB received, 897.92 KiB sent

以上でWireGuardサーバを構築しインターネット経由で自宅環境へアクセスすることができた。

参考

更新履歴

  • 2021/11/6 新規作成
  • 2021/11/8 リモートデスクトップ接続不可の事象を解消するため、MTUを設定する旨を追記

人気の投稿