hiroportation

ITの話だったり、音楽の話、便利なガジェットの話題などを発信しています

最近買ったもの紹介 2021/01~03 ( roborock S6 MaxV / Intel用PCパーツ )

2021/01~03に購入したガジェットを紹介します。

1. お掃除ロボット

コロナ下でお家時間が増えてきたのでついにこれを購入

f:id:thelarklife1021:20210425035310p:plain
roborock

3ヶ月ほど使った roborock S6 MaxV の感想

長所 詳細
拭くと吸うの同時は最高 同時はうれしい
電池の持ちが良い おそらく100平米分は持ちます
ハマることが少ない じゅうたんや余程複雑な地形でなければハマったことがありません
段差からはまず落ちない 3ヶ月の間で段差、階段から落ち事はありません
掃除スピードが早い お掃除ルートの複雑さにもよりますが30平米くらいなら30分以内でやってくれます
マシンの掃除は楽 マシンの掃除はダストボックスとモップを簡単にお掃除するだけでOKだと思います
1分でできます
部屋のマッピング能力は高い 最初の掃除でほとんどの部屋を把握してました
強引に場所を移してもすぐに周りを把握してくれるのでとても使い勝手が良い
複数階の掃除も可能 移動させてもすぐに周りを把握してくれるので複数階の掃除も簡単です
リモート制御可能 wifi環境があればお掃除開始から終了までリモートで制御でき、進捗をモニタリングできます
監視、留守番用途でも使えるらしい 玄関前に置いておけば常にリモートで監視できます
安い 掃除ロボットと比べても安い方だと思いますが製品自体はハード、ソフト共にとてもしっかりとしています
短所 詳細
じゅうたんに弱い 引きずってしまったりハマってしまったりするのでそこは侵入禁止にするか、じゅうたんをどかす必要があります
ハマると自力で出てこれない 一度ハマってしまうと、自力での復帰はほとんどの場合できませんでした
たまに掃除再開させて復帰してくれることもあります

時短にはとても良い製品だと思いました。特に毎日掃除される方は1日の過ごし方が変わると思います。 じゅうたん対策だけしておけば、ほとんどハマることはないかと思います。

2. PCパーツ

2021初めには自作PCAMD->Intelに変えました。理由としては一部業務用のソフトウェアが動かなかったためです。やはり汎用機にはIntelですね。
ファンは導入しやすいNocture の空冷ファンを購入しています。

f:id:thelarklife1021:20210425044811p:plain

Azure リソース管理スコープ

はじめに

Azure のリソース管理がAWSと異なり混乱するので整理しました。

スコープ

f:id:thelarklife1021:20210109192303p:plain

docs.microsoft.com

上位レベルの設定が下位レベルに継承されます。 サブスクリプションにポリシーを適用すると、そのポリシーはサブスクリプション内のすべてのリソース グループとリソースに適用されます。

管理項目 説明
管理グループ AWSでいうOrganizationのようなもの
サブスクリプション Azureの契約、課金の単位。一般的にはユーザ毎に作るが、複数のユーザが一つのサブスクリプションになることもある(共同で支払い)
リソースグループ リソースのコンテナ。リソースグループ自体はリージョン毎に配置する。
リソース 仮想マシンやデータベース、仮想ネットワークなど、Azure環境上に構築する各サービス。

以上

Terraform で AWS、Azure、GCP にアクセスする

はじめに

今後TerraformでIaCできるようにしたいので、まずは各クラウドにアクセスできるようにしたい。 各社専用のユーザを作成するが、全く手順が異なりましたのでまとめたいと思います。

AWSにアクセス

GUIで1プロセスで作成できるため、個人的にAWSが一番簡単です。

認証に必要なパラメータ

export AWS_ACCESS_KEY_ID="<aws_access_key_id>"
export AWS_SECRET_ACCESS_KEY="<aws_secret_access_key>"

手順

1.IAMにてユーザを作成する

  • ユーザタブへ移動
  • ユーザ作成を押下 f:id:thelarklife1021:20210109121613p:plain

2.ユーザ設定

  • ユーザ名設定
  • アクセス種類から「プログラムによるアクセス」をチェック f:id:thelarklife1021:20210109121753p:plain

3.ユーザの権限設定

  • アクセス許可の設定から「既存ポリシーを直接アタッチ」を選択
  • ポリシー一覧からポリシーを選択(AdministratiorAccessを選べば全てのサービスのオーナー権限を設定できます) f:id:thelarklife1021:20210109123941p:plain

4.タグ設定(オプション)

  • タグを設定することによりユーザを整理しやすくします
  • 最後に設定確認をして完了 f:id:thelarklife1021:20210109123914p:plain

Azureにアクセス

認証に必要なパラメータ

export ARM_SUBSCRIPTION_ID="<arm_subscription_id>"
export ARM_CLIENT_ID="<arm_client_id>"
export ARM_CLIENT_SECRET="<arm_client_secret>"
export ARM_TENANT_ID="<arm_tenant_id>"

Azureでは以下の通りARMがsubscription_id毎ににリソースIDを定義しているため、AWSより必要なパラメータが多い /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}

手順(GUI)

手順はGUIでもCLIでも可能ですがCLIでも比較的楽にできますのでどちらも載せておきます。

docs.microsoft.com

  1. Azure Active Directoryから「アプリ登録」タブを押下
  2. 新規ユーザ作成
  3. 情報を入力すれば完了

手順(CLI)

CLIで専用ユーザを作成する。AzureではAPI用ユーザのことを「サービスプリンシパルと呼びます。 また、Azureの場合は下記の通りADサービスのコマンドを使用します。

docs.microsoft.com

1.azure cliをインストール

Azure CLIを使用することになるため、Azureダッシュボード上にある「Cloud Shell」を使う。

f:id:thelarklife1021:20210109125623p:plain

2.subscription_idを検索

$ az account show --query "{subscriptionId:id, tenantId:tenantId}"
{
  "subscriptionId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "tenantId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

3.subscription_idのセット

$ SUBSCRIPTION_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
$ az account set --subscription="SUBSCRIPTION_ID"

4.サービスプリンシパルを作成

roleオプションにて"Contributor"を設定することによって

$ az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/${SUBSCRIPTION_ID}"
Creating a role assignment under the scope of "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  Retrying role assignment creation: 1/36
{
  "appId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "displayName": "azure-cli-YYYY-MM-DD-hh-mm-ss",
  "name": "http://azure-cli-YYYY-MM-DD-hh-mm-ss",
  "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "tenant": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

GCPにアクセス

GCPGUIで設定できますが、初回の場合ユーザー設定とは別にサービスアカウント権限を有効にする必要があります。 GCPではAPI用のユーザを「サービスアカウント」と呼びます。

認証に必要なパラメータ

GCPは他と違いファイルをアカウント情報が入ったjsonファイルを用意することになります

<account名>.json

手順

1.サービスアカウントの作成

  • 「IAMと管理」からサービスタブを選択
  • 「サービスアカウントの作成」を押下
  • サービスアカウント名の設定や権限の設定を入力し進めていく
  • 完了を押下 f:id:thelarklife1021:20210109135014p:plain

2.サービスアカウントのアカウント情報を取得

  • サービスアカウント一覧からの作成したアカウントの行の操作 列を選択して「鍵を作成」を選択する
  • そうするとjsonファイルがダウンロードされる f:id:thelarklife1021:20210109140400p:plain

3.サービスアカウント権限の有効化

  • 使用するサービスアカウントのAPIを有効化します

f:id:thelarklife1021:20210109135721p:plain

※1.でサービスアカウントの権限設定をしただけでは権限は有効になりません

以上

AMD CPUで IOS XRv9000 が起動しない問題と対処

経緯

Cisco CML2.1にてXRv9000を使おうとしたところ起動がいつまで経っても終わらず、以下の状態で止まってしまい XRv9000 が使えませんでした。 CMLで提供されている他のNetworkOSについては問題なく使用できました。

Running INIT process in Crash Kernel
/etc/init.d/pd-functions: line 743: on_baremetal: command not found
/etc/init.d/pd-functions: line 564: on_baremetal: command not found
/etc/init.d/pd-functions: line 571: is_xrv9k_aws: command not found
/etc/init.d/pd-functions: line 673: blkid: command not found
/init: line 119: get_board_type: command not found
[    1.048246] device-mapper: ioctl: 4.27.0-ioctl (2013-10-30) initialised: dm-devel@redhat.com
[    1.051102] insmod (724) used greatest stack depth: 14120 bytes left
[    1.060529] insmod (729) used greatest stack depth: 14072 bytes left
[    1.080373] ACPI: PCI Interrupt Link [LNKB] enabled at IRQ 10
[    1.095135] ACPI: PCI Interrupt Link [LNKC] enabled at IRQ 11
[    1.122734] ACPI: PCI Interrupt Link [LNKA] enabled at IRQ 10
[    1.139100] blk-mq: CPU -> queue map
[    1.140233]   CPU 0 -> Queue 0
[    1.141922]  vda: vda1 vda2 vda3 vda4
[    1.168338] insmod (758) used greatest stack depth: 12248 bytes left
[    1.171547] random: lvm urandom read with 99 bits of entropy available
[    1.179923] random: nonblocking pool is initialized
[    1.190228] bio: create slab <bio-1> at 1
[    1.201811] EXT2-fs (dm-2): error: couldn't mount because of unsupported optional features (244)
[    1.214340] EXT4-fs (dm-2): recovery complete
[    1.215928] EXT4-fs (dm-2): mounted filesystem with ordered data mode. Opts: (null)

下記の通り同じ事象の方を見つけました。 learningnetwork.cisco.com

原因

どうやら CPUがAMD(Ryzen)なのが根本原因のようで、Ciscoによれば検証はIntel製のサーバでしているため、AMDは検証不足だそうです。 (CIscoさんはAMD対応しているといってますが・・・)

対処

IntelCPUを使用するのが一番確実ですが、AMDでも何とか動きましたので紹介したいと思います。

  1. コンソールにてsysadminでログイン
  2. sudo vi /etc/modprobe.d/kvm.conf にて編集
  3. options kvm_amd nested=1 をコメントイン
  4. reboot

CML のUIにてXRv9000を配置し直して起動するとプロンプト

ですが、うまくいかない場合もあったり、とても不安定のためIntel CPUを使うことを推奨します。

2021/1では一般用CPUですと、AMDの方がコアが多く、パフォーマンス的に優れているため別にAMDで使える方法がみつかりましたら更新したいと思います。

VPNの種別や仕様をjson化してまとめてみる

はじめに

VPN には IPsec-VPN や インターネットVPN など 様々なタイプや仕様があるため、全体を整理し、仕様も含めたドキュメントデータベースを作成してみようかと思います。

情報整理

どういったサイト間でVPNを使うのか?

・インターネット経由で通信する場合(危険でオープンなネットワーク)
 -> インターネットVPN
 ・対向先とプライベートネットワーク(L2)を設けた上で様々な作業を実施したい(SSH/HTTPS)
  -> IPsec-VPN
   ・ESP + トンネルモードをつかう
    -> 事前準備:両方のVPNにPSKを設定
    -> 第一フェーズ:IKE SAに必要な情報を交換
     ・共有鍵 Diffie-Hellmanで共有鍵を安全に交換
     ・SAに使う暗号アルゴリズムを提案
     ・SAに使うハッシュアルゴリズムを提案
     ・PSKと相手のIPでハッシュ値作成
      -> お互いの証明が可能になる
       ・暗号アルゴリズム、ハッシュアルゴリズムに対する返答を返す
    -> 第二フェーズ:相互でコネクションするためにSAを上り下り二つ作成する
     ・SAのための暗号アルゴリズム決定
     ・SAのためのハッシュアルゴリズム決定
 ・対向先にHTTP通信(80/443)のみで安全にアクセスしたい
  -> SSL-VPN
   ・ ブラウザアクセスのみをする場合
    -> リバースプロキシ方式
     ・経由するリバースプロキシサーバが必要
     ・リバースプロキシにてURLを変換する
   ・ブラウザアクセスだけでなく、様々なアプリケーションにてアクセスを行う場合
    -> ポートフォワーディング方式
     ・踏み台となる(経由する)サーバが必要
     ・踏み台サーバにて静的なポート変換が行われる
    -> L2フォワーディング方式
     ・クライアント側は送信するパケットをHTTP(L7)でカプセル化して通信するため、専用のクライアントソフトが必要になる
     ・クライアントはアクセス先からダウンロードしたソフトをインストールする必要がある
     ・クライアントソフトに対応したクライアントが必要
・専用回線を使って通信する場合(クローズドで安全なネットワーク)
 -> キャリア回線を使う(docomo/KDDI/Softbank)
  -> IP-VPN(L3VPN)
   ・MPLS
   ・SRMPLS?/SRv6?
 -> 有料VPNサービスを使う(Arcstar Universal One)
  -> 広域イーサーネット(L2VPN)
   ・EVPN
   ・SRv6?

整理した内容をjson

{ 
  "インターネット経由で通信する場合(危険でオープンなネットワーク)" :  {
    "インターネットVPN" : {
      "対向先とプライベートネットワーク(L2)を設けた上で様々な作業を実施したい(SSH/HTTPS)" : {
        "IPsec-VPN" : {
          "ESP + トンネルモードをつかう" : {
             "事前準備":"両方のVPNにPSKを設定",
             "第一フェーズ": {
               "IKE SAに必要な情報を交換" : [
                    "共有鍵 Diffie-Hellmanで共有鍵を安全に交換",
                    "SAに使う暗号アルゴリズムを提案",
                    "SAに使うハッシュアルゴリズムを提案",
                    "PSKと相手のIPでハッシュ値作成" : { "お互いの証明が可能になる" : "暗号アルゴリズム、ハッシュアルゴリズムに対する返答を返す" }
                 ]
             }
             "第二フェーズ":{
               "相互でコネクションするためにSAを上り下り二つ作成する" : [ 
                    "SAのための暗号アルゴリズム決定",
                    "SAのためのハッシュアルゴリズム決定"
                 ]
          }}}}}
    "対向先にHTTP通信(80/443)のみで安全にアクセスしたい" : {
      "SSL-VPN" : {
        "ブラウザアクセスのみをする場合" : {
           "リバースプロキシ方式" : [ 
                "経由するリバースプロキシサーバが必要",
                "リバースプロキシにてURLを変換する"
             ]
           }
           "ブラウザアクセスだけでなく、様々なアプリケーションにてアクセスを行う場合" : {
             "ポートフォワーディング方式" : [
                 "踏み台となる(経由する)サーバが必要",
                 "踏み台サーバにて静的なポート変換が行われる"
               ]
             "L2フォワーディング方式" : [
                 "クライアント側は送信するパケットをHTTP(L7)でカプセル化して通信するため、専用のクライアントソフトが必要になる",
                 "クライアントはアクセス先からダウンロードしたソフトをインストールする必要がある",
                 "クライアントソフトに対応したクライアントが必要"
               ]
  "専用回線を使って通信する場合(クローズドで安全なネットワーク)" : {
    "キャリア回線を使う(docomo/KDDI/Softbank)" : {
      "IP-VPN(L3VPN)" : [
          "MPLS",
          "SRMPLS",
          "SRv6"
       ]
     }
  }
  "有料VPNサービスを使う(Arcstar Universal One)" : {
    "広域イーサーネット(L2VPN)" :  [
        "EVPN",
        "SRMPLS",
        "SRv6"
      ]
    }
  }
}

AMD-V/RVI でのVM起動ができなくなった問題の対処

経緯

Windows10にてNested VMを使用するためにVMware Workstation Player 16にて以下仮想化エンジン設定を行い起動した。

f:id:thelarklife1021:20210102133521p:plain

そうすると仮想 AMD-V/RVIはこのプラットフォームではサポートされていません。というエラーが出力され、VMが起動できなかった。以前にも起動したことがあるので、余計な設定が起因しているかと思い調べた。

f:id:thelarklife1021:20210102133630p:plain

原因と対処

原因は Windowsの機能 の Windows ハイパーバイザー プラットフォーム にチェックが入っていたからでした。 以下通りチェックを外して再起動を行なったところ、問題なく起動できました。

f:id:thelarklife1021:20210102134041p:plain

以上

BGPを復習して備える

はじめに

BGPについてなるべく簡単に全体像を整理して説明したいと思います。 ※一部書き切れていないところは後日随時更新します

BGP について復習

まずは簡単に概要を書きます。

BGP とは

  • BGPはネットワーク経路広告/経路交換を行うNWプロトコル
  • BGPはAS(Autonomous System)番号によって広告相手を選定する
  • ASにはグローバルAS番号とプライベートAS番号(64512~65534)が存在する
  • BGPはTCPで経路交換をしており、ポートは 179
  • BGPは同じAS通しで経路交換し合うiBGP(InternalBGP)と、異なるAS通しで経路交換し合うeBGP(ExternalBGP)の2種類が存在する

f:id:thelarklife1021:20210101223537p:plain:h400:w700

BGPが使われている場所

BGPは幅広く且つ、身近なネットワークに使われています。

  • インターネット
  • VPN(閉塞網)
  • DCネットワーク
  • etc...

BGP の立ち位置

f:id:thelarklife1021:20210101221936p:plain:h400:w700

BGPに必要な情報

下記は Peer UP するために必要最低限の情報になります。

項目名 説明
ASN BGPネットワークを形成する集合体の番号
Peer BGPルータに接続している別のBGPルータこと、又その情報
Router-id 普段には loopback に設定する ipv4 を登録する。ipv6で動かしてもipv4になる
Path Attribute必須項目 BGPではベストパス(最適経路)を処理する上で付加情報としてPath Attributeと呼ばれる情報を設定します

BGP 4種類のメッセージ

BGPには4種類のメッセージがあります

項目名 説明
OPEN ネイバールータと経路交換をするために必要な情報をやり取りする際のメッセージ。このメッセージによりネイバールータとセッションを確立させます(Establised)。
UPDATE ネイバールータとセッションが確立されれば、UPDATEメッセージにて経路交換をネイバールータとします。
KEEPALIVE ネイバールータとのセッションを維持するために送る生存確認メッセージ。holdtimeで維持時間を制御できます。
NOTIFICATION エラーや警告時に通知されるメッセージ。ネイバーがエラーなどでセッション確立できない時や、holdtime超過などの時に通知します。

BGPステータス

ステータス名 説明
Idle BGPの設定直後か、設定が不十分な場合はこの状態になります。
Connect TCP接続を待っている状態。IP接続性があればOPENメッセージを行なってOpen sentに状態繊維、疎通性がない場合一旦
Active Connect状態の時TCP接続が失敗した場合、つまりIP疎通性がない場合はこのステータスを維持し続けます。
Open Sent
Open Confirm
Established BGP Peerとのセッション確立が完了している状態。この状態のみUPDATEメッセージを送ってネイバーと経路交換が可能になる

AS4について

BGPのASは元々2byte(0~65535)でしたが、全世界を繋ぐインターネットを確立することになり、一時枯渇状態になりました。 そのため4byte(0~約43億)対応が進み、今では4byteされていないグローバルASは(私が知る限り)存在しません。 また2byteと4byteの互換性は以下の通り保たれています。

Peerケース 互換説明
4byte -> 2byteに転送される場合 2byteで経路広告されたPeerは一時的なASN(AS_TRANS)に置き換えられ、4byteASは一時的に
2byte -> 4byteに転送される場合 前半2byteを0で埋める

AS_TRANSとはRFC4893によって定められている 4byteなAS を 2byteなAS に置き換えるための仕組みのこと(後に詳細を説明します)

  • 置換後のASNは23456となります
  • 4byteASはAS4_PATHと呼ばれるPeerパケット空間に保存され、4byte対応のルータに渡す際にASNの値に戻さます
  • 4byte未対応ASが複数経由してしまうとAS_PATHの23456が重複して記載されてしまい、通常であればループ判定になるがAS_TRANSが働いている場合はループとみなされない

BGP Attribute

BGP Attributeについてよく仕事で使った内容をpick upします。 ※必須項目 のAttributeが設定されていないと malformed error になり、Peerがはれません。

TypeCode Path Attribute 必須 説明
1 ORIGIN BGPピア送信元ASを示す
2 AS_PATH BGPで交換される経路がどのノードを経由されているものかを示す
3 NEXT_HOP 交換される経路のネクストホップアドレスを示す
5 LOCAL_PREF - 1つのAS内部において、特定プレフィックスへの経路としてどれがもっとも望ましいかを選択するための優先度です。
6 ATOMIC_AGGREGATE - 交換する経路(プレフィックス)が集約されていることを示す
7 AGGREGATOR - ネイバーASにルート集約を実施したBGPルータのルータIDとAS番号を通知
8 COMMUNITY - 交換する経路をグループ化してポリシーを作り、利用用途などわかりやすくする
14 MP_REACH_NLRI - IPv6でのBGP設定できることを示す
15 MP_UNREACH_NLRI - IPv6でBGP設定はできないことを示す

BGP Capability

BGP CapabilityはBGP Peerを交換する際のオプション情報のことです。 OPENメッセージとUPDATEメッセージで送信できるCapabilityが異なり、16進数で表現されます。 Capabilityがネイバーと一致していればその設定を有効にします。 通常は各ネットワークOSの設定にてCodeを設定するのであまり意識しませんが、ネットワーク検証を自動化する場合はCapabilityCodeを直接設定するようにすると効率が良いです。

Capabilityには Capability CodeCapability LengthCapability Value といったパラメータがあります。

パラメータ名 説明
Capability Code Capabilityの種類を示します
Capability Length Capability Valueの長さを示します。基本的にIPv4の際は0x080x0cになります
Capability Value Capability Codeフィールドの値に従って解釈される可変長フィールド

Capability Codeは以下IANAで定義されていますが、よく使うものについて今回はpickupしたいと思います。
またCapabilityにも必須項目があり、設定がされていないと malformed error になり、Peerがはれません。

www.iana.org

Capability Code Description 説明
1 Multiprotocol Extensions for BGP-4 IPv6使用の際には必須項目になります。
2 Route Refresh Capability for BGP-4 Route Refresh。指定したBGPピアの経路をリセットする(※)
3 Outbound Route Filtering Capability
5 Extended Next Hop Encoding
6 BGP Extended Message
64 Graceful Restart Capability Graceful Restart。Peer再確立の際の影響を最小限にする
65 Support for 4-octet AS number capability AS4に対応しているルータでは設定
68 Multisession BGP Capability
69 ADD-PATH Capability
70 Enhanced Route Refresh Capability

※近年では膨大な経路数を扱うことも有り、Route Refreshではピアが断することはほとんどの場合ありません(多分)。

個人的に上記のAttributeだけを理解していれば仕事上一旦問題ないかと思います。

以上