ネットワーク・クラウド

2021/08/01

CISOは経営がわかる情報セキュリティ最高責任者である

CISOハンドブック ――業務執行のための情報セキュリティ実践ガイドを読んで、CISOは経営がわかる情報セキュリティ最高責任者であると知った。
ラフなメモ。

CISOハンドブック ――業務執行のための情報セキュリティ実践ガイドは、セキュリティの本というよりも、IT技術者が経営層になった時、こういうふうに考えたり行動していくべきで、こういう考え方を持つべき、という点が参考になった。
既存の経営陣に情報セキュリティの重要性を認識してもらうよりも、IT技術者自身が経営の知識を持つ方が手っ取り早いし、その方が実際はうまくいくと思う。

リスク管理は、予想される潜在リスクへの対策だけでなく、想定よりも状況がうまく行った時に備える場合もある。
たとえば、ベンチャー企業が社員20名から200名へ急激に成長した時、事業拡大の速度が速い分、いろいろな歪が出てくる。
上手く行っていたチームも、業務量が増えてメンバーが増えると、チームが回らなくなる。
ソフトウェア開発では人員増はうまくいかないという先入観がありすぎて、人員増を極力抑えるのは失敗しやすい。

事業が予測よりもうまくいくと、問題が少しずつ表面化する。
そこで、こんな対策がある。
業務をアウトソースして、固定費(人件費)費を変動費化する。
商流を変えて、固定費(人件費)を販管費にする。
業務をシステム化して効率化することで、固定費(人件費)を抑制する。

組織的には、事業や業務の観点で組織構造を変えて、チームを分けたり増やしたりする。
チームリーダーを社内で育成する。
それでも不足するなら、リーダーを外部から採用する。

つまり、良い状況に変わることも一つのリスクとみなして、リスク対策は考えるべき。

| | コメント (0)

2021/07/18

IPアドレッシングの計算方法

IPアドレスの計算方法について、理解したことをメモ。
自分のためのラフなメモ。

【参考】

③サブネットマスクとプレフィックス長の2つを覚える ? ランスルネット

④サブネット化したときのホストアドレスと2進数 ? ランスルネット

IPアドレス サブネットマスク・プレフィックス長 早見表 ? ランスルネット

①サブネット化 のメリットの理解 ? ランスルネット

IPアドレッシングを基本から復習しましょ! その16 | ネットワークのおべんきょしませんか?

社内のネットワーク設計でもオンプレ環境でもAWSのVPCのサブネット分割でも、IPアドレスやネットワークアドレス、CIDERの計算は必要。
IPアドレスを計算するには、サブネット早見表を覚えることと同じ。

【サブネットマスク早見表】
1の個数 ビットパターン SubnetMask 【区切り位=NWアドレスの倍数】 サブネット個数
1 10000000 128 128 2
2 11000000 192 64 4
3 11100000 224 32 8
4 11110000 240 16 16
5 11111000 248 8 32
6 11111100 252 4 64
7 11111110 254 2 128
8 11111111 255 1 256

サブネットマスク早見表の覚え方はコツがある。
1bitの個数=8-0bitの個数 ⇒255-2^(0bitの個数)=Subnetmask から計算すればいい。

例:Subnetmask=255.255.255.240 ⇒255-240=15=2^4-1 ⇒8-4=4 ⇒/24+/4=/28
例:/27=24+3 ⇒1bitが3個 ⇒0bitが5個 ⇒255-31=224 ⇒Subnetmask=255.255.255.224

たとえば下記の例題みたいな感じ。

【例題】
192.168.1.0のネットワークアドレスを255.255.255.192でサブネッティングすると、IPアドレスの範囲は何か?

255-192=63 ⇒63=2^6-1 ⇒NWアドレス=64の倍数
サブネットのネットワークアドレスは、第4クオテットが64の倍数になる
サブネットは4個出来上がる
192.168.1.0
192.168.1.64
192.168.1.128
192.168.1.192
⇒ ブロードキャストアドレスは、ネットワークアドレス-1になる。
192.168.1.63
192.168.1.127
192.168.1.191
192.168.1.255
⇒ IPアドレスの範囲は、ネットワークアドレス+1~ブロードキャストアドレス-1になる。
192.168.1.1 ~ 192.168.1.62
192.168.1.65 ~ 192.168.1.126
192.168.1.129 ~ 192.168.1.190
192.168.1.193 ~ 192.168.1.254

【例題】
172.16.0.0のネットワークアドレスを/19のサブネットマスクでサブネッティングしたとき、サブネットのネットワークアドレスは?
IPアドレスの範囲は?

/19=/16+/3
⇒8-3=5
⇒NWアドレス=2^5=32の倍数
⇒ ネットワークアドレスは、第3クオテットが0も含めた32の倍数になる
サブネットは8個できあがる
172.16.0.0
172.16.32.0
172.16.64.0
172.16.96.0
172.16.128.0
172.16.160.0
172.16.192.0
172.16.224.0
⇒ 最初のサブネット172.16.0.0のブロードキャストアドレスは、172.16.32.0-1 より、
172.16.32.0 - 0.0.0.1 = 172.16.31.255
⇒ 最初のサブネットのIPアドレスは、ネットワークアドレス+1~ブロードキャストアドレス-1 より、
172.16.0.1~172.16.31.254
他も同様。

「インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門」の通り、IPアドレッシングは要件さえケマれば、計算方法は決まっているので、テトリスみたいに決まる。

インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門はインフラエンジニア向けの良本だ: プログラマの思索

Ciscoコマンドで理解したこともリンクしておく。
Linuxコマンドと別物で全く異なるので、理解に時間がかかった。

アクセスリストの設定パターン: プログラマの思索

NATの設定パターン: プログラマの思索

スタティックルートの設定パターン: プログラマの思索

Ciscoのshowコマンド一覧: プログラマの思索

| | コメント (0)

プログラマが「何をやっているか分からない」「何が分からないか分からない」状態から脱出する記事がとても良い

プログラマが「何をやっているか分からない」「何が分からないか分からない」状態から脱出する記事がとても良いのでメモ。

【参考】
(1) 出来るプログラマーやエンジニアの方でも「何をやっているか分からない」「何が分からないか分からない」状態に陥りますか?その時は、どの様にして対処・解決しますか?に対するYuki Sonodaさんの回答 - Quora

RubyコミッタのYuki Yugui Sonodaさん (@yugui)もこんな問題意識を持たれていたらしい。

(引用開始)
私は出来るエンジニアじゃないせいか、何かちょっと経験の浅い分野のことをやると「何をやっているか分からない」「何が分からないか分からない」状態に陥ります。
それで、Stack Overflowで調べたコード片をコピペして動かすことがあります。
最近はGradleのビルドスクリプトの書き方が本当に何も分からなくてStack Overflowに世話になりました。
(引用終了)

Yuki Yugui Sonodaさん (@yugui)の回答なので、本当によく考えられている。
こんな手順を踏む。

チュートリアルやGetting Startedのような案内文書があれば、写経して動かしてみる
→先ほど体験したつまずきや未知の用語を手がかりとしながら概念を理解する
→良い実例を読むとともに利用できる資源を網羅する
→実際にやってみて経験を積む

僕も、Pythonのデータ分析、機械学習&深層学習、ソフトウェア統計分析、Ciscoネットワークなどを初めて勉強した時、同じような手順を踏んでいたのを思い出した。

上記の手順をもう少し深堀りして考えてみると、野中郁次郎先生のSECIモデルを連想させる。
あるいは、コルブの経験学習理論を連想させる。
この辺りも考えてみたい。

SECIモデルは知識の再利用モデル、または、実践知を生み出すモデルだ: プログラマの思索

「経験学習」とは?学習プロセスや促進させるためのポイントなどご紹介 | BizHint(ビズヒント)- クラウド活用と生産性向上の専門サイト

【公開】XP祭り関西2014講演資料「KPTによるプロセス改善~あなたはPDCAを回したことがありますか?」 #xpjugkansai: プログラマの思索

| | コメント (0)

2021/07/04

CCNAの感想

CCNA(Cisco Certified Network Associate)を取得したので感想をラフなメモ。
ネットワーク初心者のメモなので後で直す。

【参考】
CCNAイージス:CCNA(200-301)Web教科書

記憶術で覚えるTCP/IP⑦アプリケーション層プロトコル ? ランスルネット

シスコIOSコマンド一覧 | IT SKILL MAP

Ciscoルータ/Catalystコマンド一覧 - ネットワーク入門サイト

Cisco Packet Tracer でネットワーク構築実践 #1 | matsublog

GNS3の設定方法、操作方法の解説

Cisco IOS images for Dynamips - GNS3

L2 Switching Simulation - GNS3

【1】Ciscoコマンドをどこまで身につけられるかが鍵

ERP導入や業務システム開発、RedmineやJenkinsなどの開発環境構築の経験はあるから、CiscoコマンドもLinuxコマンドと似たようなものだろう、と思っていたが間違っていた。
ルータやスイッチへ投入するCiscoコマンドは、データリンク層、ネットワーク層のプロトコルを制御するために、数多くのコマンドがあり、オプションがある。

スイッチなら、VLAN、VTP、DTP、STP、RSTP、PVST、PortSecurity、etherChannel、音声VLAN、CDPなど。
ルータなら、IPアドレッシング、カプセル化、OSPF、RIP、FIGRP、スタティックルート、フローティングスタティックルート、デフォルトルート、ネットワークルート、HSRP、ACL、NAT、DHCP、ARP、ICMP、NTPなど。
他にも、AAA、Radius、SNMP、Syslog、DNS、SDN、SD-Access、無線LAN、IPv6、QoSなど。

Ciscoルータ/Catalystコマンド一覧のリンク: プログラマの思索

Ciscoのshowコマンド一覧: プログラマの思索

スタティックルートの設定パターン: プログラマの思索

アクセスリストの設定パターン: プログラマの思索

アクセスリストの設定パターン: プログラマの思索

ネットワーク学習のためのチートシートのリンク: プログラマの思索

この広大な範囲がネットワーク初級者レベルなので、CCNP、CCIEのレベルの高さはすごすぎ。
これを暗記だけで乗り切れる人は相当すごいなと思う。

勉強が難しいのは、ルータやスイッチの環境を構築するのが難しい点にあると思う。
Ciscoルータやスイッチをメルカリなどで購入して自宅に構築するのは正直手間がかかり過ぎる。
今なら、シミュレータやエミュレータがあるので、それらを使って慣れた方が早いと思う。
Linux上にWebサーバー構築と同様に、自分でルータやスイッチをつないで、実際に通信してみなければ、どこに落とし穴があるかわからない。

ITの技術や知識はツールの習得と表裏一体である: プログラマの思索

実際に体験したが、ネットワーク・トポロジーのサンプルがないと、初心者にはきつい。
適当なトポロジーでは、pingすら通らない。
個人的には、「GNS3によるネットワーク演習ガイド ――CCENT/CCNA/CCNPに役立つラボの構築と実践」のサンプルが一番役立った。
スイッチはSTPぐらいだが、ルータはOSPFからMPLS、IPSecまで一通り試すことができて、こんな通信をやっているのか、と気付きがあった。

一方、Ciscoコマンドを操れるようになれれば、ルーティングやスイッチングで何が問題で対処しようとしているのか、が分かってくると思う。
実際、ルータやスイッチの設定では、高速で安定した通信を確保するためにルートの冗長性を確保したり、セキュリティを確保するためにIPアドレッシングやVLANで制御する作業が多い。

そして、CCNPレベルの内容を見ると、ルーティングやスイッチングの細かな設定を網羅すること、そしてVPN網など通信事業者側の観点のネットワーク技術が要求されるみたい。
OSPF、EIGRPの設定を深いレベルまで問われるみたい。

【2】ネットワークの根本問題とは何か?

2つある。
ネットワークの品質を保つための技術は何か、そして、セキュリティを確保するための技術はなにか、の2つ。
以前色々考えていた。

なぜInfrastructure as Codeが必要なのか?: プログラマの思索

ネットワークの根本問題は何か~昨今のIT技術と時代の変化についての考察: プログラマの思索

最近の傾向では、ネットワークの仮想化、そして、VPNとゼロトラストセキュリティなどのセキュリティの2つが熱いように思う。

ネットワークの仮想化では、ルータやスイッチというL2層、L3層の機能をソフトウェアで仮想化できる点が重要と思う。
たとえば、2階層モデルや3階層モデルのネットワーク設計の話では、アクセス層とディストリビューション層の通信をファブリックにつなぐが、それは、巨大なL3スイッチやVLANルーティングを仮想化しているのと同じだと思う。

Dockerは仮想スイッチと仮想イメージの両方を持つ: プログラマの思索

SDNアーキテクチャの本質は巨大な仮想L3スイッチを実現したことではないか: プログラマの思索

また、単にクラウドの普及だけでなく、たとえば楽天モバイルのような事例もある。
通信事業者の携帯基地局というハードウェア設備そのものをソフトウェアで仮想化することで、低コストで設置をスピーディに行えるなどのメリットもあるのだろう。

楽天モバイルの「完全仮想化」は実現すると何が変わるのか(佐野正弘) - Engadget 日本版

楽天モバイルの仮想化の取り組みについて(総務省)

ネットワークの設備などは枯れた技術のように思っていたが、5Gの件もあるし、まだまだ技術発展の途上にある。
ネットワーク技術にもムーアの法則を適用できれば、全く新たな利用シーンが生まれて、そこから新たなビジネスも生まれてくるのだろう。

もう一つは、いかにセキュアな通信を担保するのか、という問題。
従来は、ブラックリストポリシーのように、ルータでALCでパケットフィルタリング、ファイアーウォールやWAFでパケット制御みたいなやり方が多かったが、SaaSがこれだけ普及すると、企業の業務は社内の自前システムだけでは足りない。
しかも、クラウド上に業務システムが全て乗っているならば、クラウド上のデータやシステムはセキュアかもしれないが、クライアント端末からSaaSまでの通信がセキュアでなければ無意味になってくる。

ゼロトラストネットワークはまだ無勉強だが、たぶんその辺りの問題意識から生まれているのではないか、と想像している。

【追記】
CCNA合格体験記を書いてみた。
おめでとう♪合格体験記~やっと合格

| | コメント (0)

2021/06/30

アクセスリストの設定パターン

アクセスリストの設定パターンをメモ。

【参考】
ACL - 標準ACL

ACL - 拡張ACL

access-list/CiscoIOS - ネットワーク入門サイト

ip access-list/CiscoIOS - ネットワーク入門サイト

ip access-group/CiscoIOS - ネットワーク入門サイト

access-class/CiscoIOS - ネットワーク入門サイト

標準アクセスリストを設定する - ネットワークエンジニアを目指して

拡張アクセスリストを設定する - ネットワークエンジニアを目指して

アクセスリストを設定する上での注意点 - ネットワークエンジニアを目指して

【間違いやすい箇所】
ACLはルータのパケットフィルタリングでよく使う。
特定のグローバルIPアドレスで穴を開けたポートからのみ通信を許可する、とか、社内サーバーで他ネットワークからの通信は拒否する、とか。

ACLはそのコマンドが正直ぱっと見で理解しづらい。
しかも、パケットフィルタリングは上から順にIF文+Breakで実行されるので、じっくり考えないとミスしやすい。

標準ACLと拡張ACL、番号と名前の4パターンでよく間違える。
標準ACLの番号は1~99の2桁の数字、拡張ACLの数字は100~199の3桁。

ACLを設定するときは「ip access-list」でipが付く。
L3層なので、ipを付けると覚える。
一方、Telnet接続のACLでは、「access-group」でipはつけない。
L2層なので、ipを付けないと覚える。

標準ACLと拡張ACLを付ける場所は基本は決まっている。
標準ACLは送信元IPアドレスしか制御できないので、できるだけ遠いルータのIFの出口に設ける。
一方、拡張ACLは、フィルタリングできる項目が多いので、できるだけ近いルータのIFの入り口に設けて、パケットフィルタリングする。
ただし、複数のルートを持つルータがある場合、基本ルールと異なる場合があるので注意。

【コマンド】
(1)標準ACL+番号付き
RouterB(config)#access-list 1 deny host 192.168.1.100
RouterB(config)#access-list 1 permit any
RouterB(config)#interface ethernet 1
RouterB(config-if)#ip access-group 1 out

(2)拡張ACL+番号付き
RouterA(config)#access-list 100 deny tcp host 192.168.1.100 host 192.168.3.100 eq 80
RouterA(config)#access-list 100 permit ip any any
RouterA(config)#interface ethernet 0
RouterA(config-if)#ip access-group 100 in

(3)標準ACL+名前付き
RouterA(config)#ip access-list standard pingACL
RouterA(config-std-nacl)#deny tcp 192.168.1.1 0.0.0.255
RouterA(config-std-nacl)#permit ip any
RouterA(config-std-nacl)#exit
RouterA(config)#interface ethernet 0
RouterA(config-if)#ip access-group pingACL out

(4)拡張ACL+名前付き
RouterA(config)#ip access-list extended pingACL
RouterA(config-ext-nacl)#deny tcp 192.168.1.1 0.0.0.255 host 192.168.3.100 eq 80
RouterA(config-ext-nacl)#permit ip any any
RouterA(config-ext-nacl)#exit
RouterA(config)#interface ethernet 0
RouterA(config-if)#ip access-group pingACL in

(5)アクセスリストをVTYポートの「インバウンド方向」に適用する
RouterB(config)#access-list 1 deny host 192.168.1.100
RouterB(config)#access-list 1 permit any
RouterB(config)#line vty 0 4
RouterB(config-line)#access-class 1 in

| | コメント (0)

2021/06/20

なぜか2000年代にIT系の良い本が多いと感じる今日この頃

最近、Ciscoベースのネットワーク、組み込みソフトウェア開発・設計のためのモデリング、業務システムやERPを設計・分析するためのデータモデリングや業務フローの本を読み漁っている。
他にも、Matlab・Scilibのようなシミュレーション関係の本も探している。

たとえば、下記の本になる。

【1】「インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門 第2版」「インフラ/ネットワークエンジニアのためのネットワーク・デザインパターン 実務で使えるネットワーク構成の最適解27」は、オンプレのネットワーク設計の解説でピカイチだった。
インフラ担当者なら当たり前の知識なのだろうが、アプリ開発の経験しかない僕にとってはとても新鮮だった。
クラウドやInfrastructure as Codeが何を解決しようとしているのか、について、考えさせてくれた。

なお、この本は2010年代の本だが、ほとんどのCiscoルータ・スイッチの解説・コマンドリファレンス本は2000年代が多い。

【2】「組込みソフトウェア開発のための オブジェクト指向モデリング (組込みエンジニア教科書)」も良かった。
話題沸騰のポットを題材に、ハードウェアのポットを要件定義から、オブジェクト指向設計、C++のソースコードまで落としてくれる。
業務システム設計とは違う観点で、状態遷移図やパッケージ間の依存関係が非常に重要になってくる。
2006年頃の出版で絶版。

【3】「7つの要素で整理する業務プロセス (for Mutual Interest SERIES)」は、業務フロー図の演習本だ。ひたすら、7種類の業務フローのサンプルと解説をしてくれている。
内部統制が導入された頃に、ITに関係ない人が業務フローを使うことになった時に使われたのだろう。
2007年頃の出版で絶版。

【4】しかし、それらの本は2000年代に良い本が多く、2010年代はほとんど出版されていない。
オブジェクト指向モデリング、データモデリング、オンプレのネットワーク、シミュレーションなどの基本的な技術の解説本がほとんど出版されていない。
なぜなのだろうか?

おそらく、IT技術のトレンドが激しく変化してしまい、従来の設計や技術は基盤として埋め込まれて、見えなくなってしまうくらい、当たり前になってしまったからではないか。
実際、データモデリングやオブジェクト指向モデリングも、その概念や考え方は、20年前も10年前も変わらない。

しかし、SOEのWebシステムでも、枯れた業務システムであっても、データモデリングは必須だし、オブジェクト指向モデリングも知っていて当然だろうが、そういう技術を知らずにどっぷり最先端の技術にハマってしまう。
今となっては、最先端の技術から古い技術に遡るしか無いのだろうが、基本的な技術無しで取り組んでいる感じで、何か腑に落ちない時が多いと思う。

2000年代に良い本が多いのに、割と絶版になっていたりする。
すると、それらの本に含まれているノウハウや優れた説明は継承されることなく消えてしまう。

たぶん、ベースとなる技術はもはや当たり前であって、ベースの技術や基盤の上で、次々に新しいサービスをどんどん生み出していくのが普通になっている。
だから、逐一古い基礎的な技術を掘り返すのは手間がかかり過ぎるのかもしれない。

この辺りの理由は色々探りたい。
そして、その悪影響についても考えてみたい。


| | コメント (0)

2021/06/13

NATの設定パターン

NATの設定パターンをメモ。

【参考】
ip nat inside source - スタティックNATの設定

ip nat inside source list - ダイナミックNAT

Ciscoコンフィグ - PAT

NAT(スタティックNAT) CCNA実機で学ぶ

NAT(ダイナミックNAT) CCNA実機で学ぶ

NAT(PAT オーバーローディング) CCNA実機で学ぶ

Cisco NAT/PATの設定と確認 | IPアドレッシング | ネットワークのおべんきょしませんか?

【間違いやすい箇所】
内部ローカルアドレス、内部グローバルアドレスの場所をよく間違える。
内部ローカルアドレスは、送信元のクライアントPC。
内部グローバルアドレスは、NATを動かすルータの外側のIF。

ip nat pool の使い方もよく間違える。
poolには、グローバルIPアドレスのリスト(開始アドレス~終了アドレス)を指定する。
グローバルIアドレスが1個だけならば、開始アドレスと終了アドレスは同一のIPアドレスになる。

標準ACLを使ったNATの設定もよく間違える。
標準ACLを使えば、送信元アドレスのpermit権限制御によって、内部ローカルアドレスの範囲を指定できる。

【コマンド】
(1)インターフェースに対するNATの設定を行う
* ethernet 0を「内部インターフェース」に指定
* serial 0を「外部インターフェース」に指定

Router(config)#interface ethernet 0
Router(config-if)#ip nat inside

Router(config)#interface serial 0
Router(config-if)#ip nat outside

(2)スタティックNATの設定を行う
* 内部ローカルアドレス「192.168.1.254」(変換対象のIPアドレス)
* 内部グローバルアドレス「10.100.100.100」(変換後のIPアドレス)

Router(config)#ip nat inside source static 192.168.1.254 10.100.100.100
⇒「ip nat inside source」まで同じ
⇒ip nat inside source static 内部ローカルアドレス 内部グローバルアドレス

(3)LAN内にある30台のPCを、プールアドレス(グローバルアドレス)を使用して、同時にインターネットへアクセス出来るようPATを設定する
* アドレスプールのプール名 は「test」
* プールの使用を許可するアクセスリストの番号は「1」
Router(config)#ip nat pool test 10.100.100.9 10.100.100.14 netmask 255.255.255.248
⇒poolには、グローバルIPアドレスのリスト(開始アドレス~終了アドレス)を指定する

Router(config)#access-list 1 permit 192.168.1.0 0.0.0.31
⇒標準ACLを設定する。
⇒標準ACLを使えば、送信元アドレスのpermit権限制御によって、内部ローカルアドレスの範囲を指定できる。
Router(config)#ip nat inside source list 1 pool test overload 
⇒ACLを設定するので、「list 1」になる
⇒「ip nat inside source」まで同じ。PATなので、最後にoverloadを付ける。

(4)NATテーブルの状態を確認する

show ip nat translations 

Pro Inside global Inside local Outside local Outside global
--- 10.100.100.100 192.168.1.1 --- ---
--- 10.100.100.101 192.168.1.2 ---       ---
--- 10.100.100.102 192.168.1.3 ---       ---

| | コメント (0)

2021/06/07

スタティックルートの設定パターン

ルータのスタティックルートの設定パターンをまとめておく。
初心者のラフなメモ書き。

【参考】
スタティックルーティングとは

フローティングスタティックルートとは、Ciscoコンフィグ設定:従来と現在の利用例

【1】スタティックルートの種類は、デフォルトルート、ホストルート、ネットワークルート、フローティングスタティックルートの4つ。
転送先アドレスの種類は、直接・再帰・完全の3つ。

一般に、ダイナミックルーティングでルータを設定する場合が多いだろう。
なぜなら、逐一手動で経路を考えて設定するのは面倒だから。

スタティックルートを設定するケースは、ISPに直接接続するルータが多いのだろう。
スタティックルートでデフォルトルートを設定し、さらにフローティングスタティックルートもバックアップルートとして登録するのだろう。

【2】たとえば、下記のスタティックルートがある。


20210607_static_route_sample










R1でデフォルトルート+再帰スタティックルート
ip route 0.0.0.0 0.0.0.0 192.168.2.2

PC2へホストルート+再帰スタティックルート
ip route 192.168.3.11 255.255.255.255 192.168.2.2

PC2へNWルート+再帰スタティックルート
ip route 192.168.3.0 255.255.255.0 192.168.2.2

PC2へNWルート+直接スタティックルート
ip route 192.168.3.0 255.255.255.0 fa0/1

PC2へNWルート+完全スタティックルート
ip route 192.168.3.0 255.255.255.0 fa0/1 192.168.2.2

PC2へフローティングスタティックルートの場合、AD値は2以上にする。
デフォルトのstatic routeは、AD値=1 だから。
ip route 宛先IPアドレス サブネットマスク 出力IF ネクストホップアドレス AD値

【3】【図解】再帰的ルーティング(リカーシブスタティック)とその実装例 | SEの道標

(引用開始)
ルーティングの NextHop アドレスは基本的には自身の Connected ルートのセグメントの中から指定します。
ただし、NextHop を異なるセグメントにしても正しくルーティングされるケースがあります。
しかも、存在しない IP アドレスを NextHop にしていても正しくルーティングされることさえあります。
これは、再帰的ルーティングが動作しているためです。
(引用終了)

一般に、ネクストホップアドレスはルータの出力IFの相手先ルータの対向IFのIPアドレスを設定するものと思い込んでいた。
しかし、存在しないIPアドレスを指定しても、ルーティングテーブルにある別のIPアドレスであれば、再帰的に探してくれるらしい。
単純なネットワーク構造であれば問題ないだろうが、大規模で複雑なルーティングテーブルになっていると、ややこしくなりそう。

【4】ネットワーク設計を勉強していると、L2層のスイッチよりも、L3層のルータの方が機能もコマンドもプロトコルも多くてややこしい。
たぶん、長年の歴史を経て、古いプロトコルは使われなくなり、新しいプロトコルがどんどん提案されて実装されて、技術が積み重なってきたのだろう。
経路依存性のある複雑な歴史がたぶんあるのだろう。

ネットワークの根本的な目的「障害に強く高性能なネットワークを維持する」ために、どんな技術が必要とされているのか。
いろいろ調べてみる。

| | コメント (0)

2021/06/05

組み込みソフトウェアの根本問題~対象物の状態遷移を記述できれば、制御が可能だ

「組み込みソフトウェアでは対象物の状態遷移を記述できれば、制御が可能だ」という文言をネットで2箇所見つけた。
ラフなメモ。

組み込みソフトウェアのモデリングにおける根本問題とは何だろうか?
業務システムのモデリング、ネットワーク設計の根本問題とは異なる。

業務システムのモデリングでは、業務ロジックをいかにER図に落とし込めるか、という点に集約できると思う。
以前書いた。

業務ロジックをデータモデリングはどこまで表現できるか?: プログラマの思索

その考えから、ビジネスの一連の業務フローが表現されて、データのライフサイクルと使われる帳票が導出されて、最終的にERPになるイメージ。

一方、ネットワーク設計の根本問題は、ネットワークの品質をどのように保つか、という点に尽きると思う。

SDNアーキテクチャの本質は巨大な仮想L3スイッチを実現したことではないか: プログラマの思索

なぜInfrastructure as Codeが必要なのか?: プログラマの思索

ネットワークの根本問題は何か~昨今のIT技術と時代の変化についての考察: プログラマの思索

ネットワークの品質は、耐障害性の観点でのL2・L3の冗長化、セキュリティの観点でL2のスプーフィング対策・L3のパケットフィルタリング・認証、L4層以上のファイアーウォールやVPN、音声や動画やデータの通信品質を保つ観点のQoSなどの技術が使われている。
さらに、巨大で複雑なネットワーク構造を構成管理の配下に置くために、SDNやぜInfrastructure as Codeの技術が生まれた、というイメージ。
特に、昨今は、データモデリングやオブジェクト指向設計よりも、ネットワークの仮想化技術が熱いと思う。
その中にクラウドも含まれるわけだが。

では、組み込みソフトウェアのモデリングにおける根本問題とは何だろうか?


組み込みモデリング - MONOist

(引用開始)
組み込みシステム開発の世界には、大きく2つのモデル<ソフトウェアのモデル>と<制御のモデル>が存在する。
(引用終了)

組込みソフトウェア開発のための オブジェクト指向モデリング (組込みエンジニア教科書)にこんな感想があった。

(引用開始)
殿堂入りNO1レビュアー
kaizen
状態遷移が肝でしょうか。

2008年3月21日に日本でレビュー済み
対象物の状態遷移を記述できれば、制御が可能だという意味で、オブジェクト(対象)指向は有効なのだと思われます。
モデルを作る場合に、対象(オブジェクト)を記述していくのが王道なのだと思われます。
本当に必要な技術と、内容を確かめるために使う技術と、試験のための技術との詳細な説明があるとよいかもしれません。
(引用終了)

勝手な想像では、組み込みソフトウェア設計では、単純に部品をクラス図やブロック図に表現するよりも、そこから、抽象度を上げた対象物の状態遷移を見抜くことが重要ではないだろうか。
対象物の状態遷移を記述できれば、プログラムで実装可能であり、その制御プログラムで機械に作業を指示できる。

しかし、状態遷移は爆発しやすい、という根本問題は以前からある。
だから、状態が爆発的に増えてコントロールできなくなるために、レイヤーごとに分けたり、抽象度を上げ下げしたりして、ソフトウェアの複雑さを制御しようとしているのではないか。

この発想を元に、色々考えてみる。

| | コメント (0)

2021/05/25

SDNアーキテクチャの本質は巨大な仮想L3スイッチを実現したことではないか

SDNアーキテクチャの例として、Cisco SD-AccessとかCisco ACIがある。
単純に、ネットワーク設計を3階層のレイヤモデルで実現したことに過ぎないだろう、と思っていた。
しかし、UdemyのCCNA講座を見て、自分の理解が浅いことに気づいた。
ラフなメモ。

【参考】

新CCNA(200-301)完全未経験からの合格講座(上) | Udemy

新CCNA(200-301)完全未経験からの合格講座(下) | Udemy

新CCNA(200-301)完全未経験からの合格講座(コンプリート版) | Udemy

SDNアーキテクチャの本質は巨大な仮想L3スイッチを実現したことではないか。

たとえば、「インフラ/ネットワークエンジニアのためのネットワーク・デザインパターン 実務で使えるネットワーク構成の最適解27」を読むと、オンプレでスイッチやルータを駆使してネットワーク設計する時、L2ループになりやすいので、STPを取り入れて、ループ構造にせず、ツリー構造になるようなトポロジーを作る話がたくさん出てくる。
実際、パケットはTTLがあるから、無駄なパケットも時間が経てば消える。
しかし、L2レイヤーのフレームはTTLがないから、延々と流れ続けて、帯域を圧迫して、最終的にはルータやスイッチに負荷をかけてしまう。

だから、3階層モデルとして、コア層・ディストリビューション層・アクセス層にレイヤ化し、ルータやスイッチを配置する。
その構造は、ツリー構造なので、L2ループは発生しない。
しかし、エンドポイント同士の通信では、ツリー構造を辿って最上部のルータを経由するから、経路が長くなるし、無駄な冗長化設計になっている。

一方、SDNアーキテクチャでは、インフラストラクチャ層で、SpineスイッチとLeafスイッチでファブリック構造をなす。
ファブリック構造にしたのは単に冗長化のためだけだろう、と理解していたが、理解が浅かった。

実際は、エンドポイント同士の通信は、ファブリック構造になっているので、Leaf→Spine→Leafのルートだけで通信できるので、経路は短い。

しかし、エンドポイントのサブネットが異なると、たとえサーバーを仮想環境にしても、IPアドレスがそのまま使えないから、リソースのやり取りは面倒になる。
そこで、VXLANを導入すれば、L3ネットワーク上に仮想L2ネットワークを構築することができる。
つまり、異なるセグメントであっても、同じL2ネットワークにあたかもいるように仮想化されるので、サーバーのリソースをやり取りできるようになる。

「L3ネットワーク上に仮想L2ネットワークを構築する」というイメージは、巨大な仮想L3スイッチと同じだ。
つまり、ファブリック構造の中で、Leafスイッチは仮想L3スイッチのアクセスポート、Spineスイッチ仮想はL3スイッチのSVIとみなせば、ファブリック構造を持つインフラストラクチャ層全体を巨大な仮想L3スイッチとみなせるわけだ。

これが意味するのは、数多くのスイッチやルータの集合体を一つのオブジェクトに仮想化することで、一つの仮想的なL3スイッチや仮想ルータ、仮想スイッチとしてソフトウェア的に実現できること。
そう思えば、エンドポイントの端末から見れば、仮想スイッチのアクセスポートや仮想ルータのインターフェイスに単につないでいるだけ、とみなせるわけだ。

最近、インフラ基盤の仮想化の話が熱い。
では、仮想化の対象はどこに焦点を当てているのか?

一つは、物理的なネットワーク機器。ルータ、スイッチ、ファイアーウォールとか。
もう一つは、物理的なLAN、WANなどのネットワーク。

つまり、SDNアーキテクチャが巨大な仮想L3スイッチを実現したことは、物理的なLAN構造を仮想化したことと同じ。

同様に、MPLSとかVPNなどのトンネリングプロトコルは、物理的なWAN構造を仮想化して、一つの巨大な仮想ルータで実現したのと同じように思える。
実際、サイト間でVPNやMPLSを仮想的なL3層のプロトコルでつないで、パケットを安全に通信するわけだが、その機能は、ルータ内で、入力IFから受信したパケットをカプセル化して出力IFへ転送して送信するのと同じだから。

Dockerでも、複数のVMの通信を束ねる仮想スイッチが実現されていた。

そんなことを考えると、昨今のコンピューティングパワーが強大になったことで、物理的なネットワーク機器だけでなく、ネットワークそのものの仮想化できるレベルになり、ソフトウェアで制御しやすくなってきた背景があるのだろう。

仮想化によって、レイヤ化されたネットワーク設計では、各層を丸めて、仮想ルータや仮想L3スイッチ、仮想L2スイッチにみなせるようになった。
つまり、仮想化により、より抽象化した一つのネットワーク機器として擬似的に扱えるレベルになったわけだ。
たぶんそこがネットワーク技術の大きな技術進化なのだろう。

この辺りは奥が深いと思うので、思考を深める。

【追記】
VXLANによって、L2 over L3が実現されたイメージは、下記の記事が参考になる。

コラム - クラウド時代のオープンソース実践活用 | 第64回 いまさら聞けない? VXLANの仕組みとVTEPの役割|CTC教育サービス 研修/トレーニング

コラム - クラウド時代のオープンソース実践活用 | 第65回 Flannelが実現するKubernetesの仮想ネットワーク|CTC教育サービス 研修/トレーニング

Cisco ACI とは何なのか(1) 「ACIをシンプルにL2/L3スイッチとして考えてみる」

コラム - クラウド時代のオープンソース実践活用 | 第64回 いまさら聞けない? VXLANの仕組みとVTEPの役割|CTC教育サービス 研修/トレーニングでは、「図1 VXLANによるオーバーレイネットワーク」が分かりやすい。
東京、大阪、福岡の3拠点のサーバーがルーターで相互接続されていて、別々のサブネットに配置されていても、VXLAN対応スイッチによって、あたかも仮想的に、各サーバーは、L2スイッチで直結されたかのように、同一サブネット(この例では「10.1.0.0/16」)のIPアドレス(例:東京:10.1.1.0, 大阪:10.1.2.0、福岡:10.1.3.0)で通信が可能になる。

コラム - クラウド時代のオープンソース実践活用 | 第65回 Flannelが実現するKubernetesの仮想ネットワーク|CTC教育サービス 研修/トレーニングによれば、VXLANによる仮想ネットワーク、すなわち、「L2 over L3」のオーバーレイネットワークを実現する仕組みは、既に、実は、現在のLinuxカーネルには、すでにVXLANの機能が組み込まれていて、「Flannel」として実現されているとのこと。

つまり、VXLANは、データセンター向けの特別な技術ではなく、既に当たり前の技術になっている。

| | コメント (0)