#python #linux #network #cisco
Python
Linux
状態チェック
## アップデート # RedHat系(RPM) sudo dnf check-update sudo dnf upgrade -y [個別RPMパッケージ] # Debian系(deb) sudo apt update apt list --upgradable sudo apt upgrade -y [個別debパッケージ] ## ディストリビューションのバージョン # RedHat系 Debian系 共通 cat /etc/os-release # Debian系 cat /etc/lsb-release ## ホスト名確認 hostnamectl hostname ## OS情報 # 共通 uname -a # OS, PC名, kernel, -v情報全て uname -r # kernelバージョン確認 ## 時刻 timedatectl # タイムゾーン・時刻設定の確認 LANG=C date # 現在時刻の確認 ## ログインシェル初期設定 echo $SHELL ## パーミッション初期設定 umask # デフォルトのパーミッション確認(RedHat系 0002)(Debian系 022) umask -S # シンボル形で確認 ## ドライブの空き容量確認 df -h --total # デフォはバイト表示 -h(1024B単位でG,M,K表示) --total最後に合計が表示される ## ディレクトリの使用量の確認 du -sh ~/Onedrive(例) # 親ディレクトリにまとめて表示し、まとまった使用量で表示(この場合、--totalは意味ないから割愛) du -h --total ~/snap(例) # 子ディレクトリを表示し、それぞれの使用量も全て表示 ▲とんでもなく長くなる時あるから注意! ## メモリ使用量の確認 free # KB表示 ## フォルダツリー表示 tree ~/snap # システムの負荷状況を確認 vmstat -SM # Virtual Memory # -SM はMB表示
ディレクトリ・ファイル操作1
ディレクトリ・ファイル作成 ls -1h mkdir -p training/dir #デフォ 775 (directory) touch training/file #デフォ 664 (file) ls -lh training rm training/file # 一旦消して・・ dd if=/dev/zero of=training/file bs=500KB count=2 # 1MBサイズのfileを作成 #デフォ 644(file) ls -lh training ディレクトリ移動 cd training パーミッション編集 chmod 777 dir file # ディレクトリ権限とファイル権限を777に変更 ls -lh chmod go-w dir # ディレクトリ権限を755に変更 ls -lh chmod a-wx file # ファイル権限を444に変更 chmod u+wx file # ファイル権限を744に変更 ls -lh
変数
echo '#!/bin/bash' > file # ファイルにプログラムを書き込み echo 'echo "My name is $name."' | tee file # 追記 ${name}も可 cat file ./file # プログラム実行(u=rwxであること) シェル変数 name=masa # シェル変数の定義 echo $name set | grep masa export name # 環境変数に設定 printenv | grep masa export -p | grep masa export -n name # 環境変数からnameを削除 ./file # masaが表示されなくなったことを確認 export -p | grep masa unset name # シェル変数からnameを削除 echo $name # 消えたことを確認 set | grep masa 環境変数の全体確認 printenv | tr ':' '\n' # : を改行に変換して整形表示 通っているパスを確認 echo $PATH | tr ':' '\n' | sort (| grep ***) # sort追加で重複も視認 cat ~/.bashrc | more -10 # 大元のファイルはコレ
ディレクトリ・ファイル操作2
cp file dir/copiedfile ls -lh dir ./dir/copiedfile # 実行 # 圧縮ファイルを作っておく tar -zcvf dir.tar.gz dir # tar.gz形式でdirを圧縮(デフォルトで再帰的) zip -r dir.zip dir # zip形式でdirを再帰的に圧縮
データ転送
AWSでEC2(RHEL9)を立ち上げる ## 別シェル(別PCでも可) ssh -i keypair.pem ec2-user@RHEL_GIP # AWSのRHEL9 EC2にログイン su - masa # masaにユーザ変更 mkdir receive # SCPでファイルを受け取る為のディレクトリを作成 ## 元シェル find ~ -name 'keypair' scp -i keypair.pem -r dir masa@RHEL_GIP:/home/masa/receive # dirを圧縮せずに再帰的に転送 scp -i keypair.pem dir.tar.gz masa@RHEL_GIP:/home/masa/receive # tar.gzを転送 scp -i keypair.pem dir.zip masa@RHEL_GIP:/home/masa/receive # zipを転送 ## 別シェル receiveディレクトリ内を確認 cd receive ls -lh dir dir.tar.gz dir.zip ls -lh dir # -r dirで送ったディレクトリを確認 rm -r dir tar -zxvf dir.tar.gz # tarで送ったファイルを解凍 rm -r dir unzip dir.zip # zipで送ったファイルを解凍 ※RHELにはunarコマンドは存在しないらしい・・・ rm d* # 圧縮ファイルは消しておこう receiveディレクトリは残しておこう 別シェルを落として、EC2は停止しておく
ネットワーク試験
## 応答用メッセージを作成 echo 'Connection test successful!' > response ## 簡易的に疑似サーバを建てて疎通試験 nc -l 8000 < response # 8000番ポートでlisten(-l)状態に nc dynabook 8000 # 別シェルから疑似サーバに接続試験 > Connection test successful!
ディレクトリ・ファイル操作3
mv file dir/movedfile ls -lh dir ls -lh rm dir/*file # copiedfile, movedfile両方消す rm -r dir* # dirディレクトリ, dir.tar.gz, dir.zip すべて一気に消せる cd # ホームディレクトリに移動 rmdir training # これできれいさっぱり
プロセス監視
uptime # 稼働時間 プロセス実行終了(パフォーマンスモニタを見ながら) yes > /dev/null & # [1] バックグラウンド top # [2] uptimeと%CPUを確認 # 起動時刻,稼働時間,負荷平均,タスク,PID,CPU使用量率,メモリ使用量率 Ctrl+z # [2]topを一時停止 ps kill -9(-kill) ***** # yesのPID [1]- Killed yes > /dev/null ps fg 2(%2) # [2]topをフォアグラウンドに戻す Ctrl+c # [2]topを終了 ps
ネットワーク監視
(sudo dnf install net-tools) curl inet-ip.info # 自宅ルータのWAN側GIPアドレス curl globalip.me # 同じく自宅ルータのWAN側GIPだが、反応がちょっと遅い(なぜ?) networkctl status # 自PCのネットワーク情報 ifconfig # NWインターフェース確認、設定 ip -4 a # 各IFのIPv4アドレス確認(addr | address でも可) route # ルートテーブル情報 ss -pantsu # ソケット情報 ping -c 4 8.8.4.4 # GoogleセカンダリDNSサーバにping4回 traceroute -n 8.8.4.4 # 名前解決せず高速に経路確認 tracepath -n 8.8.4.4 # pmtu dig schneehoppli.com any # A:NWアドレス NS:ネームサーバ MX:メールサーバ SOA:SOA情報 ANY:すべて host -v schneehoppli.com # 同上 nslookup schneehoppli.com # GIPアドレス調査 curl -I https://www.schneehoppli.com # レスポンスヘッダ curl -v https://www.schneehoppli.com # コンテンツ取得時の詳細ログ
ネットワーク
TCP/IPネットワークで用いられるプロトコルは、大きくわけて2つに分類できる
・IGP(Interior Gateway Protocol)・・・AS内部で用いられるプロトコル
・EGP(Exterior Gateway Protocol)・・・AS間で用いられるプロトコル
※インターネットの中で、1つのルーティングポリシーに則って運営されているネットワークをAS(Autonomous System:自律システム)と呼ぶ
ルーティングプロトコル
RIP Routing Information Protocol
・IGP(AS内部)
・過去(ルータの計算能力がまだ低く、複雑な処理が難しかった時代)の主流だった
・通過するルータの数(ホップ数)でルートを選ぶ
・30秒ごとにルート情報を送信し、ネットワークの状態を把握する
ルータの台数が増えると、ネットワークに負荷がかかるうえ、コンバージェンス時間が長くなるという欠点がありました。
・小規模なネットワークでは、コンバージェンス時間はあまり問題にならないため、今でもRIPが使われている
OSPF Open Shortest Path First(最も短い経路を最初に開く)
・IGP(AS内部)
・リンクステート型
各ルータが接続されている回線の帯域幅といったネットワークの接続状況(Link State:リンクステート)を交換し、
その情報をもとに1つのルーティングテーブルを作り上げ、全ルータで共有し、最適なルートを選び出します。
・「コスト」という考え方に基づいてルートを選択
広帯域な回線ほどコストが小さいと考え、ルートを選ぶときには目的地点までのコストを加算していき、
合計が最も小さいルートを最適なルートとみなす
コストは帯域に応じてデフォルト値が定められている
一般的にはネットワークの設計方針や運用方針に基づいてネットワーク管理者が設定します。
例えば、高速の回線には小さいコストを、低速の回線には大きなコストを設定して、ネットワークの最適化を図ります。
・コンバージェンス時間が短い
AS内の全ルータが共通のルーティングテーブルを保有
ネットワークに変更があったときには、変更があった差分情報のみを他のルータに伝えるトリガーアップデートを行います。
そのため、ネットワークの変更が全ルータに伝わるまでの時間「コンバージェンス時間」が短くなっています。
・ループが発生しない
コンバージェンスが高速に行われるため、ルーティングが正しく行われないループが発生する確率もきわめて小さい。
・負荷分散が可能
同じコストのルートが複数存在した場合、複数のルートにパケットを分散して送り出し、
負荷分散(ロードバランシング)することができます。
・主に大規模ネットワークで使われる
・OSPFの「エリア」とは
大規模なネットワークではルータの数が多くなり、リンクステート情報も大きくなって、ルータにかかる負荷が大きくなります。
その結果、ネットワーク全体のスピードが低下してしまうこともあります。
そうした問題を解決するために、OSPFでは「エリア」という考え方が導入されています。
ネットワークを分割して、効率的に運用・管理しようという考え方です。
エリアを分ける際には「エリア0」と呼ばれる中心となるエリア(バックボーン)を作り、
他のエリア(エリア1、エリア2、エリア3…)は必ずエリア0に接続します。
エリア0と、他のエリアをつなぐルータは「エリア境界ルータ(Area Border Router:ABR)と呼ばれます。
エリア内のルータが持つリンクステート情報は、エリア内の情報がメインになり、エリア外の情報は概要のみになるため、
ルータにかかる負荷は軽減できます。
・OSPFの仕組みについて
仕組み①Helloパケットで接続確認
各ルータは隣接するルータにHelloパケットを送信します。
各ルータがその存在を他のルータに知らせることは、ルーティングテーブルを作成するための基本となります。
Helloパケットは10秒間隔で常に送信されます。Helloパケットが通常の4倍の時間(40秒)届かなかった場合は、
隣接するルータが何らかの理由でネットワークに存在しなくなったと判断されます。
仕組み②リンクステートメントの交換
隣接するルータとの接続が確認できたら、接続状況(リンクステートメント)を交換します。
接続状況を送るパケットをLSA(Link State Advertisement)と呼びます。
ルータはLSAを受け取ると、LSDB(Link State Database)と呼ばれるデータベースを更新し、隣接するルータと同期させます。
この作業を繰り返すことで、AS(自律システム)内、あるいはエリア内のルータがすべて同じLSDBを保持することになります。
仕組み③ルーティングテーブル作成
LSDBをもとに、SPFアルゴリズムと呼ばれる計算方法を用いて、ルーティングテーブルを作成します。
SPFは、Shortest Path Firstの略で、最もコストが低いルートを選ぶアルゴリズムです。
OSPFの名称はここから来ています。
BGP Border Gateway Protocol() TCP 179
・EGP(AS間)
・BGPでは経路制御を行う組織ごとにインターネットの世界で唯一の番号が割り当てられ、個々の経路を識別します。
このインターネットの世界で唯一の番号をAS(Autonomous System)番号と呼びます。
・AS番号はIANA(Internet Assigned Numbers Authority)※2が管理しています。
IANAはAS番号をある程度のブロック単位でRIR(地域インターネットレジストリ:Regional Internet Registry)へ割り振りを行っており、RIRからNIR(国別インターネットレジストリ:National Internet Registry)やLIR(ローカルインターネットレジストリ:Local Internet Registry)へさらに割り振られるという階層構造で管理されています。
・BGPによる経路制御を始めるには、このAS番号の割り当てを受けることが必要です。
AS番号はRIRやJPNICなどのNIRから割り当てを受けることができます。
・
Cisco
Linux端末からCisco機器にコンソール接続(cuコマンド使用)
cu -s 9600 -l /dev/ttyUSB0
Linux端末からCisco機器にコンソール接続(minicom使用)
# シリアルポートの確認(USBにシリアルケーブルを挿した状態で) ls /dev | grep ttyUSB ttyUSB0 # minicomをシリアルポート指定で起動(英語の方が表示が整う) LANG=C minicom -D /dev/ttyUSB0 # minicomを終了するときは Ctrl+A z x Enter
状態確認コマンド
# ディレクトリ構造 dir # show clock # SYSクロックの確認 # show calendar # HWクロックの確認(startup) # 全行表示 --More--にならない ter len 0 # バージョン情報 show ver # show run # show start # show inventory # show env all # show ip int brief # show int status # show int trunk # show ip route # show ip ospf nei # show ip ospf database # show standby brief # show ntp associations # show cdp nei # show license status # show log # show switch # show switch detail
設定コマンド