class: title, smokescreen, shelf, no-footer # コンピュータネットワーク(2024-)<br><small>第04回 LAN(1): FW, DMZ</small> <div class=footnote> <small><small> 3年、春学期、必修; 旧「コンピュータネットワーク」(-2023) </small></small> </div> --- class: compact, img-right # LANの構成を理解する、構成図が書けるようになる(1) <div class=footnote> <small><small> (脚注) 210.128.53.193 は大学にある本科目の演習環境(図(下))の入口 </small></small> </div> ![height240px](../images/tracepath-oregon-to-chitose.png) ![height240px](../images/ex-env/whole-site.png) <small> - いままでは大域的な話(WAN)でしたが、 - ここからは学内に構築したシステム(LAN,右図(下))の中を探検します。 右図(上)のchitose(図の左上)の詳細、 210.128.53.193よりも向こう側 ``` $ tracepath -n 210.128.53.193 1: 172.31.32.1 0.082ms ... 略 ... 7: 206.81.80.237 7.548ms 8: 58.138.88.225 124.263ms ... 12: 210.128.52.7 138.867ms 13: 210.128.53.193 ``` </small> <div class=review-gw-begin></div> --- class: compact # 用語集 - LAN(発音:らん) ... Local Area Network <small> - (物理的に)学内に設置されている機器やPCの集合体(学内ネットワーク)のこと </small> - ファイアウォール ... firewall <small> - 文字どおり「防火壁」... インターネット側からの攻撃を防いでいるイメージ - AWS 用語では「セキュリティグループ」が、この機材に対応する - 管理者が決めたルールに沿って、とおしてよい通信だけを通す装置 - ついでに、通信の記録も取っている </small> - DMZ (発音:でぃーえむぜっと) ... DeMilitarized Zone <small> - インターネット向けサービスをするサーバを置く場所。例: ポータル、EL(solomon) - 直訳は「非武装地帯」=戦場の間にもうけられた緩衝地帯。今となっては変な用語 </small> --- class: compact,img-right # LANの基本構成を覚える <div class=footnote> <small><small> (脚注) 四角のルータやファイアウォールは「ひとつの形のあるネットワーク機器」を意識した図ですが、 楕円で書いてあるDMZと学内はネットワークを意味しています。 ここにはPCが一台かもしれないし、複数かもしれません。 第4-5回で具体的に調べていきます </small></small> </div> ![](/slides/skill-network/images/campus-network-concept-01.png) <small> - ファイアウォール(以下fw)とDMZを用意する - つまり直接インターネットと通信させない - 学内のPCやスマートフォンはfw経由で通信 - 学内とDMZのPCやサーバはfw経由で通信 - インターネット向けサーバはDMZに設置し、fw経由でインターネットにサービスする - 例:ポータルやEL - fwでは(a)必要なプロトコルのみ許可(b)通信記録を取る(ログを取る) - (a)がAWSのセキュリティグループ相当 </small> <div class=review-gw-end></div> --- class: compact # IPアドレス (再掲) <div class=footnote> <small><small> (脚注) 本当は2種類ありますが、古いほうのバージョン4略してIPv4(発音:あいぴーう゛いふぉー)だけを勉強します </small></small> </div> - 住所がないと互いに区別できないから、コンピュータにも住所をつけます - 住所は数字です。長さは<B>32ビット(4バイト</B> = 4オクテット) - コンピュータは2進数で動いているので、本当は2進数だけど、人間には辛すぎるので、 「ドット(`.`)くぎりの10進数4つ」で表現しています ``` [AWS EC2の例] 172.31.0.4 (2進数で表示すると) 10101100 00011111 00000000 00000100 ``` --- class: compact # IPアドレスの読み方: 例: 210.128.53.248/29 <div class=footnote> <small><small> (脚注) 住所のたとえはイメージを伝えるためです。 しかしながら10進数のままでは不正確です。/29は2進数で説明すれば正確に... </small></small> </div> <small> 例: 210.128.53.248/29 - LAN(ネットワーク)は「IPアドレス/大きさ」で表現する。「大きさ」部分は可変長(/1〜/32) - 「大きさ」とは、そのLANで利用できる(連続した)IPアドレス数(計算方法が逆向きなので注意,次行) - <B>32 - 29 = 3 ビット(2の3乗=10進数の8個)分のIPアドレスが利用できる</B> - わかりやすさ優先で<B>演習環境のLANは全て/29</B>になっているので、どのLANでもIPアドレスは連続する8個 - どのLANでも両端の2個は特別な目的に使うので住所には使えない。つまりPCやサーバには使えない。 よって、演習環境では、どのLANでも8 - 2 = 6個のPCしか接続できない ![height240px](../images/net-ip-210-128-53-248.png) </small> --- class: compact # IPアドレスの数え方: 例: 210.128.53.248/29 <div class=footnote> <small><small> (脚注) 210.128.53丁目には256軒分の家が分譲可能です。 それを8軒ずつの区画(大きさが/29のLAN)として切り売りするイメージ </small></small> </div> <small> 例: 210.128.53.248/29 - 32ビットの数字(この例では210.128.53.248)を「ドット(`.`)くぎりの10進数4つ」で表現しているので、 各数字は8ビット(8ビット=256)分の大きさ。つまり 210.128.53.Xの右端Xの部分が8ビット分の大きさ - <B>ただし、C言語の数え方と同じで、0から数え始めることに注意する</B> - 演習環境は/29でIPアドレス8個ずつのLANに小分けされている。256/8=32個のLANに小分けされる - 一番数字の小さいLANが210.128.53.0/29 (8 x 0 = 0, 1個目のLAN) - 一番大きい数字のLANが210.128.53.248/29 (8 x 31 = 248、32個目のLAN) - 210.128.53.248/29のLANで使えるIPアドレスは、210.128.53.248から210.128.53.255までの連続する8個 - ただし両端210.128.53.248と210.128.53.255は住所には使えない - PCやサーバに使えるIPアドレスは210.128.53.249から210.128.53.254までの連続する6個 </small> --- class: title, smokescreen, shelf, no-footer # 本日の演習 --- class: compact,img-right # おしながき <div class=footnote> <small><small> (脚注) 調査対象は、右図です。今回は、調査全2回の前編 </small></small> </div> ![height240px](../images/ex-env/whole-site.png) <small> 1. EL 1. 解説 1. 先週の[答え合わせ](/slides/skill-network/answers/#net-ex-03) 1. 演習の課題&操作の解説 1. 演習 - a. AWS Academy (vocareum)にログイン - b. VocareumのターミナルからSSHでfwにログインしてネットワークを調査します - c. [課題] IPアドレスの一覧表を書き、ポータルのレポート機能で、提出してください <B>(今日中)</B> </small> --- class: compact # 目的・目標 <div class=footnote> <small><small> </small></small> </div> - SSHでリモートログインできる - SSHを明示的に使う演習は、実は今回が初めてです - ipコマンドの出力の読み方を覚える - <B>ipやpingコマンドを用いてネットワーク構成を推定できる</B> --- class: compact,img-right # 必須課題 <div class=footnote> <small><small> (脚注1) この構成図のさらに下側(学内側)は来週、探索します <br> (脚注2) 図やスライド中に、書き方の見本としてLAN(DMZ)のネットワークおよび(C)と(F)の分は答えが書いてあります </small></small> </div> ![height480px](/slides/skill-network/images/net-ex-lan-survey-01.png) <small> - 右の構成図(ポンチ絵)とコマンドの実行結果を元に、 ポータルで配布するスプレッドシートを埋めてください。 埋める項目は次のとおりです - LAN(外)、LAN(DMZ)、LAN(内1)のネットワークアドレス - 図の(B)〜(F)のIPアドレス; 使われていないIPアドレスも多数あるので、そこは空欄でOK </small> --- class: compact # <small>配布するスプレッドシートの例: 210.128.53.??? </small> <div class=footnote> <small><small> わかりやすいように、各ネットワークの大きさは同じにしていて、 各ネットワークに割り当てたIPアドレスは8個ずつです。 ただし両端は特別な目的に使っているためPC等には使えません。 そのため見本では「未使用」と書いてあります。 210.128.53.は共通なので、それは省略し、各セルでは最後の数字だけ書けばOKです。 また解答の(B)-(F)を適切なセルに追記してください。 なお表の下側は来週使う分です。 例:<B>254(F)</B>は210.128.53.254の略で、図の(F)のIPアドレス </small></small> </div> | 名前/役割 | IPアドレス/大きさ | IP(1) | IP(2) | IP(3) | IP(4) | IP(5) | IP(6) | IP(7) | IP(8) | 備考 | |----------- |------------------- |-------- |------- |------- |------- |-------- |------- |-------- |-------- |------ | | | | 未使用 | | | | | | | 未使用 | | | LAN(外) | | | | | | 204(C) | | | 207 | | | LAN(DMZ) | 210.128.53.248/29 | | | | | | | 254(F) | 255 | | | LAN(内1) | | | | | | | | | | | | LAN() | | | | | | | | | | | | LAN() | | | | | | | | | | | | LAN() | | | | | | | | | | | | LAN() | | | | | | | | | | | | LAN() | | | | | | | | | | | --- class: title, smokescreen, shelf, no-footer # 演習の解説 --- class: compact # 用語: LANの様子を調べるための定番コマンド <div class=footnote> <small><small> </small></small> </div> - ping (発音:ぴん) (再掲) <small> - 用例: 「ピンを打って!」「ピンが返るか確認して〜」 - 目的: 相手が反応を返すか?でネットワークが正常かを確認する。 反応を返さない場合、複数の可能性 (a)相手が死んでいるのか?(b)ネットワークが不調なのか?はたまた両方か?が混在している - 元ネタは潜水艦のソナー(音波で周囲や敵艦を探査する仕組み)で音波を出すこと(=PING) - [実演(wikipedia)](https://en.wikipedia.org/wiki/File:Sonar_pings.ogg) </small> - ip (発音:あいぴー) <small> - 目的: Linuxのネットワーク設定情報を表示する - `ip [global options] サブコマンド [options] [引数]`というOOP風のシンタックスのコマンド </small> --- class: compact,img-right # 作業手順 <div class=footnote> <small><small> (注1) スプレッドシートの数字ですが「縦方向には8の倍数分ずれている」はず。あっているか確認するべき <br> (注2) 先にLANの両端の数字を計算してから、つじつま合わせを始めるといいと思う </small></small> </div> ![height480px](/slides/skill-network/images/net-ex-lan-survey-01.png) <small> 1. ファイアウォール(以下fwにSSHログインする - fwのIPアドレスは、210.128.53.204 - ユーザ名は学籍番号 - パスワード認証 1. fwのIPアドレスをすべて調べる - ipコマンドを使い調べる - ここまでで(C)〜(F)までは情報が表示済み 1. (B)はpingコマンドで総当たり戦をして調べる 1. つじつまが合うように、スプレッドシートの該当部分を埋めていく(ここは推測) </small> --- class: compact # sshコマンドの使い方(1) ログインの仕方 <div class=footnote> <small><small> (脚注1) パスワードはチャットに書きます <br> (脚注2) 一般には「ssh ユーザ名@IPアドレス」です。 ユーザ名=学籍番号としてサーバを構築してあります </small></small> </div> <small> ``` [書式] ssh 学籍番号@IPアドレス [実行例] $ ssh b2902900@210.128.53.204 ``` - 目標は次の2つのIPアドレスです - 210.128.53.204 ... ファイアウォールのIPアドレス(の一つ) - 210.128.53.254 ... ポータル(にせ)のIPアドレス - vocareumのターミナルから、どちらのIPアドレスへも直接SSHできます - ちなみに、これらは前ページの図にある(C)と(F)のIPアドレスであることに注意 </small> --- class: compact # sshコマンドの使い方(2) ログアウトの仕方 <div class=footnote> <small><small> </small></small> </div> <small> - `exit`コマンドでログイン先のサーバから抜けてください(logoutしてください) ``` [実行例] $ ssh b2902900@210.128.53.204 〜 省略 〜 Last login: Mon May 6 06:38:57 2024 from 59.106.191.18 b2902900@fw:~$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 〜 省略 〜 b2902900@fw:~$ exit logout Connection to 210.128.53.204 closed. ``` </small> --- class: compact # ipコマンドの使い方 <div class=footnote> <small><small> (脚注) 省略形でも受け付けるかどうか?はソフトウエアの作者の設計方針なので、 この動作をするコマンドもあれば、そうでないものもあります。 個別に覚えていくしかありません。 ただし、間違ったときにはヘルプメッセージを表示するのがUnixの作法なので、 よく画面をみれば、どう対処すれば良いのか分かります </small></small> </div> <small> ``` [コマンド] ip [オプション] サブコマンド [サブコマンドのオプション] [サブコマンドの引数] 今回つかうのはコレダケです $ ip address 省略してaだけでもOK $ ip a ``` - サブコマンドが、たくさんありますが、今回つかうのはip addressだけです - 一意に特定できればサブコマンドは省略形でも受け付けます。この例ではaだけでもOK </small> --- class: compact # ipコマンドの読み方(1) <div class=footnote> <small><small> </small></small> </div> <small> ``` [実行例] $ ip address 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:0e:00:12:44 brd ff:ff:ff:ff:ff:ff inet 10.20.30.40/24 brd 10.20.30.255 scope global ens3 valid_lft forever preferred_lft forever inet6 fe80::5054:eff:fe00:1244/64 scope link valid_lft forever preferred_lft forever 3: ens4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 52:54:0e:00:17:44 brd ff:ff:ff:ff:ff:ff ``` </small> --- class: compact # ipコマンドの読み方(2) <div class=footnote> <small><small> (脚注) Q: 3つもIPアドレスがある?正しい? A: YES! IPアドレスとはPCの住所ではなくケーブルを挿す口(network interface)の識別番号 </small></small> </div> <small> ``` 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:0e:00:12:44 brd ff:ff:ff:ff:ff:ff inet 10.20.30.40/24 brd 10.20.30.255 scope global ens3 valid_lft forever preferred_lft forever inet6 fe80::5054:eff:fe00:1244/64 scope link valid_lft forever preferred_lft forever 3: ens4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 52:54:0e:00:17:44 brd ff:ff:ff:ff:ff:ff ``` - `2: `とか`3: `は単にN番目と表示しているだけなので無関係 - `2: enc3:`のens3部分が「ネットワークインターフェイス名」(ケーブルを挿す口の名前) - PCにある口の数だけ表示されます - <B>各口ごとにIPアドレスを割り当てることができます。fwでは3つ表示されます</B> - `inet 10.20.30.40/24`の部分が一番知りたい情報 - <B>この例では10.20.30.40がPCについているIPアドレス、ネットワークの大きさが/24</B> </small> --- class: compact # pingコマンドで総当たり戦(1) <div class=footnote> <small><small> (脚注1) 254回ためすとか鬱なので、こういうときにシェルスクリプト(プログラミング)を使います。 ただ、別のプログラミング言語の勉強が始まってしまうので、授業では取り上げません (脚注2) <B> シェルは、日常つかいの100倍速で仕事をするためのツールです。 シェルを使いこなせることはUnixの真髄です。 この運用思想をtoolbox orientedとかpipe orientedと呼んでいます。 OOPにメソッドチェーンという書き方がありますが、あれ単にUnixの再発明をしているだけね。</B> ちなみに、 雑誌ソフトウエアデザインでキチガイじみたシェルプログラミングを競って喜ぶ記事が不定期に掲載されていますが、 シェルプログラミングは、ああいう宴会芸ではありません </small></small> </div> - 全IPアドレスに対してpingを打ってみて、反応があるIPアドレスをメモっていきます - 前のページのIPアドレス 10.20.30.40/24 を例にすると、 このLANには 10.20.30.1 〜 10.20.30.254 というPCの住所がありえます。254回ためす - 課題は「LAN(外)」です。「LAN(外)」の全IPアドレスに対してpingを打ってみればよい - <B>注意: pingコマンドは無限ループしているのでCtrl-Cで止めてください</B> --- class: compact # pingコマンドで総当たり戦(2): 実行例 <div class=footnote> <small><small> 注意: lossつまり失敗の方を表示している。100% packet lossが相手が死んでいて、100未満は生きているということ </small></small> </div> <small> ``` [実行例] $ ping 10.20.30.1 PING 10.20.30.1 (10.20.30.1) 56(84) bytes of data. ^C <-- Ctrl-Cで止めた --- 10.20.30.1 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 8ms <-- 100% lossつまり死んでいる $ ping 10.20.30.2 PING 10.20.30.2 (10.20.30.2) 56(84) bytes of data. 64 bytes from 10.20.30.2 (10.20.30.2): icmp_seq=1 ttl=255 time=0.200 ms 64 bytes from 10.20.30.2 (10.20.30.2): icmp_seq=2 ttl=255 time=0.595 ms ^C <-- Ctrl-Cで止めた --- 10.20.30.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 31ms <-- 0% lossつまり生きている rtt min/avg/max/mdev = 0.200/0.397/0.595/0.198 ms ``` </small> --- class: title, smokescreen, shelf, no-footer # 付録 --- class: compact, col-2 # IPアドレス早見表 <small><small> | LAN | IP-addr/29 | IP(1) | IP(2) | IP(3) | IP(4) | IP(5) | IP(6) | IP(7) | IP(8) | |--------- |-------------------- |------- |------- |------- |------- |------- |------- |------- |------- | | LAN(16) | 210.128.53.128/29 | 128 | | | | | | | 135 | | LAN(17) | 210.128.53.136/29 | 136 | | | | | | | 143 | | LAN(18) | 210.128.53.144/29 | 144 | | | | | | | 151 | | LAN(19) | 210.128.53.152/29 | 152 | | | | | | | 159 | | LAN(20) | 210.128.53.160/29 | 160 | | | | | | | 167 | | LAN(21) | 210.128.53.168/29 | 168 | | | | | | | 175 | | LAN(22) | 210.128.53.176/29 | 176 | | | | | | | 183 | | LAN(23) | 210.128.53.184/29 | 184 | | | | | | | 191 | | LAN(24) | 210.128.53.192/29 | 192 | | | | | | | 199 | | LAN(25) | 210.128.53.200/29 | 200 | | | | | | | 207 | | LAN(26) | 210.128.53.208/29 | 208 | | | | | | | 215 | | LAN(27) | 210.128.53.216/29 | 216 | | | | | | | 223 | | LAN(28) | 210.128.53.224/29 | 224 | | | | | | | 231 | | LAN(29) | 210.128.53.232/29 | 232 | | | | | | | 239 | | LAN(30) | 210.128.53.240/29 | 240 | | | | | | | 247 | | LAN(31) | 210.128.53.248/29 | 248 | | | | | | | 255 | - 各LANのIPアドレスは8個ずつ - 表の縦方向は8ずつずれていることに注意 </small></small>