えんでぃの技術ブログ

えんでぃの技術ブログ

ネットワークエンジニアの視点で、IT系のお役立ち情報を提供する技術ブログです。

【Cmder+CygWin+Nyagos】Windows用の使いやすいターミナル

f:id:stopendy:20190114233719p:plain

お伝えしたいこと

本記事では、Windowsユーザ向けにオススメのターミナルソフトウェアを紹介したいと思います。
具体的には、CmderとCygWin (またはNyagos) の組み合わせです。

上記ソフトウェアの組み合わせによって、WindowsコマンドプロンプトPowershellが抱える以下の問題を解決できます。

  • コマンドが使いにくい。Linuxのコマンドにはよく慣れているのに...
    • Bash実行環境を追加
    • 使い慣れたgrep、less、awkなどのコマンドを実行可能に
    • パイプ(|)、シェルスクリプト、~などのシェル機能も利用可能
  • ターミナルの機能が貧弱。コピペも大変
    • MacのiTerm2に負けないデザイン性と機能性を持ちます
    • 色、透明度、ショートカットキーなどをカスタマイズ可能
  • SSH接続やファイル転送のGUI操作が面倒
    • 既存ツールをコマンドに置き換えることで、作業を効率化できます
    • Teraterm: sshコマンドが使える。コピペ時の確認メッセージ、自動ログ取得にも対応
    • WinSCP: scp、ftp、tftpコマンドなどで代用

Cmder + CygWin (またはNyagos) の構成

Cmderは、GUI部分を担います。
優れたデザインのターミナル画面と、使いやすくするための付加機能を提供します。

Cmder自身はシェル機能を持ちません。
内部でコマンドプロンプトPowershellを呼び出すことで、シェルを提供しています。
上記以外にも、CygWin(Bash) や Nyagos (コマンドプロンプトの機能追加版) とも連携することができます。

今回はCmderに対し、CygWin (またはNyagos) を組み合わせてWindowsのターミナルを使いやすくする手順を紹介します。

導入イメージ

GUI部分を担うCmderのスクリーンショットを貼ります。

画面はこんな感じです。

f:id:stopendy:20190114233719p:plain

画面を非アクティブにしたときに、少し暗くするといった設定もできます。

f:id:stopendy:20190114233712p:plain

設定すれば、Teratermのように「改行を含む文字列をコピペしたとき」に確認メッセージを出せます。

f:id:stopendy:20190114233606p:plain

設定画面もリッチです。

↓フォントの設定

f:id:stopendy:20190114233618p:plain

↓配色の設定

f:id:stopendy:20190114233623p:plain

↓Cmderと連携するシェルの設定

f:id:stopendy:20190114233614p:plain

上記画像の通り、CmderのデザインはMacのiTerm2にも負けていないと思います。

Cmderと何を組み合わせるか (CygWin or Nyagos or その他)

Cmderと組み合わせるシェルは、CygWinかNyagosのどちらかで結構です。
個人的にはCygWinがお好みですが、好みが違う方がいるかもしれないので念のため両方のやり方を紹介します。

迷った方は、とりあえず両方入れても問題ありません。
私もそうしています。
何度か使ってみて、気に入った方をメインでご利用ください。
※もし「両方不要」という方がいれば、Cmderのみを導入して単体でご利用ください

CygWinの特徴は以下の通りです。

  • Unix環境をエミュレーションする
  • ほぼ、Bash実行環境と言ってよい
  • NyagosやCmderと比べると、以下の差分がある
    • apt-cygによってLinuxパッケージを追加インストール可能 (yum/aptと似ている)
    • ディレクトリ構造がLinuxっぽい (Windowsファイルは/cygdrive配下にある)

Nyagosの特徴は以下の通りです。

  • CygWinと比べると、以下の差分がある
    • フォルダ構造はWindowsと同じ
    • apt-cyg、yum、apt相当の機能はない
  • デフォルトのコマンドプロンプトと比べると、以下の差分がある
    • ~、cd、cd - といった表現が可能
    • cd コマンドに /D オプションを付与しなくてもドライブ間を移動できる
    • ※機能上は、Nyagosはコマンドプロンプトの上位互換 (だと思います)

個人的には、/etc や /usr といったUnixらしいディレクトリを持っており、apt-cygも利用可能なCygWinが最も気に入っています。

CygWinのセットアップ

f:id:stopendy:20190114233704p:plain

ここでは、CygWinのセットアップ手順を紹介します。
Cmderとの連携設定は、「Cmderのセットアップ」にて説明します。

CygWinを導入しない場合は読み飛ばしてください。

CygWinのインストール

下記公式サイトからインストーラをダウンロードして実行します。
64bit版、32bit版がありますので、正しい方を選択してください。

https://cygwin.com/install.html

インストーラを起動したら、ウィザードに沿って以下のように選択します。

  • 5回ほど「次へ」を選択する
  • ダウンロードサイトの選択画面では、"http://ftp.iij.ad.jp" などを選択する
  • パッケージ選択画面では、以下のように選択する
    • View: Full
    • Search: パッケージ名で検索し、必要なものにチェックを入れる。最低限、★のついたものは入れる (apt-cyg導入に必要)
      • wget (Web)
      • curl (Net)
      • gcc-core (Devel)
      • gcc-g++ (Devel)
      • make (Devel)
      • openssh (Net)
      • xinetd (Net) ※telnet
      • vim (Editors)
      • git (Devel)
    • 「次へ」を2回ほど選択すると、依存関係を含めて上記パッケージをインストールする
  • 画面に従ってインストーラを終了する

これでCygWinがインストールできました。
CygWinが単体で正しく起動することを確認しておきましょう。

(任意) apt-cygのインストール

任意なのですが、ついでに便利なパッケージマネージャーであるapt-cygも入れておきましょう。
Linuxでいうyumやaptに相当するツールです。

下記コマンドで導入できます。

wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
# または、 git clone https://github.com/transcode-open/apt-cyg; cd apt-cyg

chmod 755 apt-cyg
mv apt-cyg /usr/local/bin

Nyagosのセットアップ

f:id:stopendy:20190114233659p:plain

ここでは、Nyagosのセットアップ手順を紹介します。
Cmderとの連携設定は、「Cmderのセットアップ」にて説明します。

Nyagosを導入しない場合は読み飛ばしてください。

Nyagosとは

https://github.com/zetamatta/Nyagos

Go言語でプログラムされた軽量なシェルで、コマンドプロンプトに相当するものです。
詳しくは「Cmderと何を組み合わせるか」で説明していますが、Nyagosはコマンドプロンプトよりも若干機能拡張されています。

Nyagosのダウンロード

下記サイトからNyagosをダウンロードします。
64bit Windowsの場合はamd64版を、32bit Windowsの場合はi386版をダウンロードします。

https://github.com/zetamatta/Nyagos/releases

NyagosもCmderと同様、ダウンロードしたらインストール不要ですぐに使えます。

Cmderのセットアップ

f:id:stopendy:20190114233610p:plain

Cmderのインストール

下記公式サイトからCmderをダウンロードします。
Mini版とFull版がありますが、Full版を選択します。

http://cmder.net/

ダウンロードした圧縮ファイルを展開し、好きなフォルダ階層に移動します。
Cmderは、インストール無しで動作するプログラムのため、起動すればすぐに使えます。

参考までに、私はインストール不要なアプリケーション (ポータブルアプリケーション) の置き場を決めており、Documents\PortableApps\ 配下にしています。
Documents以外にも、C:\ や D:\ など候補はいくつかあると思いますので、わかりやすい場所に決めて配置しましょう。

Cmderの初期設定

Cmder.exeを起動します。

画面下部のタブバー (タブ以外の部分) を右クリックして、"Settings" を選択します (またはWindows + Alt + P)。
そしてお好みに設定します。

私のオススメ設定を以下に載せておきます。 ※設定画面内は、マウスカーソルを合わせると補足説明が出てきます。これがとても便利です

General > Size & Pos

Console buffer height: 32766

ターミナルの最大行数を増やす設定です。

General > Tab bar

Lazy tab switch: チェック外す

Cmderのタブは、Ctrl+Tabで切り替えできます (もちろんマウスクリックでも)。
デフォルトでは、Ctrlキーを離したときに画面が切り替わります。
この挙動を変更し、Ctrl+Tabキーを押したらすぐに画面が切り替わるようにします。

General > Confirm

Confirm actionsのチェックを全て外す

面倒な確認メッセージを抑止します。

Startup > Environment

以下の3行を入力しておきます。
最初の1行はすでに入っていると思います。

set PATH=%ConEmuBaseDir%\Scripts;%PATH%
set PATH=%PATH%;%ConEmuDir%..\git-for-windows\cmd
set PATH=%PATH%;%ConEmuDir%..\git-for-windows\usr\bin

Cmder経由でシェルを起動したときに、PATHを通すための設定です。
ここでは、Git for WindowsLinuxコマンド群 (ls、grep、less、ssh、scpなど) にPATHを通しています。
CygWinの場合は不要な設定ですが、cmd、powershell、Nyagos (後述) を使うときにはあった方が便利になります。

%ConEmuDir% などの設定ファイル中で使える環境変数について、詳細はConEmuのドキュメントを参照してください。
※Cmderは内部的にConEmuを利用している https://conemu.github.io/en/ConEmuEnvironment.html

Keys & Macro

Cmderで利用可能なショートカットキーを編集できます。
以下のように編集するのがオススメです。
右上の検索ウィンドウで「Scroll buffer」などのように検索しながら編集してみてください。

  • Scroll buffer to the top: Ctrl+Home ※ターミナルの先頭を表示
  • Scroll buffer to the bottom: Ctrl+End ※ターミナルの末尾を表示
  • Paste first line of clipboard contents: 割り当てなし ※Linux用途で使用するCtrl+Vが上書きされてしまうため
  • Copy: All active console text output: Ctrl+Shift+A ※ターミナル全体の文字列をコピー
  • Find text in active console: Ctrl+Shift+F ※文字列検索

※Hotkeyとして指定可能な"Apps"とは、右クリックボタン (デスクトップ用キーボードなら右側Ctrlキーの左隣にあるボタン) のこと

Features > Colors

ターミナル画面の色合いを変更できます。
デフォルトはMonocai というテーマが設定されていますが、この画面で色設定を変更して自作のテーマとして保存できます。

また、Fade when inactive の設定を変えることで、Cmderのウィンドウが非アクティブになったときに画面を少し暗く見せるかの設定ができます。

私の場合は、デフォルトのMonokaiをそのまま使っています。
Fadeの設定も利用し、非アクティブのときに少し暗くなるようにしています。

Features > Transparency

画面の透明度の設定はこちらでできます。
個人的には、透明度を落とした方が見やすくなると思います。

一通りの設定が終わったら、右下の Save settings ボタンで設定を保存します。

CygWinとの連携設定

いよいよCmderからCygWinを呼び出せるようにします。 再び設定画面を開きます (Windows + Alt + P)。

Startup > Tasksを選択します。
Cmderで新しいタブを追加するとき、Cmderが呼び出すシェル (Cygwin/cmd/powershellなど) を指定できるのですが、この画面からシェルを追加登録/削除/並べ替えできます。

まず、Cygwinを追加登録します。

  • '+' ボタンを選択し、以下のように設定する

    • タスク名 (左上の部分) : bash::CygWin
    • Default task for new console: チェック推奨 (Cmderで新規タブを追加するとき、デフォルトでbash::cygwinが選択される)
    • Default shell (Win + X): チェック推奨
    • Commands (右下の部分): 以下のように入れる
      set "PATH=<CygWinインストールディレクトリ>\bin;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe /usr/bin/bash.exe --login -i -new_console:p:C:"<CygWinインストールディレクトリ>\Cygwin.ico"

      具体的には、以下のようになる。

      set "PATH=C:\cygwin64\bin;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe /usr/bin/bash.exe --login -i -new_console:p:C:"C:\cygwin64\Cygwin.ico"

  • 'Up'、'Down' ボタンで、以下の順序に調整する

    • bash::CygWinを一番上に
    • 他は好きな順序で並べる

↓参考URL
https://conemu.github.io/en/CygwinMsysConnector.html#cygwin64-shortcut

次に、設定画面のStartup セクションを開きます。
Cmderを起動したとき、デフォルトで表示するTask (シェル) を指定します。

デフォルトは Specified named task の値が {cmd::Cmder} になっていると思うので、これを {bash::CygWin} に変更します。

これでCmder + CygWin連携構成を実装できました。

Nyagosとの連携設定

Cmderを起動し、Windows + Alt + P で設定画面を開きます。

Startup > Tasksを開き、以下のように設定します。

  • '+' ボタンを選択し、以下のように設定する

    • タスク名 (左上の部分) : cmd::Nyagos
    • Default task for new console: チェックしない
    • Default shell (Win + X): チェックしない
    • Commands (右下の部分): 以下のように入れる
      [Nyagos.exeのフルパス] -k "cd "

      具体的には、以下のようになる。
      D:\PortableApps\Nyagos\Nyagos.exe -k "cd"

  • 'Up'、'Down' ボタンで、以下の順序に調整する

    • bash::CygWinは、一番上のまま
    • cmd::Nyagosを上から二番目に配置する
    • 他は好きな順序で並べる

これでCmder + Nyagos連携構成を実装できました。

(参考) 知っておくと便利なCmderのショートカットキー

以下のショートカットキーが便利です。

  • Linux Bash でおなじみのショートカット (Ctrl + C, L, D, U, K, Q, Z, ...)
  • 設定を開く (Windows + Alt + P)
  • 新しいタブを開く (Ctrl + t)
  • タブを閉じる (Ctrl + W) ※bashなら Ctrl + D でexitした方が楽
  • スクロールバッファ削除 (Ctrl + Shift + L)
  • 画面スクロール (Ctrl + ↑、↓)
  • 今回紹介した手順でカスタマイズしたショートカット
    • Scroll buffer to the top: Ctrl + Home ※ターミナルの先頭を表示
    • Scroll buffer to the bottom: Ctrl + End ※ターミナルの末尾を表示
    • Paste first line of clipboard contents: 割り当てなし ※Linux用途で使用するCtrl+Vが上書きされてしまうため
    • Copy: All active console text output: Ctrl + Shift + A ※ターミナル全体の文字列をコピー
    • Find text in active console: Ctrl + Shift + F ※文字列検索

まとめ

いかがでしたでしょうか。
Cygwin + Cmderを導入することで、Windows OS特有の作業ストレスを大幅に軽減できます。
Cmderは業務で数年使い続けてきて、本当に良いソフトだと実感しています。
皆様もぜひお試しください。

nmcliコマンドによるLinuxネットワーク設定手順

f:id:stopendy:20180908141506p:plain

本記事で紹介すること

本記事では、nmcliによるネットワーク設定変更コマンドを紹介します。
ネットワーク構成図、実行コマンド例、オプション説明の順にひたすらユースケースを紹介していきます。

nmcliとは何か、基本的なコマンド体系の説明については下記記事にまとめてあります。
まだの方は、先にこちらをお読みください。

endy-tech.hatenablog.jp

記事が長いので、目次からジャンプして目的の設定例を確認する読み方がオススメです。

共通のオプション

nmcli で Connection を設定する際、必須となるオプションをここで先に紹介します。
以降の例では、以下の4オプションがどの例でも必ず登場します。

  • type
    • Connection の種別を指定する (物理インターフェースなら通信規格名、論理インターフェースならプロトコル名)
    • ethernetwifiwimax、vlan、bond、vpn、vxlan、dummy、他多数 を指定可能
      • ethernet: 最も基本的な構成。TagやTunnel、Teamingなどの設定を持たない、普通のインターフェースを作る
      • vlan: Dot1Q Tagging を利用したいときに利用する
    • 詳しくは、nmcli connection add help コマンドで確認できる
  • ifname
    • Connectionを紐づける対象の Device名を指定する
  • con-name
    • Connection名を指定する
    • 任意の文字列を指定可能
      • 半角スペースなどは \ でエスケープが必要
      • 2バイト文字は文字化けする
      • Device名と揃えるのが基本的に無難
  • autoconnect
    • yes/no のいずれかを指定
    • デフォルトはno
    • yesの場合、OS起動時やConnection作成時に自動的にifname で指定したDeviceに紐づけられる
    • noの場合、手動でnmcli connection up Connection名 を実行しない限り、Deviceに紐づけされない

以下の設定は任意ではありませんが、よく出てくるのでついでに紹介しておきます。

  • ipv6.method
    • IPv6 のアドレス設定方法を指定する
    • auto、dhcp、ignore、link-local、manual、shared を指定可能
    • デフォルトはauto
    • IPv6を使わない環境では、とりあえずignore にしておく

IPアドレスの設定

構成図

以下のようにL3スイッチとLinuxサーバが直結された構成を例にします。

f:id:stopendy:20180726203434p:plain

nmcliコマンド例

nmcli connection add type ethernet ifname enp0s3 con-name enp0s3 autoconnect yes ipv6.method ignore

#### 今回紹介したいコマンド ####
nmcli connection modify enp0s3 ipv4.method manual ipv4.addresses 10.0.0.2/24

# 設定反映
nmcli connection up enp0s3

#### 補足 ####
# 以下のように1行で済ませることも可能
# nmcli connection add type ethernet ifname enp0s3 con-name enp0s3 autoconnect yes ipv4.method manual ipv4.addresses 10.0.0.2/24 ipv6.method ignore

(補足1) セカンダリIPアドレスの設定

1つのConnectionに2つのIPアドレスを設定することも可能です。

# セカンダリIPアドレスの追加
nmcli connection modify +ipv4.addresses 10.0.0.102/24

# セカンダリIPアドレスの削除
nmcli connection modify -ipv4.addresses 10.0.0.102/24

# 設定反映
nmcli connection up enp0s3

(補足2) IPアドレスの削除

nmcli connection modify -ipv4.addresses 10.0.0.2/24 ipv4.method auto

# 設定反映
nmcli connection up enp0s3

nmcliコマンドオプション

  • ipv4.method
    • IPv4 のアドレス設定方法を指定する
    • auto、disabled、link-local、manual、shared を指定可能
      • auto: デフォルト値。DHCPからアドレス取得する際の設定
      • disabled: IPv4を利用しない
      • manual: IPv4アドレスを手動設定する。この設定は、ipv4.addressesとセットで使う
  • ipv4.addresses

疎通確認

Linuxからスイッチに対してpingが通ることを確認できました。

ping 10.0.0.1
# PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
# 64 bytes from 10.0.0.1: icmp_seq=1 ttl=255 time=0.852 ms
# 64 bytes from 10.0.0.1: icmp_seq=2 ttl=255 time=7.71 ms
# 64 bytes from 10.0.0.1: icmp_seq=3 ttl=255 time=1.25 ms
# ^C
# --- 10.0.0.1 ping statistics ---
# 3 packets transmitted, 3 received, 0% packet loss, time 2025ms
# rtt min/avg/max/mdev = 0.852/3.272/7.712/3.143 ms

(参考) スイッチ側の設定手順

参考情報として、対向側のスイッチの設定も載せておきます。
本記事はnmcliの紹介がメインなので、こちらのコンフィグを理解する必要はありません。

下記リンクをクリックすると、スイッチの設定が表示されます。

デフォルトゲートウェイの設定

構成図

f:id:stopendy:20180726210526p:plain

nmcliコマンド例

nmcli connection add type ethernet ifname enp0s3 con-name enp0s3 autoconnect yes ipv6.method ignore ipv4.method manual ipv4.addresses 10.0.0.2/24

#### 今回紹介したいコマンド ####
nmcli connection modify enp0s3 ipv4.gateway 10.0.0.1

# 設定反映
nmcli connection up enp0s3

(補足1) デフォルトゲートウェイの削除

# nmcli connection modify enp0s3 -ipv4.gateway 10.0.0.1 では削除できない
nmcli connection modify enp0s3 ipv4.gateway 0.0.0.0

# 設定反映
nmcli connection up enp0s3

nmcliコマンドオプション

(参考) スイッチ側の設定手順

参考情報として、対向側のスイッチの設定も載せておきます。
下記リンクをクリックすると、スイッチの設定が表示されます。

DNSサーバの登録 (DNSクライアント設定)

次にDNSサーバの設定を行います。
今回は環境をインターネットに接続し、GoogleDNSサーバ (8.8.8.8と8.8.4.4) を利用する構成としました。

構成図

デフォルトゲートウェイの例と同じ構成です。

f:id:stopendy:20180726210526p:plain

nmcliコマンド例

nmcli connection add type ethernet ifname enp0s3 con-name enp0s3 autoconnect yes ipv6.method ignore ipv4.method manual ipv4.addresses 10.0.0.2/24 ipv4.gateway 10.0.0.1

#### 今回紹介したいコマンド ####
nmcli connection modify enp0s3 ipv4.dns 8.8.8.8
nmcli connection modify enp0s3 +ipv4.dns 8.8.4.4

# 以下のように1行でも表現可能
# この書き方はDNS削除や、セカンダリIPアドレス追加などには使えないので微妙
# nmcli connection modify enp0s3 ipv4.dns 8.8.8.8, 8.8.4.4

##### 設定反映 #####
nmcli connection up enp0s3

(補足1) DNSサーバの削除

nmcli connection modify enp0s3 -ipv4.dns 8.8.8.8 -ipv4.dns 8.8.4.4

##### 設定反映 #####
nmcli connection up enp0s3

nmcliコマンドオプション

疎通確認

今回はdigコマンドで確認しました。
ANSWER SECTIONにIPアドレスが表示されていれば、DNSの設定は成功です。

stopendy@linuxgui001:~$ dig google.com

; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52585
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;google.com.          IN  A

;; ANSWER SECTION:
google.com.       299 IN  A   216.58.197.174

;; Query time: 51 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Thu Jul 26 21:23:00 JST 2018
;; MSG SIZE  rcvd: 55

stopendy@linuxgui001:~$ 

(参考) スイッチ側の設定手順

デフォルトゲートウェイの設定」と同じなので割愛します。

ルーティングの設定

構成図

f:id:stopendy:20180929195101p:plain

nmcliコマンド例

nmcli connection add type ethernet ifname enp0s3 con-name enp0s3 autoconnect yes ipv6.method ignore ipv4.method manual ipv4.addresses 10.0.0.2/24

#### 今回紹介したいコマンド ####
nmcli connection modify enp0s3 ipv4.routes "192.168.0.0/24 10.0.0.1"

# 設定反映
nmcli connection up enp0s3

(補足1) ルーティング設定の追加 (2行目以降)

2つ目以降の経路を追加するときは + をつけます。
+をつけないと設定が上書きされ、192.168.0.0/24宛の経路が消えてしまいます。

+の付け忘れが怖い方は、常に+を付けてしまうのも手です。
1つ目のルーティング追加時に+をつけても問題はありません。

nmcli connection modify enp0s3 +ipv4.routes "192.168.1.0/24 10.0.0.1"

# 設定反映
nmcli connection up enp0s3

(補足2) ルーティング設定の削除

nmcli connection modify enp0s3 -ipv4.routes "192.168.0.0/24 10.0.0.1"
nmcli connection modify enp0s3 -ipv4.routes "192.168.1.0/24 10.0.0.1"

# 設定反映
nmcli connection up enp0s3

nmcliコマンドオプション

  • ipv4.routes
    • ルーティングの追加を行う
    • 形式: ipv4.routes "IPアドレス/プレフィックス [ネクストホップ] [メトリック]"
      • 例1: +ipv4.routes "192.168.0.0/24 10.0.0.1"
      • 例2: +ipv4.routes "192.168.0.0/24 10.0.0.100 2"
    • 削除時は-を付ける
      • 例1: -ipv4.routes "192.168.0.0/24 10.0.0.1"
      • 例2: -ipv4.routes "192.168.0.0/24 10.0.0.100 2"

(参考) スイッチ側の設定手順

デフォルトゲートウェイの設定」と同じなので割愛します。

Dot1Qトランクポートの設定

VLAN Taggingのポートを設定する方法を説明します。

構成図

f:id:stopendy:20180726213225p:plain

nmcliコマンド例

#### 今回紹介したいコマンド ####
# 物理インターフェースに対応するコネクションを作成する
# IPアドレスはアサインしない → ipv4.method disabled
nmcli connection add type ethernet ifname enp0s3 con-name enp0s3 autoconnect yes ipv4.method disabled ipv6.method ignore

# Tag VLAN用のサブインターフェースを作成する
nmcli connection add type vlan ifname enp0s3.100 con-name enp0s3.100 autoconnect yes id 100 dev enp0s3 ipv4.method manual ipv4.address 10.0.0.2/24 ipv4.gateway 10.0.0.1 ipv6.method ignore

# 設定反映
nmcli connection up enp0s3
nmcli connection up enp0s3.100

nmcliコマンドオプション

Dot1Q Taggingインターフェースの作成は、以下の2工程に分かれています。

  • 物理インターフェース用のコネクションの設定
  • サブインターフェース用のコネクションの設定

まず、物理インターフェース用のコネクション設定について説明します。
特に新しいオプションは使いません。
ipv4.method disabled により、IPv4アドレスをアサインしない構成にするだけでOKです。

次にDot1Q用途のサブインターフェース (CiscoでいうSVI) ですが、以下のようにオプションを設定します。

  • type
    • 今回はvlanを指定する
    • (物理インターフェースを設定するときは、ethernetだった)
  • ifname
    • Device名を指定する (nmcli device で表示される文字列を指定する)
    • 物理インターフェースの場合、すでに存在するDevice名を指定する必要があった
    • サブインターフェースの場合、恐らくどんな文字列を指定しても問題ない (VLAN100など)
    • 今回は [デバイス名.VLAN-ID] という命名規則で設定した
    • 例: ifname enp0s3.100
  • con-name
    • Connection名を指定する (nmcli connection で表示される文字列を指定する)
    • ifname と同様、どんな文字列でも指定可能 (2バイト文字や空白は避けたい)
    • 細かい情報だが、con-name と ifname はどちらかのみ指定すれば、もう一方は自動補完される
    • 例: con-name enp0s3.100
  • dev
    • Dot1Q サブインターフェースが紐づく Device名を指定する
    • 任意文字列ではない。正確に指定する必要がある
    • 例: dev enp0s3
  • id
    • Dot1Q サブインターフェースが Tagging に利用する VLAN ID を指定する
    • 例: id 100

疎通確認

Linuxからスイッチに対するpingが通ることを確認しました。

ping 10.0.0.1
# PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
# 64 bytes from 10.0.0.1: icmp_seq=1 ttl=255 time=0.927 ms
# 64 bytes from 10.0.0.1: icmp_seq=2 ttl=255 time=10.7 ms
# ^C
# --- 10.0.0.1 ping statistics ---
# 2 packets transmitted, 2 received, 0% packet loss, time 1032ms
# rtt min/avg/max/mdev = 0.927/5.857/10.788/4.931 ms

(参考) スイッチ側の設定手順

参考情報として、対向側のスイッチの設定も載せておきます。
下記リンクをクリックすると、スイッチの設定が表示されます。

最後に

以上、nmcliによるネットワーク設定方法を紹介しました。

他にも追加してほしい設定例などありましたら、コメント欄にてリクエストお願いします。

nmcliコマンドの基礎

f:id:stopendy:20180908141506p:plain

更新履歴

  • 2019/1/14
    • 記事全体をわかりやすく再構成
    • 概要説明とコマンド例で記事を分けた
  • 2018/9/8
    • 初回投稿

本記事で紹介すること

nmcliコマンドの基本的な使い方を紹介します。

nmcliコマンドによるIPアドレス設定、ゲートウェイ設定、DNSクライアント設定などの応用的なコマンド例については、以下の記事で紹介します。

endy-tech.hatenablog.jp

ipコマンドの用法は、本記事の解説対象外です。

nmcliの概要

RHEL6 / CentOS6でのネットワーク設定は、以下の流れで行われていました。

  1. 設定ファイルの編集
  2. networkサービスの再起動で設定反映

しかし、RHEL7 / CentOS7以降ではトレンドが変わり、Network Managerかipコマンドによる設定変更手順が公式で推奨されるようになりました。

今回紹介するのは、Network Managerサービスを利用して設定変更するやり方です。
nmcli (Network Manager CLI) とは、この設定変更をCLIで実施するコマンドです。

nmcliよりもGUIっぽくしたnmtui (Network Manager Table User Interface) というコマンドもありますが、こちらはあまり本格的には説明しません。
nmtuiに関する説明は、最後の補足説明をご覧ください。

Network Managerについて深く知りたい方は、Redhat公式マニュアルをご覧ください。
とはいえ、簡単な設定変更であれば、マニュアルを読まなくても十分対応可能です。
Red Hat Enterprise Linux 7 Networking Guide - Red Hat Customer Portal

Device と Connection

Network Managerの仕組みのなかで、少々ややこしいのが、この DeviceConnection の概念です。
この仕組みを一言で言うと、「物理インターフェース (Device) とネットワーク設定 (Connection) を別々に管理することで柔軟性を高めている」 ということです。

Device の説明

Deviceは、"enp0s3" とか "eth0" といった物理インターフェース名がついています。
物理インターフェースがLinux Kernelに認識されると、恐らく自動的にDeviceは追加されます。

現在認識されている Device を一覧表示するには、以下のコマンドを実行します。

nmcli device 
# DEVICE           TYPE      STATE      CONNECTION         
# enp0s3           ethernet  connected  enp0s3
# enp0s8           ethernet  connected  enp0s8
# enp0s9           ethernet  connected  enp0s9

Connection の説明

Connectionは、Deviceに対して紐づく論理インターフェースです。
「設定オブジェクト」と言い換えても問題ありません。

IPアドレスやVLAN-IDなどのネットワーク設定は、全てConnectionに対して行います。
そしてConnectionをDeviceに対して紐づけると、ネットワーク設定が物理インターフェースに対して適用されることになります。

現在設定されている Connection を一覧表示するには、以下のコマンドを実行します。

nmcli connection 
# NAME    UUID                                  TYPE      DEVICE      
# enp0s3  8e8b4ff2-9e28-3017-b1a6-52eb65e0e49c  ethernet  enp0s3      
# enp0s8  3ad9f029-8fd4-3511-a9b1-5943620708eb  ethernet  enp0s8      
# enp0s9  5eaed3b4-7a97-3179-8a8e-b6b99890e16e  ethernet  enp0s9

Device と Connection のまとめ

Deviceは、物理インターフェースのことです。
Linuxカーネル (OS) が物理インターフェースを認識した時点で自動生成します。

Connectionは、論理インターフェース、または設定オブジェクトです。
Connectionは、ユーザーが明示的に作成し、Deviceに紐づけて設定反映する必要があります。

全体像を図で表すと、以下のようになります。

f:id:stopendy:20190113222838p:plain

nmcli コマンドの基本的な使い方

コマンドのヘルプ

コマンドのヘルプの参照の仕方は2通りあります。

helpサブコマンドを利用する方法

helpサブコマンドは、各階層で実行できます。
下の階層で実行することで、より具体的な情報を得ることができます。

nmcli help
nmcli device help
nmcli connection help
nmcli connection add help
...

nmcli connection add help は特にオススメです。
Ethernet, Dot1Q, VXLAN のように、設定パターンに応じて指定すべきパラメータを教えてくれます。

bash-completionを利用する方法

nmcliの扱いに慣れてきたら、こちらの確認方法が手軽でオススメです。
bash-completion の機能を利用して、サブコマンドの一覧を手軽に確認できます。

nmcli connection add ipv4.  ## ここでTABキーを2回押す
# ipv4.addresses           ipv4.dns                 ipv4.may-fail
# ipv4.dad-timeout         ipv4.dns-options         ipv4.method
# ipv4.dhcp-client-id      ipv4.dns-priority        ipv4.never-default
# ipv4.dhcp-fqdn           ipv4.dns-search          ipv4.route-metric
# ipv4.dhcp-hostname       ipv4.gateway             ipv4.routes
# ipv4.dhcp-send-hostname  ipv4.ignore-auto-dns     ipv4.route-table
# ipv4.dhcp-timeout        ipv4.ignore-auto-routes

bash-completionとは、TABキーを押下することでサブコマンドの補完や、候補の列挙をしてくれるお助けツールです。
nmcliコマンド以外にも、system-ctlやyum/apt、manコマンドなど、さまざまなコマンド入力を助けてくれます。
下記コマンドで導入できますので、ぜひインストールしてみてください。

世界が変わります。

# RHEL/CentOS系の場合 (epelリポジトリが必要です)
sudo yum install epel
sudo yum install bash-completion bash-completion-extras

# Ubuntu系の場合
sudo apt install bash-completion

設定確認 / ステータス確認

現在のステータスを確認するのに一番オススメなのは、nmcliコマンドを単純に実行することです。
コマンドも簡単ですし、必要な情報のみが端的に表示されます。

Connectionに適用した設定を確認したいときは、nmcli connection show コネクション名 を使います。
Connectionの設定がすべて表示されますので、確認やデバッグに使えます。

※ここでは、「設定」、「ステータス」という用語を以下のように定義します  ・設定: ユーザーが指定したオプション値 (Configured Value)
 ・ステータス: 実際に動作する際の値 (Operational Value)

最後に、あまり使う機会はないかもしれませんが、Device単位での設定を確認することもできます。
nmcli device show コマンドです。
Dot1Q Taggingを利用しているケースなど、1つのDeviceに対して複数のConnectionが関わっているケースで便利かもしれません。

最後に、コマンド実行サンプルを示します。

nmcli
# enp0s3: connected to enp0s3
#         "Red Hat Virtio network device"
#         ethernet (virtio_net), 08:00:27:39:51:3B, hw, mtu 1500
#         ip4 default
#         inet4 10.0.2.15/24
#         route4 0.0.0.0/0
#         route4 10.0.2.0/24
#         inet6 fe80::a6eb:bf5a:d727:ac6a/64
#         route6 ff00::/8
#         route6 fe80::/64
#         route6 fe80::/64
# 
# enp0s8: connected to enp0s8
# (後略)

nmcli connection show enp0s3
# connection.id:                          enp0s3
# (中略)
# IP4.ADDRESS[1]:                         10.0.2.15/24
# IP4.GATEWAY:                            10.0.2.2
# IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 10.0.2.2, mt = 100
# IP4.ROUTE[2]:                           dst = 10.0.2.0/24, nh = 0.0.0.0, mt = 10
# IP4.DNS[1]:                             8.8.8.8
# IP4.DNS[2]:                             8.8.4.4
# (後略)

nmcli device show
# GENERAL.DEVICE:                         enp0s3
# GENERAL.TYPE:                           ethernet
# GENERAL.HWADDR:                         08:00:27:39:51:3B
# GENERAL.MTU:                            1500
# GENERAL.STATE:                          100 (connected)
# GENERAL.CONNECTION:                     enp0s3
# GENERAL.CON-PATH:                       # /org/freedesktop/NetworkManager/ActiveCo
# WIRED-PROPERTIES.CARRIER:               on
# IP4.ADDRESS[1]:                         10.0.2.15/24
# IP4.GATEWAY:                            10.0.2.2
# IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 10.0.2.2, mt = # 100
# IP4.ROUTE[2]:                           dst = 10.0.2.0/24, nh = 0.0.0.0, mt = # 10
# IP4.DNS[1]:                             8.8.8.8
# IP4.DNS[2]:                             8.8.4.4
# IP6.ADDRESS[1]:                         fe80::a6eb:bf5a:d727:ac6a/64
# IP6.GATEWAY:                            --
# IP6.ROUTE[1]:                           dst = ff00::/8, nh = ::, mt = 256, # table
# IP6.ROUTE[2]:                           dst = fe80::/64, nh = ::, mt = 256
# IP6.ROUTE[3]:                           dst = fe80::/64, nh = ::, mt = 100
# 
# GENERAL.DEVICE:                         enp0s8
# (後略)

設定変更 / 設定削除 / 設定反映

基本的には設定変更 > 設定反映の流れで実施します。

まず設定変更ですが、これはConnectionの作成、または変更によって実施します。
以下がコマンドのサンプルです。

ここではIPアドレスDHCPに設定し、ネットワークサービス起動時に自動的に設定が適用されるように設定しています。

各オプションの詳しい説明は後述します。

# nmcli connection add で作成します
nmcli connection add ifname enp0s3 con-name enp0s3 type ethernet autoconnect yes ipv4.method auto

# nmcli connection delete でConnectionを丸ごと削除できます
nmcli connection delete enp0s3 

# nmcli connection modify で、作成済みのConnection設定を変更することもできます
nmcli connection add ifname enp0s3 con-name enp0s3 type ethernet
nmcli connection modify enp0s3 autoconnect yes # Connectionの自動接続有効化
nmcli connection modify enp0s3 ipv4.method auto # DHCP有効化

# nmcli connection up で、設定反映します
nmcli connection up enp0s3

パラメータ単位で設定削除をする方法は、パラメータごとに書き方が若干異なります。
この内容は、別記事で紹介するケース別のnmcli設定コマンド例でも触れたいと思います。

# デフォルトゲートウェイの設定 / 削除コマンド
nmcli connection modify enp0s3 ipv4.gateway 10.0.0.1
nmcli connection modify enp0s3 ipv4.gateway 0.0.0.0

# DNS設定の設定 / 削除コマンド
nmcli connection modify enp0s3 ipv4.dns 8.8.8.8
nmcli connection modify enp0s3 +ipv4.dns 8.8.4.4
nmcli connection modify enp0s3 -ipv4.dns 8.8.8.8 -ipv4.dns 8.8.4.4

Connection をDeviceからデタッチする

メンテナンス時にConnection を一時的にDownさせることで、通信を遮断することも可能です。

# nmcli connection down で、Connection を Device からデタッチ (紐づけ解除) します
nmcli connection down enp0s3

# nmcli connection up で、Connection を Device からアタッチ (紐づけ) します
nmcli connection up enp0s3

(参考) nmcli device modify なんてものもあります

実は、nmcli device modifyコマンドでも設定変更が可能です。
nmcli device modifyで設定変更した場合は、設定が即時反映されます。
nmcli connection up のような設定反映コマンドは不要です。

しかし、OSを再起動すると変更した設定は削除され、元に戻ってしまいます。
CentOS6系のイメージですと、nmcli device modify は、ifconfigやrouteコマンドで設定を変えるイメージに近いですね。
一方で、nmcli device connectionは、設定ファイルを書き換えるイメージに近いです。

nmcli device modifyは、ネットワーク設定の検証などに利用できそうです。
サービス提供中のサーバにおいては使わないと思います。

頭の片隅に置いておくと、そのうち役に立つかもしれません。

省略表現

nmcliは、ネットワーク機器のCLIのように省略表現が可能です。

サブコマンドの文字列を途中まで打ち、後は一意に補完できるような状況になったらそのまま実行できます。

Cisco機器で言えば、show running-config の代わりに show run でも良いのと同じことです。

以下にサンプルを示します。

# nmcli device
nmcli d

# nmcli connection
nmcli c

# nmcli connection modify enp0s3 autoconnect yes
# autoconnectのような Connection のオプションは省略表記できませんでした。TAB補完しましょう。
nmcli con mod enp0s3 autoconnect y

覚えておきたいコマンド

最後に、よく使うコマンドを列挙します。

これらのコマンドをひたすら何度も打っていれば、nmcliの使い方などすぐに慣れてしまうでしょう。

  • nmcli
    • ネットワークステータス、設定をざっくり確認
  • nmcli connection show インターフェース名
    • Connection単位で、ネットワーク設定を詳細に確認
  • nmcli device
    • Deviceの一覧表示
  • nmcli connection
    • Connectionの一覧表示
  • nmcli connection add
    • Connectionの作成
  • nmcli connection delete Connection名
    • Connectionの削除
  • nmcli connection modify Connection名
    • Connectionの設定変更
  • nmcli connection up Connection名
    • Connectionの設定反映
    • Deviceとの手動紐づけ
  • nmcli connection down Connection名
    • Connectionの手動紐づけ解除 (インターフェース無効化として使える)
    • autoconnect yes設定でも、OS再起動か手動upさせるまで上がってこない

(参考) nmtui

概要

nmcliと等価な機能を持つコマンドです。
Network Managerサービスを介して、Linuxのネットワーク設定を変更します。

nmtuiは、恐らくnmcliよりも初心者に優しい作りをしています。

個人的には、nmcliを覚えることをオススメします。
慣れれば早く設定できるようになるためです。

小技ですが、Connection名が2バイト文字 (日本語など) で設定されてしまい、CLI環境ではConnectionを削除することすら困難なケースでnmtuiが活躍します。
nmtuiなら、こういった困った設定も削除できるのです。

詳細

nmtuiと1行でコマンドを実行すると、TUI (Text User Interface) の対話画面が現れます。
CLI環境でも実行可能です。
十字キーで項目を選択し、Enterキーで決定、Escキーでメニューを抜けるという、直観的な操作が可能です。
設定の選択肢が見えているので、Network Managerの設定変更に慣れていない方には良いかもしれません。

f:id:stopendy:20180726230758p:plain

nmtuiの設定変更も、nmcli connection modifyと同様に即時反映ではありません。
コネクションのactivationを手動で行う必要があります。

nmtui上でもこの操作は可能ですが、コネクションがアクティブな状態では「Deactivate」ボタンしか表れません。
下記の画面で、Enterキーを「タタン」と素早く2回押せば、Activate > Deactivateされます。
でも、サービス影響を抑えたい実運用ではこんなことできませんよね。

f:id:stopendy:20180726231031p:plain

もしnmtuiを実運用で使うなら、設定反映だけはnmcli connection up <コネクション名> で実施するのが良いかと思います。

RHEL7の公式ドキュメントにnmtuiの概要が載っていますので、参考情報として貼っておきます。

Redhat公式 英語サイト (nmtui)
※URLの"en-us"を"ja-jp"に変更すれば日本語表示になります
Red Hat Enterprise Linux 7 Networking Guide - Red Hat Customer Portal

(参考) ipコマンド

nmcliと同等の役割を持つコマンドとして、ipコマンドもあります。

ipコマンドもIPアドレスやルーティングの設定を実装できます。

nmcliをメインで利用する場合は、ipコマンドの設定変更のやり方を覚える必要はありません。
しかし、ip routeコマンドだけは、覚えておいて損はないでしょう。
ip routeコマンドにより、nmcliよりもわかりやすくルーティングテーブルを表示できます。

ip route
# 172.16.0.0/24 dev enp0s8 proto kernel scope link src 172.16.0.10
# 172.16.2.0/24 dev enp0s9 proto kernel scope link src 172.16.2.10

ipコマンドの Redhat公式情報を参考として掲載しておきます。

英語版
Red Hat Enterprise Linux 7 Networking Guide - Red Hat Customer Portal

日本語版
Red Hat Enterprise Linux 7 ネットワークガイド - Red Hat Customer Portal

まとめ

本記事では、nmcliの基本的な使い方について紹介しました。

nmcliの基本的なオプション、IPアドレスデフォルトゲートウェイの追加/削除など、nmcliの具体的なコマンドサンプルについては、以下の記事で紹介します。

endy-tech.hatenablog.jp

【Minimalism】コピペでOK!はてなブログのカスタマイズ全公開 (3) ※更新履歴編

f:id:stopendy:20181118164055p:plain
「本当にすんませんでしたー!」

ここで書くこと

本記事は、下記スタイルシート紹介記事を書いた後に、後から更新した箇所をまとめたものです。
スタイルシートの不具合修正や改善を行った際は、こちらに詳細を記録していきます。

endy-tech.hatenablog.jp

本記事は、すでに上記記事で紹介したスタイルシートをご利用いただいている方向けに、更新内容と修正方法をお伝えするために書いております。

元記事のスタイルシートには更新ポイントを反映しているので、これからコピペをする人は更新を意識する必要はありません。

更新の詳細

2018/11/18 見出し3, 4が誤った番号で採番される問題を修正

修正前

「2.3. 見出し3」の部分が不具合です。

1. 見出し2
1.1. 見出し3
1.2. 見出し3

2. 見出し2
2.3. 見出し3

修正後

本来は、「2.1. 見出し3」になるのが正です。

1. 見出し2
1.1. 見出し3
1.2. 見出し3

2. 見出し2
2.1. 見出し3

修正方法

スタイルシートの .entry-content h2 と @media screen and (min-width:641px) の部分を以下のものに差し替えてください。
スタイルシートの設定箇所は、お手数ですが冒頭のリンクから元記事を参照してください。

.entry-content h2 {
    background: #f4f4f4;
    border-left: 9px solid #1a95bd;
    border-radius: 5px;  /* 角を丸くする */
    counter-increment: h2; /* h2という変数に1を足す */
    counter-reset: h3 h4; /* h3, h4という変数を0に戻す */
    font-size: 20px;
    font-weight: bold;
    line-height: 1.5em;
    margin: 60px 0 10px 0;
    padding: 20px 10px 17px 15px;
}

/* 【タブレット、PC限定】 */
@media screen and (min-width:641px) {
    .entry-content h2 {
        background: #f4f4f4;
        border-left: 9px solid #1a95bd;
        border-radius: 5px;  /* 角を丸くする */
        counter-increment: h2; /* h2という変数に1を足す ※初期値は0 */
        counter-reset: h3 h4; /* h3, h4という変数を0に戻す */
        font-size: 30px;
        font-weight: bold;
        line-height: 1.5em;
        margin: 60px 0 10px 0;
        padding: 20px 10px 17px 15px;
    }
}

蛇足 (どう間違えていたか?)

同じセクション内にcounter-resetを2行書くと、どちらか片方が無視されるようです。
2つの変数を一度にcounter-resetしたい場合は、スペース区切りで変数を指定する必要があります。

↓ 良くない例

.entry-content h2 {
    /* (中略) */
    counter-reset: h3;  /* h3という変数を0に戻す */
    counter-reset: h4; /* h3という変数を0に戻す */
    /* (中略) */
}

↓良い例

.entry-content h2 {
    /* (中略) */
    counter-reset: h3 h4; /* h3, h4という変数を0に戻す */
    /* (中略) */
}

最後に

記事の品質には気を付けているつもりですが、やっぱりミスを0にするのは難しいものです。。。
改善点を見つけたら本記事のように修正情報を出しますので、お気づきの点があれば教えてくださいね!

ではでは。

【VirtualBox】VirtualBoxの基本と仮想ネットワークを紹介

f:id:stopendy:20181027131833p:plain

本記事で紹介すること

本記事では、VirtualBoxを使いこなすうえで必要となる、基本概念を紹介します。

仮想化の基礎知識と、VirtualBoxの仮想ネットワークを中心に紹介します。

具体的な操作手順は別記事に譲り、ここでは概念を紹介します。

「そもそも仮想化って何?」という方は、先にこちらをご覧ください。

endy-tech.hatenablog.jp

VirtualBoxの概要

VirtualBoxとは

WindowsMacに対応する無料のサーバー仮想化ソフトです。

Windowsの場合、他にVMware Workstation Playerも無料の仮想化ソフトとして使えます。
Macの場合、有償ですがVMware Fusionという製品があります。

サーバー仮想化とは

いわゆるVM (Virtual Machine: 仮想マシン) を作る機能です。

あるOSの中に別のOSを立ち上げることができます。

サーバー仮想化にもホスト型、ハイパーバイザ型、コンテナ型などいくつか種類があります。
VirtualBoxは、サーバー仮想化の中でも「ホスト(OS)型」に分類されています。

詳しくは以下の記事が参考になります。
「ネットワークチェンジニアとして」は、ネットワーク / サーバ関連の情報が豊富に揃っていますので、ぜひチェックしてみてください。
私も日々参考にさせていただいております。
changineer.info

ここでも簡単に説明します。

各種サーバ仮想化ソリューションの構成は、下図のようになっています。
VirtualBoxはホストPC上のアプリケーションとして動作し、VMを管理する役割を持っています。

f:id:stopendy:20180930181027p:plain

仮想化のタイプ別のメリット/デメリットの概要は以下になります。

f:id:stopendy:20181006114446p:plain

VirtualBoxを含むホストOS型の仮想化は無償の製品が多く手軽に導入できます。
世の中でも多くの人が使っており、先人の知恵が多く蓄積されています。
ホストOS型の仮想化製品は、まさに学習用途にうってつけなのです。

VirtualBoxの仮想ネットワークについて

サマリ

VirtualBoxの操作方法は別記事で紹介することとして、ここではVirtualBoxで唯一の難しい概念である仮想ネットワークについて説明します。

仮想ネットワークには以下のバリエーションがあります。

  • NAT
  • 内部ネットワーク
  • ホストオンリーアダプター
  • NATネットワーク
  • ブリッジアダプター
  • 汎用ドライバー

多くの場合、ホストオンリー、NAT、ブリッジがあれば事足ります。

機能のサマリは以下のようになっています。

f:id:stopendy:20181027125427p:plain

これだけ種類があると、どう使ったものか迷ってしまいますよね。
私は以下のように使い分けています。
どの機能も必要な場合、1つのVMに3つのネットワークインターフェースを追加しています。

  • Host PCからVMに通信させたいとき (SSH接続や、サーバを立てた後にブラウザで試験的にアクセスする時のため)。VM同士を通信させたいとき (ホストオンリーはどんな場合でも追加すべきです) → ホストオンリー
  • VMからHost PCの外部 (特にインターネット) に通信させたいとき (外部からVMにはアクセスさせない) → NAT
  • VM同士を通信させる、かつホストオンリーとはネットワークセグメントを分けたいとき (仮想マシンでルーティングやNAT、プロキシさせたいときなど) → 内部ネットワーク

外部からVMにアクセスさせたい場合は、以下のどちらかで対処します。

  • 基本的には ブリッジ を利用する
  • Host PCが属するネットワークのIPアドレスVMに割り当てられない場合 (例えば、自分が管理していないネットワークから固定のIPアドレスアサインされているとき) → NAT + ポートフォワーディング を利用する

NATネットワークと汎用ドライバーについては、恐らく今後も利用することはないと思います。

次に、各仮想ネットワークの詳細を説明します。

NAT

説明

VMがHost PCの外部 (インターネットなど) にアクセスするために利用します。

NATに指定したインターフェースのIPアドレスは、VirtualBoxに組み込まれたDHCPサーバ機能によって自動的にアサインされます。
ユーザはどのIPがアサインされるかを意識する必要はありません。

ホストPCの物理インターフェースのIPアドレスにNAPTしていますので、デフォルトの設定ではHost PC外部からVMに通信を開始することはできません (できるのは折り返し通信のみ)。

最後に注意点ですが、NATに設定したインターフェースで、VM同士は互いに通信できません。
VM同士通信させたい場合は、ホストオンリーか内部ネットワークのインターフェースを使うのが一般的です。

(参考) ポートフォワーディングによってホストPCとVMIPアドレスとポート番号を紐づけることで、インターネットからVMにアクセスできるようになります。
IPアドレスの部分を空白にすると、any扱いとできるようです
https://www.virtualbox.org/manual/ch06.html#natforward
https://blogs.oracle.com/scoter/networking-in-virtualbox-v2#NAT-PF

公式マニュアルによると、NATには制限があるとのことなので、こちらも目を通しておいた方が良さそうです。
私は今までに困ったことはありませんが、ポートフォワーディングでホストPC側の1023以下のポート番号を設定してもうまく動かないなどあるとのことです。
https://www.virtualbox.org/manual/ch06.html#nat-limitations

論理構成

f:id:stopendy:20180930184305p:plain

設定方法

NATを使うための事前設定は不要です。
ホストPCが外部ネットワークと通信可能な状態であり、VM側でDHCPを利用する設定さえすれば通信できます。

ここからは参考情報です。

NATインターフェースに振られるIPアドレスは10.0.x.0/24から払い出されるのがデフォルトですが、この払い出し元のIPアドレスは変更することができます。
この設定変更はVirtualBoxGUIからはできず、VBoxManageというCLIプログラムを使って変更します。
どうしても変更できない既存のIPアドレスと重複している場合を除き、この設定は基本的に不要です。

(参考) 公式マニュアル https://www.virtualbox.org/manual/ch09.html#changenat

以下にコマンドサンプルを載せます。
コマンドの存在は確認済みですが、実際には使ったことはありません。

# Windowsの場合
# --natnet の後の数値には、1以上の数値が入る。インターフェース番号と対応する
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyvm "<仮想マシン名>" --natnet1 "192.168.100.0/24"

# (参考) VBoxManageのヘルプ
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" 

ホストオンリー

説明

ホストオンリーは、VM - Host PC間、VM間の通信を実現するネットワークです。

特殊な事情がなければ、全てのVMにホストオンリーのインターフェースを1つは搭載すべきです。
ホストPCからSSHアクセスすればコピペできますし、SCPでファイルのやりとりをすることもできます。
多くの検証では、VM間の通信もできた方が都合が良いと思います。

ホストオンリーに設定したインターフェースには、固定のIPアドレスを振ることもDHCPで動的にIPアドレスを振ることもできます。

論理構成

f:id:stopendy:20181027130037p:plain

設定方法

ホストオンリーネットワークは、使用する前に事前にサブネットやDHCPサーバの設定を定義する必要があります。

ファイル > ホストネットワークマネージャーから設定できます。
(または、画面右上のグローバルツール > ホストネットワークマネージャー)

まだ1つもホストオンリーネットワークがない場合は、「作成」ボタンから追加しましょう。
設定項目は以下の通りです。

アダプターにはHost PC側のIPアドレスの設定を入れます。

f:id:stopendy:20181027125424p:plain

上記のサンプル設定では、VMに対して静的なIPアドレスを192.168.10.2-199の範囲で割り振ることができます。
VM側でDHCPを利用する設定とした場合、192.168.10.200-254の範囲でアドレスが割り振られます。

内部ネットワーク

説明

VM同士が通信する専用のネットワーク設定です。
このインターフェースでは、同じ内部ネットワークに所属するVMとは通信できますが、他のホストとは一切通信できません。

VM同士で通信させるだけなら、ホストオンリー (、NATネットワーク、ブリッジ) でも可能です。
多くの場合、ホストオンリーをVMに搭載すれば十分に要件を満たすでしょう。
ホストオンリーとは別に、内部ネットワークを追加で利用する場面は ネットワークセグメントを分割したいときだけ です。

論理構成

f:id:stopendy:20180930184316p:plain

設定方法

内部ネットワークを利用するための事前設定は不要です。

設定箇所は、 仮想マシンの設定 > ネットワーク > 名前 のみです。
複数のVMで同じ名前の内部ネットワークに接続すれば相互に通信可能、異なる内部ネットワーク間では通信不可です。

デフォルトの名前はintnetなので、特に理由がなければこの名前を使いましょう。

名前と紐づけて、ネットワークアドレスやサブネットマスクを設定することはありません。
VM上で任意のIPアドレスサブネットマスクを固定で割り当ててください。

NATネットワーク

説明

※当ブログでは、NATネットワークは未検証です。ご了承ください。

NATネットワークは、NATとほぼ同じ機能です。
VMからホストPCの外部 (インターネットなど) にアクセスできますが、外部からVMにはアクセスできません。

NATと異なるところは、同じNATネットワークに所属するVM同士は、NATネットワーク越しに相互に通信できることです。
そして、NATネットワーク内部では静的にIPアドレスを割り当てることができます (DHCPも利用可能です)。

いつもNATインターフェースとホストオンリーインターフェースの組み合わせで賄っています。
このあたりは、純粋に好みの問題だと思います。

NATネットワークを設定すると、論理構成は以下のようになります。

論理構成

f:id:stopendy:20180930193616p:plain

設定方法

NATネットワークは、使用する前に事前にネットワーク名やサブネット情報を設定する必要があります

NATネットワークの設定は、VirtualBoxのファイル > 環境設定 > ネットワーク から変更できます。

ネットワーク名とネットワークアドレス、DHCPの有効化有無を設定できます。
デフォルトゲートウェイのアドレスや、DHCPの割り当て範囲については記載がありません。
公式マニュアルを確認しましたが、部分的にしかわかりませんでした。

"ゲートウェイのアドレスは、原則として先頭のアドレスが使用される。
しかし、変更される場合もある。"

https://www.virtualbox.org/manual/ch06.html#network_nat_service

DHCPの割り当て範囲については言及無し。
やはりこの機能は使いたくありません。。。

ブリッジアダプター

説明

VMがHost PCの物理インターフェースとL2スイッチ越しに接続されている (ブリッジ接続されている) かのような状況を作り出せます。
スタンドアロンの検証環境とHost PCを直結し、VMと検証環境で通信させたいときに便利でしょう。
家にネットワーク機器を購入しているエンジニアの方はよく使うと思います。

NATや内部ネットワークとの違いは、以下の通りです。

  • 通信に制限がない
    • NATはVM同士で通信できない。外部にアクセスできるが、外部からVMへはアクセスできない (ポートフォワーディングすれば別)
    • 内部ネットワークはVM同士しか通信できない
    • ブリッジは外部と双方向通信できる。ブリッジ設定したインターフェース越しに、VM同士も通信できる。ポート番号も変換不要で、そのまま使える

ブリッジの特徴は、VMがホストPCとは完全に独立しているかのように振舞えることです。

ブリッジネットワークに接続されたVMは外部 (インターネットなど) と双方向に通信でき、ポート番号も自由に使えます。

その分、気を付けなければならないこともあります。

外部からVMに直接アクセスできてしまうので、インターネットに接続する場合はVMのセキュリティを万全にしておく必要があります。

また、 ブリッジインターフェースと紐づいた物理ポートがLink Down (ケーブルを抜くなど) すると、ブリッジインターフェースも同時に使えなくなってしまいます。
従って、個人的にはブリッジインターフェースを利用する場合にも、ホストオンリーインターフェースを別途設定することをお勧めしています。
そうすれば、PCからケーブルが抜けた状態でも、ホストPCからVM間にSSHログインできる状態が継続されます。

VMのブリッジ設定したインターフェースにIPアドレスを設定するときですが、Host PCの物理インターフェースと同じネットワークのIPアドレスを割り振る必要があります。
IPアドレスの枯渇には注意してください。
自宅外のように、プライベートIPアドレスを自由にアサインできない環境では、ブリッジインターフェースの利用に不向きです (後述のようにDHCPでアドレスを受け取ることはできますが、そのような環境ではそもそもNATで十分でしょう)。

ブリッジインターフェースには、VirtualBox自体がDHCPサーバ機能を提供することはありません。
しかし、ブリッジ接続したネットワークにもともとDHCPサーバが存在した場合、VMDHCPによってIPアドレスを受け取ることができます。

(参考) ブリッジインターフェースの説明
https://blogs.oracle.com/scoter/networking-in-virtualbox-v2#Bridged

論理構成

f:id:stopendy:20180930193627p:plain

設定方法

ブリッジを設定する前の事前設定は不要です。

ブリッジインターフェースをVMに設定するときに気を付けるポイントがあるので、そこだけ補足します。

まず、仮想マシンの設定 > ネットワーク > 割り当てで「ブリッジアダプター」を指定します。
その後、「名前」にブリッジアダプターと紐づけたいホストPCのインターフェースのドライバ名を指定します。

ブリッジは「ホストPCのインターフェースとL2接続する」仮想ネットワーク機能です。
ホストPCが複数のインターフェースを持っていた時に、どのインターフェースと紐づけるかを指定するためにこの工程があります。

ホストPCがインターフェースを1つしか持っていない場合は悩むことはありませんが、複数あると厄介です。

その場合は...頑張って調べてください。
Windowsの場合、コマンドプロンプトからipconfig /allで調べられます。
命名について、Windowsの場合、多くは「Realtek」という文字列を含んでいると思います。
Macの場合、Thunderboltなど接続規格の名前がついていると思います。

最後に

VirtualBoxは、無料で簡単に仮想マシンによる検証環境を作ることができる便利なデスクトップ仮想化製品です。
多くの設定は直観的に理解できると思いますが、仮想ネットワークだけは難解なのでここで説明してみました。

皆さんの自習に役立てばうれしいです。

質問は大歓迎です。
記事の改善のため、皆さんの疑問や感想、アドバイスを聞かせてください。
お願いします。

【サーバ仮想化】概要の紹介

f:id:stopendy:20181006113751p:plain

本記事で紹介すること

本記事では、仮想化製品を 勉強目的で 使いこなすために必要となる、基本概念を紹介します。

仮想化製品の中でも、特に ホストOS型仮想化製品にはフリーソフトもあります。
自宅にて無料でサーバ / 仮想ネットワークの検証をするには必須の製品 と考えております。
※お金があるならクラウドでも...

興味のある方はぜひ本記事を出発点に、良い検証ライフを始めましょう。

続きの記事では製品の詳細や具体的な操作手順も紹介する予定ですので、そちらもお見逃しなく。

サーバー仮想化とは

いわゆる仮想マシン (VM: Virtual Machine) を作る機能です。

あるOSの中に別のOSを立ち上げることができます。

サーバー仮想化にもホスト型、ハイパーバイザ型、コンテナ型などいくつか種類があります。

詳しくは以下の記事が詳しいです。
「ネットワークチェンジニアとして」は、ネットワーク / サーバ関連の情報が豊富に揃っていますので、ぜひチェックしてみてください。
私も日々参考にさせていただいております。
changineer.info

全てを語れるわけではないですが、ここでも簡単に説明します。

簡易構成図

各種サーバ仮想化ソリューションの構成は、下図のようになっています。
VirtualBoxはホストPC上のアプリケーションとして動作し、VMを管理する役割を持っています。

f:id:stopendy:20180930181027p:plain

いずれの仮想化製品でも共通して以下の特徴を持っています。

  • ホストPCのOSとは別のOSをVMとして起動できる
  • VMは複数台起動できる

例えばホストOS型仮想化製品をインストールすれば、以下が実現します。

  • 普段の生活では今まで通りWindowsを利用する
  • 勉強したいときは仮想化ソフトを起動して、アプリケーションウィンドウの中にLinuxを起動して操作する

新たなマシンを購入することなく、無料でLinuxの勉強ができるようになります。
まさに、勉強にはうってつけの製品なのです。

他にも、一般的に仮想化には以下のメリットがあります。
こちらは商用での話であり、勉強用途では関係ないのでご参考までに...。

  • CPUやメモリなどのリソース消費の傾向が異なるVMを単一の物理マシンに導入することで、
    ハードウェアのリソースを無駄なく使いきることができる
  • スケールアウト (VMを増やすこと) により、リモート作業で簡単に性能を増強できる
  • 同種のVMを複数起動して冗長化することで、VMの論理障害 (OSクラッシュなど) に対する耐障害性を向上できる

仮想化製品のタイプ別比較

仮想化のタイプ別のメリット/デメリットの概要は以下になります。

f:id:stopendy:20181006114446p:plain

ホストOS仮想化は導入や操作が 簡単 です。
更に 無料 で導入できます。

堅牢性が低く、商用には向きませんが、 学習にはもってこい なのです。

まとめ

WindowsではOracle VirtualBoxVMware Workstation、MacではOracle VirtualBoxを無料で利用できます。
これらのフリーソフトをインストールすることで、ホストPCで既存のOSを使いながら、無料で仮想サーバを立てることができます。

他の仮想化製品と比較すると、ホストOS型は学習用途に向いています。
ハイパーバイザ型の多くは商用、コンテナ仮想化はどちらにも向いています。

別記事で仮想化製品に関する解説を行いますので、興味のある方はぜひご覧ください。
初めての方でも、読めば大体製品をいじれるようになると思います。

関連記事

VirtualBoxについて、更に詳細を説明します。
仮想ネットワークが中心です。
endy-tech.hatenablog.jp

【Minimalism】コピペでOK!はてなブログのカスタマイズ全公開 (2)

f:id:stopendy:20180811144726p:plain

カスタマイズが終わった興奮から時間が経ち、徐々に我に返ってきました。
しつこいようですが、画像は私ではありません。

ここで書くこと

前回の記事では、当ブログで利用しているスタイルシートを全て公開しました。

endy-tech.hatenablog.jp

ここではスタイルシート以外の部分のカスタマイズ、および参考URLをまとめてご紹介します。

追加設定の紹介

前回のスタイルシートソースコード中で、 フラグのついた箇所には追加設定が必要と説明しました。

ここでは、 フラグをつけた箇所に対して必要な、具体的な設定手順を順に紹介していきます。

項目のタイトルは、スタイルシートソースコード中のキーワードと一致しているため、キーワード検索でジャンプできます。

★ WEBフォントの追加設定

設定場所

「設定 > 詳細設定 > headに要素を追加」に後述のコードを設定します。

f:id:stopendy:20180811150334p:plain

コピペするコード

当ブログでは、英数字のフォントとして Noto Sans を、日本語のフォントとして Noto Sans JP を利用しています。

これらのフォントデータは、ブログページにアクセスしたときにGoogleから動的にダウンロードされます。
ここでは、そのダウンロード元のURLを指定する設定を行います。

下記のHTMLコードを、上記の「headに要素を追加」にコピペしてください。

<link href="https://fonts.googleapis.com/css?family=Noto+Sans" rel="stylesheet">
<link href="https://fonts.googleapis.com/earlyaccess/notosansjp.css" rel="stylesheet" />

※この設定がないと、上記2種類のフォントの読み込みに失敗します。  その場合、Macなら'Hiragino Kaku Gothic ProN'、Windowsならメイリオが代替フォントとして利用される設定になっています。
 代替フォントでも十分きれいな見た目になります。

最新のGoogle FontのURLの確認

上記フォント読み込みのURLは今後変わる可能性があります。
設定する際は、念のため下記公式サイトからURLが正しいことを確認してください。

Noto Sansフォント読み込み先のURLの確認
https://fonts.google.com/specimen/Noto+Sans?selection.family=Noto+Sans

Noto Sans JPフォントの読み込み先URLの確認
https://fonts.google.com/earlyaccess#Noto+Sans+JP

詳細な確認手順は、下図を参照してください。

f:id:stopendy:20180811153446p:plain

f:id:stopendy:20180811153843p:plain

(参考) ブログトップページを無料で記事一覧っぽくする方法

前記事のスタイルシートとは関係ないのですが、ついでに紹介しちゃいます。

ここで紹介する内容は、下記ブログ様で紹介されているものと同じ内容です。

corksample.hatenablog.com

Proユーザの方なら、ブログトップページを2種類選べます。
「全文形式」と「一覧形式」ですね。

一方、無料ユーザの場合、「全文形式」しか選べません。
しかし、無料ユーザでも「一覧表示」と似た見た目のページを持っています。

まず、ブログタイトルをクリックして、自分のブログのトップページに移動してください。
無料ユーザなら「全文形式」にて表示されると思います。
URLは、当ブログでしたら以下のようになります。 http://endy-tech.hatenablog.jp

ここで、URLの末尾に/archiveを追記して、そこにアクセスしてみてください。
当ブログを例にすれば、以下のようなURLになります。
http://endy-tech.hatenablog.jp/archive

すると、いわゆる「一覧表示」とよく似たページが表示されると思います。

さて、これからが本題です。

上述で紹介した「headに要素を追加」に、以下のコードを追記してみてください。
トップページにアクセスが来た場合、上記の記事一覧ページにリダイレクトされるようになります。

【】で囲まれた部分は皆様の環境によってご変更ください。

<script type="text/javascript">
 if( location.href == '【ブログトップページのURL】'){
 location.href='【ブログトップページのURL】/archive';
}
</script>
<noscript>
<p><a href="【ブログトップページのURL】/archive">【ブログタイトル】</a></p>
</noscript>

当ブログの場合、以下のようになります。

<script type="text/javascript">
 if( location.href == 'http://endy-tech.hatenablog.jp/'){
 location.href='http://endy-tech.hatenablog.jp/archive';
}
</script>
<noscript>
<p><a href="http://endy-tech.hatenablog.jp/archive">えんでぃの技術ブログ</a></p>
</noscript>

以上、参考情報でした。

★ ブログタイトル部分の背景画像

画像のサイズについて

当ブログでは、タイトル画像について他の方と異なるアプローチをしています (私の知る限り)。

何も考えずに画像を設定すると、画像が大きすぎるとタイトル領域からはみ出し、画像が小さすぎると同じ画像がループして繰り返し表示されてしまいます。

私の場合は、適当に画像を (パワーポイントで) 作ったら小さすぎました。
案の定画像が縦横にループしたのですが、当ブログでは以下のように、ループしても問題ない画像を作成しています。

f:id:stopendy:20180811103112p:plainf:id:stopendy:20180805231350p:plain
左がPCアクセス時、右がスマホアクセス時に表示する背景画像

上記のような画像は、縦横にループさせても問題ありませんね。
もし画像のサイズで悩みたくない場合は、上記のアプローチは1つの案としていかがでしょうか。

ただ、当方では未検証ですが、別のブログ様にてもっと賢い実装をされている方がいました。
こちらのやり方なら、画像比率は関係なしに、余白なし画像を貼り付けることができます。
素晴らしい...。
かっこいい...。

当ブログのように画像をループさせたいわけでなければ、下記のカスタマイズをご参考にするとよいと思います。

raku-book.hatenablog.com

画像のアップロードとURLの指定方法

画像をアップロードできるサービスはいくつもありますが、同じサービス体系である はてなフォトライフ に画像をアップロードするのがおすすめです。

はてなフォトライフ - 無料・大容量、写真を共有できるウェブアルバム

こちらにアップロードした画像のURLをスタイルシート上で指定することで、任意の画像をタイトル画像として利用できます。

はてなフォトライフの画像のURLの取得方法は、下図を参考にしてください。

f:id:stopendy:20180811162649p:plain

★ プロフィール

サイドバーにデフォルトで指定できるプロフィールは、プロフィール画像が小さいです。
目立ちません。

下記ブログを参考に、オリジナルのサイドバーを作成すれば、上記のような悩みは解消します。

下記ブログ様の内容をほぼそのまま使わせていただきました。
ありがとうございます!!

www.ratoblo.com

設定箇所

f:id:stopendy:20180811164848p:plain

HTMLソースコード

以下のコードを上記設定箇所に貼り付けます。
【】の部分は環境によって置き換えてください。
画像下のハイパーリンクが不要でしたら、<a href .... > ~ </a> の部分を削除してください。

<a href="【ブログ紹介ページのURL】"><img src="【はてなフォトライフの画像URL】" alt="Profile" id="profile-image"></a>
<span class="id">
      <a href="【ブログ紹介ページのURL】/about" class="hatena-id-link">【ユーザ名など、表示したい文字列】</a>
</span>
【プロフィール本文】

当ブログの環境では以下のようになります。

<a href="http://endy-tech.hatenablog.jp/about"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/stopendy/20180811/20180811105249.png" alt="Profile" id="profile-image"></a>
<span class="id">
      <a href="http://endy-tech.hatenablog.jp/about" class="hatena-id-link">えんでぃ (id: stopendy)</a>
</span>
ネットワーク分野を中心に、技術情報を発信するブログです。

(おまけ) プロフィール画像の作り方

当ブログのプロフィール画像は、下記サイトで作成したものです。

アイコンジェネレーターズ
www.icongenerators.net

規約さえ守れば、作った画像は自由に利用できます。
よろしければお試しください。

f:id:stopendy:20180811105249p:plain

★ 読者になるボタン (サイドバー、及び記事下)

デフォルトの読者になるボタンは小さくて目立ちません。

これも下記ブログからの頂き物ですが、とっても気に入っています。
ありがとうございます!!

www.notitle-weblog.com

シンプルながらもしっかりアピールしてくれます。
マウスカーソルを乗せるとへっこんだように見える、さりげない工夫も粋ですね。
このようなボタンを公開していただき、本当に感謝です。

元のブログでは「記事下」での設定を紹介していますが、当ブログではサイドバーにも活用させていただいています。

従って、ここでは「記事下」と「サイドバー」それぞれにボタンを作成する手順を紹介します。

設定箇所

下図の 上半分が「記事下」 のHTML設定箇所です。
下半分が 「サイドバー」 のHTML設定箇所です。

f:id:stopendy:20180811172734p:plain

HTMLソースコード (記事下)

以下のコードを 記事下 の設定箇所に貼り付けます。
【】の部分は環境によって置き換えてください。

<div class="subscribe-button">
  <div class="subscribe-button-inner">
      <a href="https://blog.hatena.ne.jp/【ブログID】/【ブログURL】/subscribe">読者になる</a>
    </div>
</div>

当方の環境では以下のようになります。
「よろしければ...」の部分も加えていますので、参考にしてください。

<div class="subscribe-button">
  <div class="subscribe-button-inner">
      ↓よろしければ今後ともお付き合いくださいm(_ _)m ↓ <br>
      <a href="https://blog.hatena.ne.jp/stopendy/stopendy.hatenablog.com/subscribe">読者になる</a>
    </div>
</div>

HTMLソースコード (サイドバー)

以下のコードを サイドバー の設定箇所に貼り付けます。
【】の部分は環境によって置き換えてください。
今回の手順では サイドバーのタイトルは空欄にする 手順となりますので、ご注意ください。

<div class="subscribe-button-sidebar">
  <div class="subscribe-button-sidebar-inner">
      <a href="https://blog.hatena.ne.jp/【ブログID】/【ブログURL】/subscribe">読者になる</a>
    </div>
</div>

当方の環境では以下のようになります。

<div class="subscribe-button-sidebar">
  <div class="subscribe-button-sidebar-inner">
      <a href="https://blog.hatena.ne.jp/stopendy/stopendy.hatenablog.com/subscribe">読者になる</a>
    </div>
</div>

SNSシェアボタンの設置

SNSシェアボタンのカスタマイズは、Minimalismに標準搭載されているようです。
とても便利ですね。

このボタンについては、私の方でも特にカスタマイズせず、そのまま利用させていただいております。
好みによっては、背景色を変えてみてもいいかもしれませんね。

hitsuzi.hatenablog.com

FontAwesomeなど追加する必要もなく、用意されたコードを貼り付けたらほぼ動きました。
Feedlyの部分だけ以下のようになっていたので、当方の環境に合わせて書き換えました。

http://feedly.com/i/subscription/feed/http://ブログURL/feed

http://feedly.com/i/subscription/feed/http://endy-tech.hatenablog.jp/feed

こちらについて詳しい手順については割愛させていただきますが、もし詰まった部分があればコメントで聞いていただければと思います。

最後に

この記事には書ききれませんでしたが、他にも数多くのサイト様の情報を結集して本ブログのカスタマイズが完了しています。
スタイルシートにこっそり参考URLをコメントで書いてありますので、気づいたらアクセスしてみてくださいね。

おまけということで、ブログの背景画像に利用したえんでぃ特製のネットワーク機器のアイコン & ブログタイトル画像をアップロードします (MicrosoftのOneDrive利用)。
アイコンや画像はご自由にご活用ください。 パワーポイントファイルなのでウイルスなどが怖い方は開く前にウイルス検索してみてください。
私が言っても無意味かもしれませんが、ハイパーリンクやマクロは埋め込んでいませんのでご安心ください。

https://1drv.ms/p/s!ApYb7qWxsgVarED3nuPaIFBRcL_5