浅ぁいネットワーク講座　第４回

この記事はネットワークのことをゆっくり解説していきます
その度合いは浅い（ｱｻｧｲ！！！）のでご了承ください


今回はNATとパケット周りのお話しです

ルーティングの方が先だろと思いましたが、仕事で再度勉強することがあり
その流れで（ついでで）記事を起こします


#### ■概念ざっくり理解していこう編

NATとはnetwork address translationの略で、ネットワークアドレス変換といいますが、大抵の人はナットと言っています
語気が強くなった時はナットゥ！ですかね

・・・役割は名前の通りで、送信元や宛先のIPアドレスを別のIPアドレスに変換することとなります
皆さんは自宅でインターネットを使っていると思いますが、インターネットを見に行くときにIPアドレスはプライベートアドレスから自動でグローバルアドレスに変わっています(送信元変換）
これもNATです

他の用途としてはルーティングの代用だったり、アプリケーションの必須要件だったりします

NATは戻りの通信を考慮するので、NATした機器にNATテーブルというものがあり、そこに情報が載ります（送信元,送信先,サービスなど)
このテーブルを見て変換対象の対を管理しています
					
<br>
<br>

###### NATの種類

NATにはいくつか種類があります

*・「静的NAT」(Static NAT)*
決められたIPアドレス1対1で変換します。大抵はグローバルIPアドレスとプライベートIPアドレスを変換するために使われます。



*・「静的NAPT」(Static NAPT)*
決められたIPアドレス + ポート番号を1対1で変換します。用途的に静的NATと同様です



*・「動的NAT」(Dynamic NAT)*
アドレスのプールがあって、そのアドレスプールから割り当てます。イメージとしては1対多ですね



*・「動的NAPT」(Dynamic NAT)*
送信元IPアドレスを、グローバルIPアドレスに変換します。お馴染家庭用のルータなどがそれです
送信元のポート番号を、使用していないポート番号に変換します。



では、NATの通信フローはどんな感じか？
以下に説明していきます(今回はFWでNATします)

**NATを介したTCPセッション確立フロー①**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603003/65421abf-b555-bdb4-30d2-5d29c802c629.png)
1.Host AよりHost B宛てにセッション確立要求(SYN)を送出します
2.FWにて”1”のパケット情報をキャッシュします
3.FWにてNAT変換及びInitial Sequence No.をランダムに変更し、Host B宛てに送出します


**NATを介したTCPセッション確立フロー②**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603003/b50e2c3e-f9ff-6a18-d416-59ea17cedf27.png)
4.Host BよりHost A宛てにセッション確立要求応答(SYN-ACK)を送出します
5.FWにて”2”でキャッシュした情報と比較し正規のパケットかどうか確認します
6.FWにてNAT変換及びACK No.(応答確認番号)を変更し、Host A宛てに送出します


**NATを介したTCPセッション確立フロー③**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603003/0cb263e7-7a6a-eb69-5e8e-31c2e80d79c6.png)
7.Host AよりHost B宛てにセッション確立応答(ACK)を送出します
8.FWにてNAT変換及びInitial Sequence No.を変更し、Host B宛てに送出します
9.Host BにてHost Aからのセッション確立応答(ACK)を受信し、セッション確立します
					
<br>
<br>

**NATを介したUDPトラフィックフロー①**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603003/8f8ee9ed-a2ca-dc58-137f-3ff787e4c7a2.png)
1.Host AよりHost B宛てにRequestパケットを送出します
2.FWにて”1”のパケット情報をキャッシュします
3.FWにてNAT変換し、Host B宛てに送出します

**NATを介したUDPトラフィックフロー②**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603003/205b704e-3314-6d21-4b63-9d170e1a56df.png)
4.Host BよりHost A宛てにReplyパケットを送出します
5.ASAにて2.でキャッシュした情報と比較し正規のパケットかどうか確認します
6.ASAにてNAT変換し、Host A宛てに送出します
※機器によって、UDPの場合はタイムアウト値があり、時間が経過してもReplyがない場合は、セッション情報を消去する

<br>
<br>

###### MTUとウインドサイズ
まず、TCPとUDPをおさらいしましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603003/d5836d4a-2373-9a49-e6bb-1ed7238cd984.png)
通信パケットにはMTU（Maximum Transmission Unit）とウインドウサイズというものがあります

MTUは一つのパケットの最大サイズを表す値になります
通常、イーサネットのデータ部分は最大1500バイトになるので、それがMTUの値になります
そして、MTU値を超過するパケットは送信も受信もできないということになります

ウインドウサイズは、TCPでデータを送受信する場合に受信側からの受信確認を待たずに送信できるデータ量の上限を表します
ということは、ウインドウサイズに達するまで送信側はデータパケットを連続送信できます
つまり、ウインドウサイズを大きくすると送信できるパケットの数が増えることになります
					
<br>
<br>


###### ブラックホールルーター
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603003/b2e627cc-79c7-f1cb-1889-5360fb4e5605.png)
とある現場はブラックホールパケットって呼んでいましたが、そこだけのような気がします										
ルータ（FW）がブラックホールするので、ブラックホールルーターでいいと思います										
										
MTUのサイズ超過のせいで、パケットがロスする										
そして、戻りのメッセージも届かない										
										
よって、原因がわからない										
										
										
なので、pingコマンドなどでパケットサイズを調整して通信テストをするとわかる場合があります										
途中にあるルーターの設定にもよるので、サイズを何回か変更してテスト通信をすることをおすすめします										
										
										
										
例：windowsの場合はこんな感じ										
										
C:\Users>ping 8.8.8.8 -l 2000										
										
8.8.8.8 に ping を送信しています 2000 バイトのデータ:										
要求がタイムアウトしました。　<b>←余裕でサイズオーバーしているから</b>										
										
C:\Users>ping 8.8.8.8 -l 1400										
										
8.8.8.8 に ping を送信しています 1400 バイトのデータ:										
8.8.8.8 からの応答: バイト数 =68 (1400 を送信) 時間 =13ms TTL=117　<b>←きちんと指定通りのサイズで通信</b>										
<br>

				
				
		
##### ■前回の問題

・00:07:0E:00:00:00のMACアドレスはどこの機器でしょう

A.⇒
「MACアドレス　検索」でググれば、いろいろ出てくると思います
そこでMACアドレスを調べればOKです
答えはCiscoですね

・MACアドレスを書き換えるという手法があります
これによる影響はどんなものがありますか？適当に考えてみましょう

A.⇒
MACアドレスは基本ユニークなものなので、同じネットワーク内でかぶった場合は通信が正常にいかなくなる可能性があります
また、システムによって認証をMACアドレス単位で行うこともあるため、勝手に変えるとセキュリティ上のリスクもでてきます
<br>				
				
				
##### ■作業で失敗しないコツ

システムを構築、運用していく上で、作業ミス、失敗・・・<font color="blue">それはすなわちクビです</font>
・・・って言うのは言い過ぎかもしれませんが、そのシステムを利用している人たちに多大な迷惑をかける場合もあります

なので、慎重にやるのはもちろんなんですが
影響度に応じて必ず裏付けや確証を得てください

要は手順の確立や過去の実績を踏まえるということです

いきなりやりだして、それができたからって<font color="Red">「俺すげー！！」</font>ってなっても
たまたまできただけかもしれませんし、それが<b>失敗してたらどうするの？</b>ってことにもなりかねません

私の所感ではありますが、出来るエンジニアって言うのは
<font color="Red"><b>技術力だけではなく、調整力も兼ねそろえてる人だと思います



今回はこれで終わりです
ネットワークは対象のレベルによって教えることが幅広くなってきますので
うっすい感じでお送りします

byebye ヾ(❛ᴗ˂ )⌒♥			

powered by Mすた
https://m-suta.com/