hiroportation

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

AWS/GCP/Azure ネットワークについてまとめる

はじめに

  • 各社仮想ネットワークサービスを比較して気を付けるべきところを把握する(思い込みをしないようにする)
  • 仮想ネットワークの仕組みを オンプレの世界も併せてみていきたいと思います

そもそもクラウドの仮想ネットワーク実装について

主に以下の技術を用いてテナントごとに、複数のL2ネットワークを実装しているかと思われる。 そして各仮想ネットワーク情報は、SDNコントローラ上にテナントやその他識別子と紐づけられて格納されている(と思われる)

VLAN:L2空間上でL2仮想ネットワークを実装するためのネットワークプロトコル VXLAN:L3空間上でL2仮想ネットワークを実装するためのネットワークプロトコル EVPN:VPN上でL2仮想ネットワークを実装するためのネットワークプロトコル

パブリッククラウドについて

各社でネットワーク構成に差分が存在した。

www.alpha.co.jp

f:id:thelarklife1021:20201123180803p:plain

個人的な意見をまとめる

Amazon Virtual Private Cloud:

  • 各リージョン(VPC)、各サブネットでCIDRが決まるため、ゾーン又はリージョン間でインスタンスを移動させる際にはIP変更が必要になる
  • VPC Peeringの際には同一のCIDRが存在してはいけないため、設計には気を付ける
  • AWSはサブネットがAZで区切られているため、AZ内でのブロードキャストストームが発生しても、大きな問題にならない?
  • GCPとは違いVPCがリージョン毎に存在するため、マルチリージョンでサービスを構成する際には一手間かかる

-> さまざまな要素が細かく区分けされているため、まずは小規模から初めていくスタイル -> 拡張したい場合は別途サービスを使うことによりいくらでも規模拡大を可能にしている設計思想

Azure Virtual Network:

  • 各リージョン(VPC)でCIDRが決まるため、リージョン間でインスタンスを移動させる際にはIP変更が必要になる
  • VPC Peeringの際には同一のCIDRが存在してはいけないため、設計には気を付ける
  • GCP同様サブネットを跨げるためAZ毎に冗長構成にする際には中が必要
  • GCPとは違いVPCがリージョン毎に存在するため、マルチリージョンでサービスを構成する際には一手間かかる

-> 基本的にはAWSとサービス設計思想が同じに思える -> ただサブネットがゾーンを跨げるため、ゾーンを移動する際に同じIPを使用できる

Virtual Private Cloud:

  • リージョンとサブネットを指定するだけで複数のリージョンに跨ったサブネットが作成できる(思想が大分違う)
  • リージョンごとでルーティングさせるか、グローバルでルーティングさせるかを選べる
  • VPC Peering機能自体は存在し、異なるプロジェクト間をPrivateIPで繋げることが可能
  • サブネットを跨げるためゾーンごとに冗長している際にはブロードキャストストームを気を付ける必要がある?
  • グローバルなVPCになるため、IPが重複にならないような設計が必要

-> グローバル展開をとても意識したサービスになっている

セキュリティ

各社でVPC(VNET)やサブネットの範囲(定義)が異なるということは、 それに紐づいているセキュリティ機能についても差分が発生します。

f:id:thelarklife1021:20201130041438p:plain

個人的に名前の差分だけで、大きな差分は存在していないように思える。
GCPファイアウォールは管理範囲がグローバルになるだけであり、大きな差分とは言えない。

まとめ

  • AWS/Azureは小規模から初めていくスタイルのサービス
  • GCPはリージョンを跨いだ大規模展開を計画するのであれば、候補に入りやすいサービス
  • AWS/Azureはリージョン間Peeringを行う際にCIDRの重複に気を付ける必要がある

以上

データセンタ物理作業に挑むまで

はじめに

インフラ業務の一つであるデータセンタ作業についてまとめたいと思います

データセンタ作業とは?

回線サービスやクラウドサービスなどは、多くのサーバやネットワーク機器から構成されており、 新規にサービスを立ち上げる際や、サービス拡張、機器の故障対応などを行う際には、 各機器のラッキング〜ケーブリング〜初期設定といった物理作業が必要になります。

私の知る限りラッキングはベンダーが、 ケーブリングは別途配線業者や通建と呼ばれる人たちによって実施されますが、

物理作業についてはITインフラの業務範囲となります。

※ もちろん例外もかなり存在します ※ 故障対応とは話が別です

物理作業の目的

そもそも物理作業の目的は大抵の場合、遠隔で構築作業が進められるようにすることです。

  • 遠隔作業のIPやサブネット、デフォゲを設定しておく
  • 全てのネットワーク機器がやサーバが配線図通りになっていることを確認する
  • ネットワーク機器はコンソール経由で繋げられるようにすること
  • できればインターネット向けIPから全てのサーバやネットワークにアクセスできることが確認できればよい
  • ファームウェアバージョンアップ作業はなるべくやっておいた方が良い(後々やってつながらなくなるトラブルがたまにあります)

そのほかにも長くやっていると小技など発見できるかも

データセンタ物理作業に向けて用意するもの

データセンタ作業には、色々準備が必要です。 「データセンタ備え付けのものを使うから大丈夫」と思うかもしれませんが、 どこのデータセンタも数を用意しているわけではないため、なるべく 各作業者は私物を用意するべきだと私は考えます。 (もちろん、会社的にNGというところもあると思いますので注意は必要です)

そこで、データセンタ作業に必要なアイテムについてまとめてみました。

  • コンソールケーブル
    ネットワーク機器やストレージの初期設定に使います。 ひと昔はコンソールケーブルとシリアル変換ケーブルが必要でしたが、今では下記のように直接変換してくれる商品があるので、持ち物が減らせて便利です。 ネットワーク機器やストレージによって相性があると聞きますが、Cisco/Juniper/Brocade/NetAppで問題なく使えました。

f:id:thelarklife1021:20201123212115p:plain

Amazon | 【CISCO互換ケーブル】FTDI chipset USB RJ45 コンソールケーブル | Lontion Industrial | USBケーブル 通販

  • LANケーブル ストレート
    サーバのIPMIに接続して設定したり、疎通確認する時に使います。 構築設定対象が多い場合は小型スイッチと併せて複数のケーブルを用意した方が良いです。 私は 5m×1 、1m×5 を持ち込んでいました。

f:id:thelarklife1021:20201123213543p:plain

Amazon | BUFFALO ツメの折れないLANケーブル カテゴリ6a ストレート フラットタイプ ブラック BSLS6AFU10BK | バッファロー | LANケーブル 通販

  • スイッチ
    複数のサーバを設定する際にはこれを重宝します。 小型で便利、手頃なため、1つ持っておいても良いかと思います。

f:id:thelarklife1021:20201123214335p:plain

Amazon | TP-Link 5ポート スイッチングハブ 10/100/1000Mbps ギガビット 金属筺体 設定不要 ライフタイム保証 TL-SG105V6.0 | TP-LINK | スイッチングハブ 通販

  • 電源変換 データセンタで取れる電源は特殊な形になっているため、専用の変換がないと電源が取れなくて困ります。

f:id:thelarklife1021:20201123215529p:plain

Amazon | SANWA SUPPLY KB-DA302K 電源アダプタケーブル | サンワサプライ | パソコン・周辺機器 通販

  • 電源タップ データセンタでは大抵ノートパソコン、スマホ(連絡用)の充電を複数人で行いながら作業することになるため、限られた電源供給の環境下では意外に必要になりますので用意しましょう。

f:id:thelarklife1021:20201123220334p:plain

Amazon | エレコム 電源タップ 雷ガード 個別スイッチ ほこりシャッター付 6個口 2.5m ブラック T-K6A-2625BK | エレコム | 電源タップ 通販

  • 有線キーボード サーバの初期構築では直接有線キーボードを挿して操作する必要がありますので必ず用意しましょう。 ちなみに、有線/無線対応のものも使ったことがあるのですが、対応していないためか動きませんでした。

f:id:thelarklife1021:20201123222934p:plain

Amazon | サンワサプライ 有線USBスリムキーボード パンタグラフ テンキー無し 85キー日本語109A配列 ブラック SKB-SL18BKN | サンワサプライ | パソコン・周辺機器 通販

  • モバイルディスプレイ VGA(D-SUB)入力対応 ほとんどの場合はデータセンタに用意してあるものを使うと思いますが、 チームで使う場合、取り合いになりやすかったり、故障していたり、たまたまなかったり、様々なトラブルが考えられるため、 これも自ら用意するか、最低限作業前日にものがあるのか確認しておきましょう。 ただし、選択には注意が必要で、通常サーバの画面出力はD-SUBでこれを入力できるディスプレイにはかなり限りがあります。 私がお勧めしたいのが以下日本国産メーカのセンチュリさんのOnePlusです。 ケチってUSB-cやHDMI搭載のモバイルディスプレイを変換ケーブルでなんとか使おうとしても対応した変換ケーブルが存在しないため、使えません。 用途としてデータセンタ作業でしかほとんど使えず、結構高額なため、覚悟して買う必要があります。

f:id:thelarklife1021:20201123224347p:plain

Amazon | センチュリー 8インチHDMIマルチモニター 「8inch plus one HDMI ブラック」 (WEB簡易パッケージ仕様) LCD-8000VH2B_FP | センチュリー | モニタアクセサリ 通販

あと、作業用ノートPC、スマホは忘れずに。それに厚着で。中は基本寒いです。。。 では、データセンタ作業頑張ってください!!

以上

NAT冗長化 HSRP+NAT 構築 (2) ~Dynamic NAT Pool設定~

はじめに

前回 の続きです。今回はNAT Poolを設定して、ノード増設時の動作確認をします。
thelarklife1021.hatenablog.com

現状の問題


現状ですとubuntuノード数が増えた際に毎回ルータへの設定が必要になってしまいますので修正が必要です。

# 送信元:192.168.10.8 -> 送信元:10.0.0.201
# 送信元:192.168.10.9 -> 送信元:10.0.0.202
ip nat inside source static 192.168.10.8 10.0.0.201 redundancy HSRP1
ip nat inside source static 192.168.10.9 10.0.0.202 redundancy HSRP1

Dynamic NAT設定の追加

前回からin側のノードを増やしてnameを整理しました
f:id:thelarklife1021:20201005001254p:plain

Hostname Interface IP
ubuntu-1 bond0 192.168.10.8/24
ubuntu-2 bond0 192.168.10.9/24
ubuntu-3 bond0 192.168.10.10/24
ubuntu-4 bond0 192.168.10.11/24
HSRP-NAT VIP 192.168.10.1/24
HSRP-NAT1 giga0/0 192.168.10.2/24
HSRP-NAT1 giga0/1 10.0.0.254/24
HSRP-NAT2 giga0/0 192.168.10.3/24
HSRP-NAT2 giga0/1 10.0.0.254/24
ubuntu-11 enp0s2 10.0.0.8/24
ubuntu-12 enp0s2 10.0.0.8/24

DynamicNAT用プールは以下で設定します。
10.0.0.101 から順にNAT変換時に割り当てられます。

access-list 1 permit 192.168.10.0 0.0.0.255
ip nat pool POOL-1 10.0.0.101 10.0.0.150 netmask 255.255.255.0
ip nat inside source list 1 pool POOL-1

動作確認

staticの動作

staticで設定したものは優先してNAT変換で割り当てるため、プールは使いません。

root@ubuntu-1:~# ping 10.0.0.8
PING 10.0.0.8 (10.0.0.8) 56(84) bytes of data.
64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=18.5 ms
64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=7.70 ms

root@ubuntu-11:~# tcpdump -i enp0s2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s2, link-type EN10MB (Ethernet), capture size 262144 bytes
15:04:27.962302 IP 10.0.0.201 > ubuntu-11: ICMP echo request, id 1505, seq 37, length 64
15:04:27.962338 IP ubuntu-11 > 10.0.0.201: ICMP echo reply, id 1505, seq 37, length 64
root@ubuntu-2:~# ping 10.0.0.8
PING 10.0.0.8 (10.0.0.8) 56(84) bytes of data.
64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=17.7 ms
64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=5.24 ms

root@ubuntu-11:~# tcpdump -i enp0s2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s2, link-type EN10MB (Ethernet), capture size 262144 bytes
15:19:21.458398 IP 10.0.0.201 > ubuntu-11: ICMP echo request, id 1505, seq 929, length 64
15:19:21.458434 IP ubuntu-11 > 10.0.0.201: ICMP echo reply, id 1505, seq 929, length 64

dynamicの動作

NAT Poolから自動で割り当てられる

root@ubuntu-3:~$ ping 10.0.0.8
PING 10.0.0.8 (10.0.0.8) 56(84) bytes of data.
64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=4.64 ms
64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=5.92 ms

root@ubuntu-4:~# ping 10.0.0.8
PING 10.0.0.8 (10.0.0.8) 56(84) bytes of data.
64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=4.02 ms
64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=5.77 ms

root@ubuntu-11:~# tcpdump -i enp0s2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s2, link-type EN10MB (Ethernet), capture size 262144 bytes
15:29:03.571162 IP 10.0.0.102 > ubuntu-11: ICMP echo request, id 1265, seq 13, length 64
15:29:03.571200 IP ubuntu-11 > 10.0.0.102: ICMP echo reply, id 1265, seq 13, length 64
15:29:03.627462 IP 10.0.0.101 > ubuntu-11: ICMP echo request, id 1283, seq 9, length 64
15:29:03.627503 IP ubuntu-11 > 10.0.0.101: ICMP echo reply, id 1283, seq 9, length 64
15:29:04.574187 IP 10.0.0.102 > ubuntu-11: ICMP echo request, id 1265, seq 14, length 64
15:29:04.574252 IP ubuntu-11 > 10.0.0.102: ICMP echo reply, id 1265, seq 14, length 64
15:29:04.631414 IP 10.0.0.101 > ubuntu-11: ICMP echo request, id 1283, seq 10, length 64
15:29:04.631452 IP ubuntu-11 > 10.0.0.101: ICMP echo reply, id 1283, seq 10, length 64

VIP切り替え動作確認

root@ubuntu-11:~# ip link set dev enp0s2 down

*Oct  2 23:05:26.591: %TRACK-6-STATE: 10 ip sla 1 reachability Up -> Down
*Oct  2 23:05:28.628: %HSRP-5-STATECHANGE: GigabitEthernet0/0 Grp 5 state Active -> Speak

切り替えできていることを確認

hsrp-nat-2#show standby all
GigabitEthernet0/0 - Group 5
  State is Active
    23 state changes, last state change 00:02:16
  Virtual IP address is 192.168.10.1
  Active virtual MAC address is 0000.0c07.ac05
    Local virtual MAC address is 0000.0c07.ac05 (v1 default)
  Hello time 3 sec, hold time 10 sec
    Next hello sent in 2.112 secs
  Preemption enabled
  Active router is local
  Standby router is 192.168.10.2, priority 5 (expires in 7.936 sec)
  Priority 100 (default 100)
  Group name is "HSRP1" (cfgd)
hsrp-nat-2#

NAT変換されて疎通していることが確認できる

root@ubuntu-3:~$ ping 10.0.0.8
PING 10.0.0.8 (10.0.0.8) 56(84) bytes of data.
64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=5.41 ms
64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=5.38 ms

root@ubuntu-4:~# ping 10.0.0.8
PING 10.0.0.8 (10.0.0.8) 56(84) bytes of data.
64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=6.11 ms
64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=3.95 ms

root@ubuntu-12:~# tcpdump -i enp0s2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s2, link-type EN10MB (Ethernet), capture size 262144 bytes
15:56:27.681497 IP 10.0.0.101 > ubuntu-12: ICMP echo request, id 1171, seq 7, length 64
15:56:27.681531 IP ubuntu-12 > 10.0.0.101: ICMP echo reply, id 117
1, seq 7, length 64
15:56:28.399004 IP 10.0.0.102 > ubuntu-12: ICMP echo request, id 1272, seq 57, length 64
15:56:28.399039 IP ubuntu-12 > 10.0.0.102: ICMP echo reply, id 1272, seq 57, length 64
15:56:28.681394 IP 10.0.0.101 > ubuntu-12: ICMP echo request, id 1171, seq 8, length 64
15:56:28.681431 IP ubuntu-12 > 10.0.0.101: ICMP echo reply, id 1171, seq 8, length 64
15:56:28.955758 Loopback, skipCount 0, Reply, receipt number 0, data (40 octets)

次回

次回はubuntu11とubuntu-12をAWSに置き換えてVPN接続したいと思います。

以上

Ubuntu 18.04/20.04 netplanについてまとめた

はじめに

Ubuntu 18.04(正確には17.04)以降からネットワーク設定は /etc/network/interfaces は非推奨になり、/etc/network/{netplan名}.yaml が推奨になりました。

備忘録としてまとめました。

network例

事前にやっておきたいこと・知っておきたいこと

yamlを扱うためオートインデントの文字数は4文字に設定。2文字でもOKです。
デフォルトだと8文字なので辛い。。

cat << EOF > ~/.vimrc
set tabstop=4
set shiftwidth=4
EOF

以下ファイルはデフォルトで入っているものなので、削除するかリネームしておきましょう。

/etc/netplan/50-cloud-init.yaml

yamlファイルの設定有効化は以下で実施。

sudo netplan apply

※上記で有効化しても前のルーティング設定が消えないことがあるため、ノード再起動するか、プロセス再起動する。

一般的な例

/etc/netplan/network.yaml (macaddressは適宜変更)

network:
    version: 2
    ethernets:
        enp0s2:
            addresses: [192.168.10.8/24,192.168.10.9/24,192.168.10.10/24]
            gateway4: 192.168.10.1
            dhcp4: false
            dhcp6: false
            routes:
              - to: 10.0.0.0/24
                via: 192.168.10.8
            match:
                macaddress: 52:54:00:1b:29:d0
        enp0s3:
            addresses: [192.168.20.8/24]
            dhcp4: false
            routes:
              - to: 20.0.0.0/24
                via: 192.168.20.8
            match:
                macaddress: 52:54:00:04:7e:a0

addressesは複数指定可能
gateway4 を指定するとデフォルトGWになるようです
matchを指定するとmacaddressとinterfaceが紐づけられます


bondingの例

/etc/netplan/network.yaml

network:
    version: 2
    ethernets:
        switchports:
            match: 
                name: enp0s[23]
    bonds:
        bond0:
            dhcp4: no
            dhcp6: no
            interfaces: [switchports]
            parameters:
                mode: balance-rr
                mii-monitor-interval: 1
            addresses: [192.168.10.8/24]
            gateway4: 192.168.10.1

switchports の match:は正規表現も可能なため、あらかじめ以下のように設定しておけば、bondingするportが増えてもbondingに設定は不必要になる。

           match: 
                name: enp0s[*]


実行結果

2: enp0s2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP group default qlen 1000
    link/ether fe:a6:9e:17:f8:fc brd ff:ff:ff:ff:ff:ff
3: enp0s3: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP group default qlen 1000
    link/ether fe:a6:9e:17:f8:fc brd ff:ff:ff:ff:ff:ff
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether fe:a6:9e:17:f8:fc brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.8/24 brd 192.168.10.255 scope global bond0
       valid_lft forever preferred_lft forever
    inet6 fe80::fca6:9eff:fe17:f8fc/64 scope link 
       valid_lft forever preferred_lft forever

NAT冗長化 HSRP+NAT 構築 (1)

はじめに

CMLにてNATのHSRPによる冗長化を試して見る。意外とハマる内容でした。

NAT を冗長化させるパターンについて

Cisco IOSにてNATを冗長化させるにはいくつかパターンがあげられるが私が調べた限り主に以下が考えられた。

■HSRP+NATを使用したパターン

  • 単純にNATとHSRPを使っているため設定が割とシンプルになる
  • NATテーブル情報が連携されない

■NAT Box to Box High Availabitliy を使ったパターン

  • NATテーブル情報が連携される
  • 新しい設定方式のため覚えることがある

Stateful NATという機能もあったようだが現在非推奨?なのか最新のIOSでは使えない

IP アドレッシング:NAT コンフィギュレーション ガイド、Cisco IOS XE Release 3S(ASR 1000) - ハイ アベイラビリティ用 NAT の設定 [Cisco ASR 1000 シリーズ アグリゲーション サービス ルータ] - Cisco


今回は HSRP+NATを使用したパターン を試したいと思う。

HSRP + NAT の設定

Hostname Interface IP
ubuntu-0 bond0 192.168.10.8/24
ubuntu-1 bond0 192.168.10.9/24
HSRP-NAT VIP 192.168.10.1/24
HSRP-NAT1 giga0/0 192.168.10.2/24
HSRP-NAT1 giga0/1 10.0.0.254/24
HSRP-NAT2 giga0/0 192.168.10.3/24
HSRP-NAT2 giga0/1 10.0.0.254/24
ubuntu-2 enp0s2 10.0.0.8/24
ubuntu-3 enp0s2 10.0.0.8/24

ubuntu-2とubuntu-3には同じIPを設定(後でAWSにつなぐのでこれでOK)
※iosvl2側がin、ubuntu2,3側がout

構成図
f:id:thelarklife1021:20201002015749p:plain

Ubuntu の設定

ubuntu-0の設定

/etc/netplan/network.yaml (macaddressは適宜変更)

network:
    version: 2
    ethernets:
        switchports:
            match:
                name: enp0s[23]
    bonds:
        bond0:
            dhcp4: no
            dhcp6: no
            interfaces: [switchports]
            parameters:
                mode: balance-rr
                mii-monitor-interval: 1
            addresses: [192.168.10.8/24]
            gateway4: 192.168.10.1
# 初期設定ファイルの無効化
mv /etc/netplan/50-cloud-init.yaml{,.disable}

sudo netplan apply

ubuntu-1の設定

/etc/netplan/network.yaml (macaddressは適宜変更)

network:
    version: 2
    ethernets:
        switchports:
            match:
                name: enp0s[23]
    bonds:
        bond0:
            dhcp4: no
            dhcp6: no
            interfaces: [switchports]
            parameters:
                mode: balance-rr
                mii-monitor-interval: 1
            addresses: [192.168.10.9/24]
            gateway4: 192.168.10.1
# 初期設定ファイルの無効化
mv /etc/netplan/50-cloud-init.yaml{,.disable}

sudo netplan apply

ubuntu-2の設定

/etc/netplan/network.yaml (macaddressは適宜変更)

network:
    version: 2
    ethernets:
        enp0s2:
            addresses: [10.0.0.8/24]
            dhcp4: false
            routes:
                - to: 192.168.10.0/24
                  via: 10.0.0.8
            match:
                macaddress: 52:54:00:13:83:f2
# 初期設定ファイルの無効化
mv /etc/netplan/50-cloud-init.yaml{,.disable}

sudo netplan apply

ubuntu-3の設定

/etc/netplan/network.yaml (macaddressは適宜変更)

network:
    version: 2
    ethernets:
        enp0s2:
            addresses: [10.0.0.8/24]
            dhcp4: false
            routes:
                - to: 192.168.10.0/24
                  via: 10.0.0.8
            match:
                macaddress: 52:54:00:13:83:f2
# 初期設定ファイルの無効化
mv /etc/netplan/50-cloud-init.yaml{,.disable}

sudo netplan apply

HSRP-NAT 設定

HSRP-NAT-1の Interface 設定

interface GigabitEthernet0/0
 description to_sw1
 ip address 192.168.10.2 255.255.255.0
 ip nat inside
 ip virtual-reassembly in
 standby 5 ip 192.168.10.1
 standby 5 priority 105
 standby 5 preempt
 standby 5 name HSRP1
 standby 5 track 10 decrement 100
 duplex auto
 speed auto
 media-type rj45
!
interface GigabitEthernet0/1
 description to_ubuntu-2
 ip address 10.0.0.254 255.255.255.0
 ip nat outside
 ip virtual-reassembly in
 duplex auto
 speed auto
 media-type rj45

HSRP-NAT-2の interface 設定

interface GigabitEthernet0/0
 description to_sw2
 ip address 192.168.10.3 255.255.255.0
 ip nat inside
 ip virtual-reassembly in
 standby 5 ip 192.168.10.1
 standby 5 preempt
 standby 5 name HSRP1
 duplex auto
 speed auto
 media-type rj45
!
interface GigabitEthernet0/1
 description to_ubuntu-3
 ip address 10.0.0.254 255.255.255.0
 ip nat outside
 ip virtual-reassembly in
 duplex auto
 speed auto
 media-type rj45
!

※ちょっとハマったのが standby 5 preempt を入れないとtrackingでActiveになってくれないようです

HSRP-NAT-1 の オブジェクトトラッキング

以下で GigabitEthernet0/1 から 10.0.0.8の疎通監視をします。
疎通できなくなった場合HSRPに int giga 0/0 の standby 5 track 10 decrement 100 をもとにpriorityを100下げます。
それによりVIPの切り替えを行います。

ip sla 1
 icmp-echo 10.0.0.8 source-interface GigabitEthernet0/1
 frequency 10
ip sla schedule 1 life forever start-time now

track 10 ip sla 1 reachability

HSRP-NAT-1,2 の NAT設定

HSRPで冗長させる場合、redundancyオプションが必要。

ip nat inside source static 192.168.10.8 10.0.0.201 redundancy HSRP1
ip nat inside source static 192.168.10.9 10.0.0.202 redundancy HSRP1

動作確認

ubuntu-0 -> ubuntu-2 に疎通

Primaryが現在105でVIP:192.168.10.1が設定されていることがわかる

hsrp-nat-1#show standby all
GigabitEthernet0/0 - Group 5
  State is Active
    7 state changes, last state change 01:53:51
  Virtual IP address is 192.168.10.1
  Active virtual MAC address is 0000.0c07.ac05
    Local virtual MAC address is 0000.0c07.ac05 (v1 default)
  Hello time 3 sec, hold time 10 sec
    Next hello sent in 1.088 secs
  Preemption enabled
  Active router is local
  Standby router is 192.168.10.3, priority 100 (expires in 10.032 sec)
  Priority 105 (configured 105)
    Track object 10 state Up decrement 100
  Group name is "HSRP1" (cfgd)
hsrp-nat-1#

アクティブルータ(HSRP-NAT-1) を経由し、NAT変換(送信元:192.168.10.8-> 10.0.0.201)されて疎通できていることがわかる

root@ubuntu-0:~# ping 10.0.0.8
PING 10.0.0.8 (10.0.0.8) 56(84) bytes of data.
64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=3.11 ms
64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=4.13 ms
64 bytes from 10.0.0.8: icmp_seq=3 ttl=63 time=2.85 ms
root@ubuntu-2:~# tcpdump -i enp0s2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s2, link-type EN10MB (Ethernet), capture size 262144 bytes
13:44:25.346572 IP 10.0.0.201 > ubuntu-2: ICMP echo request, id 13543, seq 14, length 64
13:44:25.346607 IP ubuntu-2 > 10.0.0.201: ICMP echo reply, id 13543, seq 14, length 64
13:44:25.663103 ARP, Request who-has 10.0.0.254 tell ubuntu-2, length 28
13:44:25.666529 ARP, Reply 10.0.0.254 is-at 52:54:00:0e:88:30 (oui Unknown), length 46
13:44:26.349612 IP 10.0.0.201 > ubuntu-2: ICMP echo request, id 13543, seq 15, length 64
13:44:26.349648 IP ubuntu-2 > 10.0.0.201: ICMP echo reply, id 13543, seq 15, length 64
13:44:27.350994 IP 10.0.0.201 > ubuntu-2: ICMP echo request, id 13543, seq 16, length 64
13:44:27.351031 IP ubuntu-2 > 10.0.0.201: ICMP echo reply, id 13543, seq 16, length 64
8 packets captured
8 packets received by filter
0 packets dropped by kernel
root@ubuntu-2:~# 

ubuntu-2のインターフェースをdownさせてVIPを移動させる

root@ubuntu-2:~# iip link set dev enp0s2 down
root@ubuntu-2:~# ip addr show dev enp0s2
2: enp0s2: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 52:54:00:13:83:f2 brd ff:ff:ff:ff:ff:ff
root@ubuntu-2:~# 


下記の通り、trackで設定しているstateがdownしたのがわかる

hsrp-nat-1#
*Oct  2 13:45:58.250: %TRACK-6-STATE: 10 ip sla 1 reachability Up -> Down
*Oct  2 14:58:29.369: %HSRP-5-STATECHANGE: GigabitEthernet0/0 Grp 5 state Active -> Speak
*Oct  2 14:58:40.153: %HSRP-5-STATECHANGE: GigabitEthernet0/0 Grp 5 state Speak -> Standby

下記の通り、Stateは Standby になりPriorityは 5 (=105-100)、Trackのstateがdownになっているのがわかる

hsrp-nat-1# show stand all
GigabitEthernet0/0 - Group 5
  State is Standby
    12 state changes, last state change 00:00:27
  Virtual IP address is 192.168.10.1
  Active virtual MAC address is 0000.0c07.ac05
    Local virtual MAC address is 0000.0c07.ac05 (v1 default)
  Hello time 3 sec, hold time 10 sec
    Next hello sent in 2.304 secs
  Preemption enabled
  Active router is 192.168.10.3, priority 100 (expires in 8.176 sec)
  Standby router is local
  Priority 5 (configured 105)
    Track object 10 state Down decrement 100
  Group name is "HSRP1" (cfgd)
hsrp-nat-1(config-if)#


下記の通り、StateがActiveになっている(=VIPが移っている)ことがわかる

hsrp-nat-2#show stand all
GigabitEthernet0/0 - Group 5
  State is Active
    5 state changes, last state change 00:01:00
  Virtual IP address is 192.168.10.1
  Active virtual MAC address is 0000.0c07.ac05
    Local virtual MAC address is 0000.0c07.ac05 (v1 default)
  Hello time 3 sec, hold time 10 sec
    Next hello sent in 2.176 secs
  Preemption disabled
  Active router is local
  Standby router is unknown
  Priority 100 (default 100)
  Group name is "HSRP1" (cfgd)
hsrp-nat-2#


pingが引き続き疎通が通る

root@ubuntu-0:~# ping 10.0.0.8
PING 10.0.0.8 (10.0.0.8) 56(84) bytes of data.
64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=2.94 ms
64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=3.63 ms
64 bytes from 10.0.0.8: icmp_seq=3 ttl=63 time=3.89 ms
64 bytes from 10.0.0.8: icmp_seq=4 ttl=63 time=3.65 ms

--- 10.0.0.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms^C
rtt min/avg/max/mdev = 2.943/3.529/3.893/0.361 ms
root@ubuntu-0:~# 

ubuntu-3のtcpdumpを確認するとNAT変換され、届いていることがわかる

root@ubuntu-3:~# tcpdump -i enp0s2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s2, link-type EN10MB (Ethernet), capture size 262144 bytes
17:43:27.194055 Loopback, skipCount 0, Reply, receipt number 0, data (40 octets)
17:43:27.295920 IP 10.0.0.201 > ubuntu-3: ICMP echo request, id 13566, seq 1, length 64
17:43:27.295976 IP ubuntu-3 > 10.0.0.201: ICMP echo reply, id 13566, seq 1, length 64
17:43:28.296268 IP 10.0.0.201 > ubuntu-3: ICMP echo request, id 13566, seq 2, length 64
17:43:28.296304 IP ubuntu-3 > 10.0.0.201: ICMP echo reply, id 13566, seq 2, length 64
17:43:29.298791 IP 10.0.0.201 > ubuntu-3: ICMP echo request, id 13566, seq 3, length 64
17:43:29.298828 IP ubuntu-3 > 10.0.0.201: ICMP echo reply, id 13566, seq 3, length 64
^C
7 packets captured
7 packets received by filter
0 packets dropped by kernel
root@ubuntu-3:~# 

ubuntu-2のインターフェースをupさせ、復旧させる

インターフェースをupさせる

root@ubuntu-2:~# ip link set dev enp0s2 up
hsrp-nat-1#
*Oct  2 14:49:33.473: %TRACK-6-STATE: 10 ip sla 1 reachability Down -> Up
*Oct  2 14:49:35.441: %HSRP-5-STATECHANGE: GigabitEthernet0/0 Grp 5 state Standby -> Active
hsrp-nat-1#show standby all
GigabitEthernet0/0 - Group 5
  State is Active
    13 state changes, last state change 00:06:47
  Virtual IP address is 192.168.10.1
  Active virtual MAC address is 0000.0c07.ac05
    Local virtual MAC address is 0000.0c07.ac05 (v1 default)
  Hello time 3 sec, hold time 10 sec
    Next hello sent in 1.392 secs
  Preemption enabled
  Active router is local
  Standby router is 192.168.10.3, priority 100 (expires in 9.840 sec)
  Priority 105 (configured 105)
    Track object 10 state Up decrement 100
  Group name is "HSRP1" (cfgd)
hsrp-nat-1#
root@ubuntu-0:~# ping 10.0.0.8
PING 10.0.0.8 (10.0.0.8) 56(84) bytes of data.
64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=4.55 ms
64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=2.59 ms
64 bytes from 10.0.0.8: icmp_seq=3 ttl=63 time=4.53 ms

--- 10.0.0.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 2.591/3.896/4.559/0.924 ms
root@ubuntu-0:~# 

次回以降

  • 今回のHSRP+NATにNAT Poolを設定
  • AWSVPN接続して動作確認
  • Box to Box のパターンを試す

Cisco CML (VIRL2.0) を触ってみて思ったこと

はじめに

以前Cisco関連ラボとして VIRL1.6 を使っていましたが、Openstackを利用していることもあり、動作が重いのと、バグが多い印象でした。 最近 CML (VIRL2.0)がリリースされたみたので使ってみたのですが、良くなった点もあれば悪くなった点もありました。

メリット(3) デメリット(1)

外部接続がとても簡単になったよ (Pros)

VIRL1.6では外部接続のためにホストと仮想マシンのIPを合わせたり、フローティング払い出したり、その他(flatとか)色々理解しないと外部接続できませんでした。 AWSなどのクラウドVPN接続がとても簡単に検証できるようになりました。 f:id:thelarklife1021:20200922014046p:plain

Segment Routing over IPv6 (SRv6)が使えるぜ!! (Pros)

XR 9k ver 6.6 が使えるため、SRv6を検証できます!今まで個人でSRv6を触るには kernel iproute2 か VPP でしかできませんでしたが、ようやくルータで動作を試せます! f:id:thelarklife1021:20200923022008p:plain その他 TI-LFA など複雑な動作も確認できますので、理解を深めるチャンスです! ちなみに XR 9kには一台に対しメモリ(RAM) 8GBほど(デフォルトだと10GB・・・)必要になるため、メモリ盛り盛りPCを用意しておく必要があります

www.cisco.com

ちなみに NX-OS 9kが Ver9.23(9/1時点)なため、あともう少し待って Ver9.3 になれば SRv6-EVPN あたりも触れるかも f:id:thelarklife1021:20200922023054p:plain

動作が軽くなったかな・・・ (Pros)

Openstackを廃止したためか動作が軽くなったかも(体感)。また、以前はエミュレートまでに色々な設定がだったが簡素化されてるので助かる。

  • 操作性(ユーザインターフェース)が微妙に悪く感じられた (Cons)

スイッチの配置にドラックするが何度かやり直さないとダメな時がある。スイッチ間の接続時も同様。 スイッチやオブジェクトを消す際はWIPEボタンでスイッチの設定を初期化?してやらないといけないみたいでそれが意外と手間(面倒)に感じる。VIRL1.6の時みたいに消したいスイッチをクリックしてbackspaceさせて欲しい。

結論:CMLはNW学習者にとてもオススメしたい!!

正直良い意味で絶望してしまった。 GNS3とかでケチらず、オークションで実機を買ったりせず、まずこれに投資するべき!!だと思いました・・(以下はその理由)

  • CIscoのネットワークを学ぶには様々な方法がありますが、どれもイメージの取得困難や、環境構築の問題で、特に初学者には大きな壁になってました。CMLなら 約2万円/年 でライセンス手に入れてVMにインポートしてしまえば超簡単に環境を構築できます。

  • 取得困難なNXOS9kやXR9kが手軽に使えるだけで十分にライセンスを買う価値があると思ってます。

  • 個人ライセンスだと20ノードまでしか?一度に検証できませんが十分だと思います。CCIE学習用にもいけるかな?

本当に便利な世の中になったのだと感じました。

以上

Cisco VIRL (Virtual Internet Routing Lab) を使う

はじめに

Cisco 関連ルータやスイッチ、AWSといったクラウドとの連携を検証したかったため VIRL を取り入れてみました。

1.導入

主にVIRLとVMware Player またはFusionが必要になります。 VIRLは$199ですが、使用できるルータは 2020/09/02時点 で以下になりますので、とてもリーズナブルかと思います。 IOSv and IOSvL2 NX-OSv and NX-OS 9000v IOS XRv and IOS XRv 9000 IOS XE (CSR1000v) ASAv

購入

ここから購入してください Cisco Modeling Labs - Personal

購入完了したらメールが届きますので、そこから My Account ログインして ダウンロードする ova を選びます。

f:id:thelarklife1021:20200902220721p:plain

VMware 上で立ち上げる場合は「VIRL 1.6.67 VMWare workstation image.」を選択(今回はこちらで導入します) ※容量5GB超えているので十分な環境でダウンロードしてください

立ち上げ

今回は VMware Fusion でインポートします。(Virtualbox の場合、NestedVMの機能が怪しいので個人的にあまりお薦めできない) デフォルト設定で以下リソースが必要 CPU:4Core RAM:8GB

f:id:thelarklife1021:20200903002237p:plain

手順に5-10mほど時間がかかるとのこと f:id:thelarklife1021:20200903002548p:plain

簡単なヘルプ f:id:thelarklife1021:20200903002717p:plain

VMホストの設定ですが、特にこだわりがなければデフォルトでNext f:id:thelarklife1021:20200903002914p:plain

VMのメインで使うインターフェースですがこちらもデフォルトでNext f:id:thelarklife1021:20200903003836p:plain

個人で使う場合は、StaticでIPを定義する必要はないのでこのままNext f:id:thelarklife1021:20200903004054p:plain

IPv6を使う必要がある場合は下を選びますが、特にこだわりがなければ上でNext f:id:thelarklife1021:20200903004304p:plain

アカウント設定ですが、そもままでNext (VIRLってOpenstack使っているのか) f:id:thelarklife1021:20200903004524p:plain

クラスタにする必要はないのでそのままNext f:id:thelarklife1021:20200903005428p:plain

最後に設定確認して f:id:thelarklife1021:20200903005620p:plain

しばらく待つ・・(5分くらいかな)

再起動が後login プロンプトがでます。 コンソールのURLが表示されるのでブラウザでアクセス ID/PWも出てますが次のステップの初回ログインで使います f:id:thelarklife1021:20200903010234p:plain

uwmadmin / password でログイン f:id:thelarklife1021:20200903010635p:plain

ログインするとダッシュボードが表示されます f:id:thelarklife1021:20200903011017p:plain

License を入れます VIRL Server > Salt Configuration and Status > Reset keys and ID でアクセスします (私の環境だと Salt Configuration and Status のところへの画面遷移に時間がかかった)

以下 Reset salt settings 画面にて以下を実施 1.Load config fileをクリックして、事前にdownloadしておいたライセンスファイルを選択する 2.List of Cisco salt mastersからAPを選択。Master sign public keyはeft.pubを選択する。その後、resetボタンを押す f:id:thelarklife1021:20200903013805p:plain

以下の通り Current status が正常に更新されればOKです f:id:thelarklife1021:20200903014746p:plain

VM Maestro の Install

Maestro を入れてNW検証をはじめます。 VIRL Server > Download からDownload して起動します。 f:id:thelarklife1021:20200903015647p:plain

以下のような画面が出るので、VIRLのIP addressを入力し、guest部分はそのままにする。(localhostのままだとエラーになる) f:id:thelarklife1021:20200903022622p:plain

VIRLの検証環境の立ち上げはこれで完了です。お疲れ様です! f:id:thelarklife1021:20200903021832p:plain

次回からVIRLを使った様々なネットワーク検証をしていきます。

以上