# 計算機ネットワーク2 ## https://hackmd.io/NYKVnPLISdW0GqrUAVTPhg ## Cisco Packet Tracer ### IPアドレス設定 #### PC GUIで設定 ip configuration IP Address > IPアドレス Subnet Mask > サブネットマスク Default Gateway > 繋がってるルーターのIPアドレス #### ルーター `> enable` `# configure terminal` `(config)# interface [刺してる線(例:fa 0/0)]` `(config-if)# ip address [IPアドレス] [サブネットマスク]` `(config-if)# no shutdown` `(config-if)# exit` ### ルート設定 #### ルーター `> enable` `# configure terminal` `(config)# ip route [宛先ネットワークアドレス] [サブネットマスク] [転送先IPアドレス(ルーター)]` 全部 (デフォルトゲートウェイ) `(config)# ip route 0.0.0.0 0.0.0.0 [転送先IPアドレス(ルーター)]` #### PCで確認 `> tracert [IPアドレス]` #### 保存 `# copy running-config startup-config` #### 名前変更 `(config)# hostname [名前]` ### パスワード #### enable(管理者) `(config)# enable secret [password]` #### 消すとき `(config)# no enable secret` #### console `(config)# line con 0` `(config-line)# password [password]` `(config-line)# login` #### telnet `(config)# line vty 0 4` `(config-line)# password [password]` #### 一覧見る `# sh run` #### PW暗号化 `(config)# service password-encryption` ### ダイナミックルーティング #### RIP `(config)# router rip` `(config-router)# network [ネットワークアドレス]` #### RIPを優先 `(config)# router rip` `(config-router)# distance 30` #### 自動集約が悪さをしているとき `(config)# router rip` `(config-router)# version 2` `(config-router)# no auto-summary ` としてから再度`network`を設定 ### eigrp eigrpの設立 `# conf t` `#(config) router eigrp 100` `#(config-router) network [ネットワークアドレス] [ワイルドカードマスク]` ### RIPとeigrpの共生 RIPと共生するために、RIPをeigrpとして再頒布(reditribute)する redistributeが必要なルータ ``` +-------+ +-----+ | | | | | eigrp A---B RIP | | | | | +-------+ +-----+ ``` eigrpとripのネットワークをつないでいるルータA,B ルータAは RIP を EIGRP として再配布する設定 ルータBは EIGRP を RIP として再配布する設定 ルータAでの設定 `#(config) router eigrp 100` `#(config-router) redistribute rip metric 1000 1 255 25 1500` `#(config-router) redistribute rip metric 100000 10 255 25 1500 (FastEthernetなら多分こっち)` `//redistribute <再配送元プロトコル> metric <帯域幅[kbps]> <遅延[10μs]> <信頼性 (n/255)> <負荷 (n/255)> <MTU>` `#(config-router) network ルータBのネットワーク` `#(config-router) exit` `#(config) router rip` `#(config-router) network ルータBのネットワーク` ルータBでの設定 `#(config) router rip` `#(config-router) redistribute eigrp 100 metric 5` `redistribute <再配送元プロトコル> metric <シードメトリック値>` `#(config-router) network ルータAのネットワーク` `#(config-router) exit` `#(config) router eigrp 100` `#(config-router) network ルータAのネットワーク [ワイルドカードマスク]` `#(config) router rip` `#(config-router) redistribute static` `> host [name]` ### 前期テスト範囲 ``` ・インターフェイスにIPアドレスをつける ip address no shutdown ・スタティックルート ip route <> <> <> デフォルトルート(0.0.0.0) ・ダイナミックルーティング router rip router eigrp network <> <> no auto-summary (eigrp) RIPバージョン redistribute <> <> <> <>... ・パスワード コンソール/TELNET/管理者モード enable secret ・showコマンド show running-config show ip route show ????? ・設定の保存 copy running-config startup-config write ``` ## パケットフィルタリング パケットAは通す、Bは通さない ### アクセスリストを作る(スタンダードorエクステンド) `(config)#ip access-list standard [number]` \[number\]番のアクセスリストの作成 `(config-std-nacl)#permit host [ipアドレス]` 通過を許可**する**ipアドレス `(config-std-nacl)#permit [ipアドレス] [ワイルドカードビット]` 通過を許可**する**ipアドレスとワイルドカード `(config-std-nacl)#deny host [ipアドレス]` 通過を許可**しない**ipアドレス 再低の優先度で、`deny any`が適用される。 `(config-std-nacl)#permit any`他を許可 `(config)#ip access-list extended [number]` 拡張アクセスリストの作成(ただし、番号は100-199) 拡張アクセスリストでは、 + ソースアドレス + ディスティネーションアドレス + ソースアドレス + ディスティネーションアドレス + プロトコル が指定可能 `(config-ext-nacl)# permit プロトコル 送信元ipアドレス ワイルドカードビット [送信元ポート番号の判定式 判定式の値] 宛先ipアドレス ワイルドカードビット [宛先ポート番号の判定式 判定式の値]` e.g. `(config-ext-nacl)# permit tcp 192.168.1.0 0.0.0.254 192.168.2.0 0.0.0.127 eq 80` `(config)# int fa 0/0` `(config-int)# ip access-group 100 in` `(config)#no ip access-list (standard|extended) [number]` \[number\]番のアクセスリストの削除 ### インターフェイスに適用する `(config)#int fa 0/0` `(config-if)#ip access-group [number] [in/out]` (ルーターに入るのはin 出るのはout) ### 問題 #### 偶数だけ通す \>\>\>どういうことや<<< ワイルドカードビットが1のところは何であっても合致する(正規表現的な) `permit [192.168.1.0] 0.0.0.254(1111 1110)` ワイルドカードの最下位ビットが0 -> 最下位ビットは固定 -> ところで192.168.1.0の最下位ビットは0 ∴絶対偶数!! #### 奇数だけ通さない \>\>\>どういうことや<<< 1のところは何でもいい `deny [192.168.1.1] 0.0.0.254(1111 1110)` `petmit any` ↑1の部分は固定で1なので絶対奇数!! 暗黙のdenyがあるのでpermit anyをつける (でもこれって偶数だけ通すのと同じなのではおっと誰か来たようだ) 違うんだよなぁ。。。 「偶数だけ通す」では、後のコマンドで奇数の許可を追加できるが、「奇数だけ通さない」では、奇数の許可の追加ができない(できるけどやりにくい) 192.168.1.64~192.168.1.95を許可 \>\>\>どういうことや<<< 64(01000000) 95(01011111) `permit [192.168.1.64] 0.0.0.31(0001 1111)` ↑下位5bitが可変! #### さらに例題 192.168.1.0/24ネットワークをA、192.168.2.0ネットワークをBとする + Aで偶数のIPアドレスを持つPCはBで偶数IPアドレスを持つサーバーとhttp通信可能 ```pug permit tcp 192.168.1.0 0.0.0.254 192.168.2.0 0.0.0.254 eq 80 ``` + Aで奇数のIPアドレスを持つPCはBで奇数IPアドレスを持つサーバーとhttps通信可能 ```pug permit tcp 192.168.1.1 0.0.0.254 192.168.2.1 0.0.0.254 eq 443 ``` + Aで8の倍数のIPアドレスを持つPCはBで192.168.2.100~192.168.2.200野中のIPアドレスを持つサーバーとhttp,https通信可能 ```pug deny tcp 192.168.1.0 0.0.0.248 192.168.2.64 0.0.0.31 //deny[64,95] deny tcp 192.168.1.0 0.0.0.248 192.168.2.96 0.0.0.3 //deny[96,99] deny tcp 192.168.1.0 0.0.0.248 192.168.2.224 0.0.0.31 //deny[224,255] deny tcp 192.168.1.0 0.0.0.248 192.168.2.208 0.0.0.15 //deny[208,223] permit tcp 192.168.1.0 0.0.0.248 host 192.168.2.200 eq www //permit 200 permit tcp 192.168.1.0 0.0.0.248 host 192.168.2.200 eq 443 //permit 200 deny tcp 192.168.1.0 0.0.0.248 192.168.2.200 0.0.0.7 //deny[200,207] permit tcp 192.168.1.0 0.0.0.248 192.168.2.64 0.0.0.191 eq www //permit [64,255] permit tcp 192.168.1.0 0.0.0.248 192.168.2.64 0.0.0.191 eq 443 //permit [64,255] ``` \begin{align} S &= [64,255] - [200,207] + {200} - [208,223] - [224,255] - [64,95] - [96,99] \\ &= [64,255] - [201,255] - [64,99] \\ &= [100,200] \end{align} ### ICMPのアクセスリスト **`(permit|deny) icmp <s_net> <s_wcb> <d_net> <d_wcb> [Type]`** ```json icmp: { 0: echo-reply, 8: echo } ``` [詳しいICMPのリスト](https://www.infraexpert.com/info/5.0adsl.htm) #### 例題 + 192.168.1.0/24のPCは192.168.2.0/24のサーバからのpingに応答可能 + 192.168.1.[64,95]のPCは192.168.2.[2,3]のサーバとhttp通信可能 ```pug permit icmp 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255 echo-reply permit tcp 192.168.1.64 0.0.0.31 192.168.2.2 0.0.0.1 eq www ``` #### 例題 eqの書く位置おかしくない? ソースのポートなので。。。 HA? \<from\>\<to\> じゃないんか 先生のと答え違うくて草、まあ僕のも正解や ```pug access-list 100 permit tcp 202.24.246.0 0.0.0.127 202.24.247.128 0.0.0.127 eq www access-list 100 permit tcp 202.24.246.128 0.0.0.127 202.24.247.0 0.0.0.127 gt 1023 access-list 110 permit tcp 202.24.247.0 0.0.0.127 202.24.246.128 0.0.0.127 eq 443 access-list 110 permit tcp 202.24.247.128 0.0.0.127 202.24.246.0 0.0.0.127 gt 1023 ``` OR先生の解法 ```pug access-list 100 permit tcp 202.24.246.0 0.0.0.127 202.24.247.128 0.0.0.127 eq www access-list 100 permit tcp 202.24.246.128 0.0.0.127 eq 443 202.24.247.0 0.0.0.127 access-list 110 permit tcp 202.24.247.0 0.0.0.127 202.24.246.128 0.0.0.127 eq 443 access-list 110 permit tcp 202.24.247.128 0.0.0.127 eq www 202.24.246.0 0.0.0.127 ``` #### 例題(2020-11-9) ```pug //A access-list 100 permit tcp 192.168.1.0 0.0.0.255 192.168.4.0 0.0.0.255 eq www //to C http access-list 100 permit icmp 192.168.1.0 0.0.0.255 192.168.3.0 0.0.0.255 echo //to B ping access-list 100 permit icmp 192.168.1.0 0.0.0.255 192.168.3.0 0.0.0.255 echo-reply //from B ping access-list 100 permit icmp 192.168.1.0 0.0.0.255 192.168.4.0 0.0.0.255 echo-reply //from C ping //B access-list 100 permit tcp 192.168.3.0 0.0.0.255 192.168.4.0 0.0.0.255 eq www //to C http access-list 100 permit tcp 192.168.3.0 0.0.0.255 192.168.4.0 0.0.0.255 eq 443 //to C https access-list 100 permit icmp 192.168.3.0 0.0.0.255 192.168.1.0 0.0.0.255 echo //to A ping access-list 100 permit icmp 192.168.3.0 0.0.0.255 192.168.1.0 0.0.0.255 echo-reply //from A ping access-list 100 permit icmp 192.168.3.0 0.0.0.255 192.168.4.0 0.0.0.255 echo-reply //from C ping //C access-list 100 permit tcp 192.168.4.0 0.0.0.255 eq www 192.168.1.0 0.0.0.255 //from A http access-list 100 permit tcp 192.168.4.0 0.0.0.255 eq www 192.168.3.0 0.0.0.255 //from B http access-list 100 permit tcp 192.168.4.0 0.0.0.255 eq 443 192.168.3.0 0.0.0.255 //from B https access-list 100 permit icmp 192.168.4.0 0.0.0.255 192.168.1.0 0.0.0.255 echo //to A ping access-list 100 permit icmp 192.168.4.0 0.0.0.255 192.168.3.0 0.0.0.255 echo //to B ping ルータへのpingもdeny対象(忘れがち) どうするんや ``` #### 例題(2020-11-13) ```pug //A access-list 100 deny icmp 172.16.0.0 0.0.255.255 172.17.0.0 0.0.0.255 access-list 100 deny icmp 172.16.0.0 0.0.255.255 172.17.255.255 0.0.0.0 access-list 100 permit icmp 172.16.255.0 0.0.0.255 172.17.255.0 0.0.0.255 echo access-list 100 permit icmp 172.16.255.0 0.0.0.255 172.17.255.0 0.0.0.255 echo-reply access-list 100 deny icmp 172.16.0.0 0.0.255.255 172.17.255.0 0.0.0.255 access-list 100 permit icmp 172.16.0.0 0.0.255.255 172.17.0.0 0.0.255.255 echo access-list 100 permit icmp 172.16.0.0 0.0.255.255 172.17.0.0 0.0.255.255 echo-reply //B access-list 100 deny icmp 172.17.0.0 0.0.255.255 172.16.0.0 0.0.0.255 access-list 100 deny icmp 172.17.0.0 0.0.255.255 172.16.255.255 0.0.0.0 access-list 100 permit icmp 172.17.255.0 0.0.0.255 172.16.255.0 0.0.0.255 echo access-list 100 permit icmp 172.17.255.0 0.0.0.255 172.16.255.0 0.0.0.255 echo-reply access-list 100 deny icmp 172.17.0.0 0.0.255.255 172.16.255.0 0.0.0.255 access-list 100 permit icmp 172.17.0.0 0.0.255.255 172.16.0.0 0.0.255.255 echo access-list 100 permit icmp 172.17.0.0 0.0.255.255 172.16.0.0 0.0.255.255 echo-reply ``` ```pug //A access-list 100 deny tcp 172.16.0.0 0.0.255.255 172.17.0.0 0.0.0.255 # 172.16.x.x -> 172.17.0.x access-list 100 deny tcp 172.16.0.0 0.0.0.255 172.17.0.0 0.0.255.255 # 172.16.0.x -> 172.17.x.x access-list 100 permit tcp 172.16.255.0 0.0.0.255 eq 443 172.17.0.0 0.0.255.255 established # 172.16.255.x (443) -> 172.17.x.x ACK access-list 100 permit tcp 172.16.0.0 0.0.254.255 172.17.255.0 0.0.0.255 eq www # 172.16.[偶数].x -> 172.17.255.x (80) //B access-list 100 permit any any established access-list 100 deny tcp 172.17.96.0 0.0.3.255 172.16.255.0 0.0.0.255 eq 443 access-list 100 permit tcp 172.17.96.0 0.0.31.255 172.16.255.0 0.0.0.255 eq 443 access-list 100 permit tcp 172.17.128.0 0.0.63.255 172.16.255.0 0.0.0.255 eq 443 access-list 100 permit tcp 172.17.193.0 0.0.7.255 172.16.255.0 0.0.0.255 eq 443 access-list 100 permit tcp 172.17.200.0 0.0.0.255 172.16.255.0 0.0.0.255 eq 443 ``` ### 設定ファイル ```pug ! interface <> ip address <> <> ip access-group [number] (in|out) ... ! ... ! access-list [number] (permit|deny) host [ip address] access-list [number] (permit|deny) [ip address] [wildcard bits] ! ``` ## サブネット ### シチュエーション あなたはブラック企業の新人ネットワーク管理者です! 先輩のネットワーク管理者から仕事を丸投げされました!(よくある話) 企業のネットワークは、企画部、開発部、経理部、営業部の4つの部署を持ちます。 企業はIPアドレスは、133.1.0.0/16を所持しています。 ネットワークのトポロジーは固定されています。 なお、外部接続はありません。 ``` +--------| |-------+ | +-(x)-+ | | | | | [企画] [開発] [経理] [営業] ``` 各部署の規模の上限は以下の通りです。 | | 企画 | 開発 | 経理 | 営業 | | --- | -----:| ------:| -----:| ------:| | 個 | 5,000 | 10,000 | 5,000 | 10,000 | | 鯖 | 200 | 200 | 200 | 200 | | 写 | 1,000 | 10 | 500 | 1,000 | | 他 | 0 | 100 | 0 | 10,000 | | 計 | 6,200 | 10,310 | 5,700 | 21,200 | IPのホストの値は、 $ルータ < \text{PC} < 鯖 < プリンタ < その他$ となるようにします。 以上の要件を満たすネットワークを構築しましょう! なお、手柄は当然先輩のものになります。 ### メモ /16 なので、ホストは$2^{16}-2=65534$部持てます /17 -> 32766部 /18 -> 16382部 /19 -> 8192部 ### Answer 133.1.0/19 企画 kk 133.1.64/18 開発 kh 133.1.32/19 経理 kr 133.1.128/17 営業 eg ``` x / \ x eg / \ kh x / \ kk kr ``` あたま$133.1$は共通のため省略 | | 企画 | 開発 | 経理 | 営業 | | --- | ------------------- | ---------------------- | ------------------- | ---------------------- | | 網 | $.0/19$ | $.64/18$ | $.32/19$ | $.128/17$ | | 路 | $.0.1$ | $.64.1$ | $.32.1$ | $.128.1$ | | 個 | $[.0.2, .19.137]$ | $[.64.2, .103.17]$ | $[.32.2, .51.137]$ | $[.128.2, .167.17]$ | | 鯖 | $[.19.138, .20.81]$ | $[.103.18, .103.217]$ | $[.51.138, .52.81]$ | $[.167.18, .167.217]$ | | 写 | $[.20.81, .24.56]$ | $[.103.218, .103.227]$ | $[.52.82, .54.69]$ | $[.167.218, .171.193]$ | | 他 | NULL | $[.103.228, .104.71]$ | NULL | $[.171.194, .210.209]$ | 閉区間は悪しき文化だ #### akatsuki's **0~255 は 256個だぞ☆☆☆☆☆☆** ``` 企画 → 6,200 →/19 → 133.1.192.0 /19 開発 → 10,310 →/18 → 133.1.128.0 /18 経理 → 5,700 →/19 → 133.1.224.0 /19 営業 → 21,200 →/17 → 133.1.0.0 /17 ``` (((経理|企画)|開発)|営業) ← 分割のイメージ ``` 0000 0000 <- 0 /17 1000 0000 <- 128 /18 1100 0000 <- 192 /19 1110 0000 <- 224 /19 1000 0000 <- 128 /17 0100 0000 <- 64 /18 0010 0000 <- 32 /19 0000 0000 <- 0 /19 ``` ### シチュエーション2 ``` (ISP) | | +-----(x)----+ | | | [情報] [電気] [機械] ``` | | 情報 | 電気 | 機械 | | --- | ------:| ------:| ------:| | 個 | 10,000 | 10,000 | 0 | | 鯖 | 1,000 | 0 | 0 | | 写 | 100 | 0 | 0 | | 他 | 10,000 | 0 | 10,000 | | 計 | 21,100 | 10,010 | 10,000 | 191.3.0.0/16を分割 /17 -> 32766部 /18 -> 16382部 ### Answer 191.3.0/17 info 191.3.128/18 elct 191.3.192/18 mchn ``` x / \ info x / \ elct mchn ``` 面倒なので、半開区間でかきまーす あと、191.3.を省略 | | 情報 | 電気 | 機械 | | --- | ---------------- | ---------------- | ---------------- | | 網 | $0/17$ | $128/18$ | $192/18$ | | 路 | $0.1$ | $128.1$ | $192.1$ | | 個 | $[0.2, 39.18)$ | $[128.2, 167.18)$ | NULL | | 鯖 | $[39.18, 42.250)$ | NULL | NULL | | 写 | $[42.250, 43.94)$ | NULL | NULL | | 他 | $[43.94 ,82.110)$ | NULL | $[192.2, 231.18)$ | #### akatsuki's /16 -> 65534部 /17 -> 32766部 /18 -> 16382部 /19 -> 8192部 191.3.0.0/16 ``` 情報 → 21,100 →/17 → 191.3.0.0 /17 電気 → 10,010 →/18 → 191.3.128.0 /18 機械 → 10,000 →/18 → 191.3.192.0 /18 ``` ### シチュエーション3 ``` +-----(x)----+ | | | [営業] [開発] [社長室] ``` | | 営業 | 開発 | 社長室 | | --- | ----:| ----:| ------:| | 個 | 30 | 30 | 1 | | 鯖 | 10 | 10 | 0 | | 写 | 20 | 10 | 0 | | 他 | 2 | 2 | 0 | | 計 | 62 | 52 | 1 | 202.24.246.0/24を分割 /24 -> 256 /25 -> 128 /26 -> 64 /30 -> 4 /31 -> 2 ### Answer 202.24.246.128/25 営業 202.24.246.64/26 開発 202.24.246.0/30 社長室 ``` x / \ x 営業 / \ / 開発 -- / \ 社長室 * ``` $202.24.246.$を省略 | | 社長室 | 開発 | 営業 | | --- | ------- | ----------- | ----------- | | 網 | $0/30$ | $64/26$ | $128/26$ | | 路 | $1$ | $65$ | $129$ | | 個 | $2$ | $[66,96)$ | $[130,160)$ | | 鯖 | NULL | $[96,106)$ | $[160,170)$ | | 写 | NULL | $[106,116)$ | $[170,190)$ | | 他 | NULL | $[116,118)$ | $[190,192)$ | | 全 | $3$ | $127$ | $255$ | #### akatsuki's /24 -> 254部 /25 -> 126部 /26 -> 62部 /27 -> 30部 /28 -> 14部 /29 -> 6部 /30 -> 2部 /31 -> 0部 > 存在しない :x: 202.24.246.0/24 ``` 社長室 → 1 →/30 → 191.3.0.0 /30 開発 → 52 →/26 → 191.3.128.0 /26 営業 → 62 →/26 → 191.3.192.0 /25 ``` ### シチュエーション4 ``` +------(x)-------+ | | | [職員室] [校長室] [PC教室] ``` | | 職員室 | 校長室 | PC教室 | | --- | ----:| ----:| ------:| | 個 | 20 | 1 | 50 | | 鯖 | 1 | 0 | 2 | | 写 | 1 | 1 | 2 | | 他 | 10 | 2 | 9 | | 計 | 32 | 4 | 63 | #### わかっていること 202.24.246.119/26 <- 校長用のPC 学校は202.24.246.0/24を所持 /24 -> 256 /25 -> 128 /26 -> 64 /30 -> 4 /31 -> 2 119 = 0111 0111 職員室's network is 202.24.246.0/26 校長室's network is 202.24.246.64/26 PC教室's network is 202.24.246.128/25 | | 職員室 | 校長室 | PC教室 | | --- | ------ | ----------- | ----------- | | 網 | $0/26$ | $64/26$ | $128/25$ | | 路 | $1$ | $65$ | $129$ | | 個 | $[2,21)$ | $119$ | $[130,179)$ | | 鯖 | $22$ | NULL | $[180,181)$ | | 写 | $23$ | $120$ | $[182,183)$ | | 他 | $[24,33)$ | $[121,122)$ | $[184,192)$ | | 全 | $63$ | $127$ | $255$ | ↑あってる????? #### akatsuki's ``` 職員室 -> 33+2 -> /26 -> 202.24.246.0/26 校長室 -> 4+2 -> /26 -> 202.24.246.64/26 PC教室 -> 63+2 -> /25 -> 202.24.246.128/25 ``` ## VLAN ### VLANを叩き割る ``` > en # conf t (config) # vlan 10 (config-vlan) # name info (config-vlan) # exit (config) # vlan 20 (config-vlan) # name elec (config-vlan) # exit (config) # int fa0/1 (config-if) # switchport access vlan 10 (config-if) # exit (config) # int fa0/2 (config-if) # switchport access vlan 20 (config-if) # exit >>>繋がらない<<< >>>お め で と う<<< ``` ``` (config) # int gigabitEthernet 0/1 (config-if) # switchport mode trunk (config-if) # switchport trunk allowed vlan 20 (config-if) # switchport trunk allowed vlan add 40 ``` ## 総括 本間先生のネットワークのテストは運ゲー! ### サイト [ipアドレス調べる](https://note.cman.jp/network/subnetmask.cgi) [こまんど](https://www.alaxala.com/jp/techinfo/archive/manual/AX8600R/HTML/12_8_F/CFGUIDE/0448.HTM) [2進数↔10進数](https://hogehoge.tk/tool/number.html) [krunker.io](https://sh.rustup.rs)