コンテンツへスキップ

IOS操作

  • 特権モードに入る
    >enable
  • グローバルコンフィギュレーションモードに入る
    #configure terminal
  • ユーザモードで使用可能なコマンドリストを確認
    >?
  • 最近入力したコマンドの履歴
    #show history

Ciscoルータの基本設定

  • ルータの名前をNに設定
    (config)#hostname N
  • インターフェイスモードに入る
    (config)#interface fa0/0
  • IPアドレスの設定
    (config-if)#ip address 10.1.1.1 255.255.255.0
  • インターフェイスの有効化
    (config-if)#no shutdown
  • インターフェイスを管理的に無効化
    (config-if)# shutdown
  • EXECモードに対するローカルパスワード(暗号化なし)をpassに設定
    (config)#enable password pass
  • EXECモードに対するローカルパスワード(暗号化あり)をpass2に設定
    (config)#enable secret pass2
  • コンソールパスワードをpassに設定
    (config)#line console 0
    (config-line)#password pass
    (config-line)#login
  • 仮想端末(telnet)でパスワードをpassに設定(同時接続4まで)
    (config)#line vty 0 3
    (config-line)#password pass
    (config-line)#login
  • コンフィグレーション上の全パスワードの暗号化
    (config)#service password-encryption
  • Serial0/0インターフェイスに対する説明文の設定
    (config)#interface serial0/0
    (config-if)#description description2222
  • Serial0/0インターフェイスの帯域幅を128kbpsに設定
    (config)#interface s0/0
    (config-if)#bandwidth 128
  • MoTDバナーの設定(区切り文字 #)
    (config)banner motd #
  • バックツーバックシリアル接続を行うためのDCE側の設定(64kbps)
    (config-if)#clock rate 64000
  • 入力中にメッセージが割り込んで表示されたときのコマンドの再表示
    (config-line)#logging synchronous
  • EXECセッションタイムアウト時間を10分10秒に設定
    (config-line)#exec-timeout 10 10
  • EXEXセッションタイムアウトを防ぐ(タイムアウトしない)
    (config-line)#exec-timeout 0 0 or no exec-timeout
  • DNSサーバのIPアドレスの設定
    (config)#ip name-server 10.1.1.100
  • ドメイン名の設定
    (config)#ip domain-name a.com
  • DNSへの名前解決の無効化
    (config)#no ip domain-lookup
  • Cisco IOSで名前解決をする(name 10.1.1.1)
    (config)#ip host name 10.1.1.1

Ciscoルータの検証

  • ホストの確認
    #show hosts
  • fa0/0インターフェイスの設定パラメータおよび統計情報の表示
    #show interfaces fa0/0
  • DHCPアドレスプールの表示
    #show dhcp pool
  • DHCPサーバの統計
    #show ip dhcp server statistics
  • インターフェイスのIPに関する情報の表示
    #show ip interface
  • 全インターフェイスの状態を要約で表示
    #show ip interface brief
  • 実行中のコンフィギュレーションの表示
    #show running-config
  • NVRAMのコンフィギュレーションの表示
    #show startup-config
  • シリアルコントローラのハードウェアに関する固有情報
    ケーブルの種類などの表示(DTE,DCEどちらかなのか確認する)
    "show controllers serial0/0

Ciscoルータの管理

  • IOSのバックアップコピーをTFTPサーバへ作成
    #copy flash: tftp:
  • RAMの実行コンフィギュレーションをフラッシュメモリに格納
    #copy running-config flash:
  • 実行コンフィギュレーションをNVRAMに保存
    #copy running-config startup-config
  • TFTPサーバからRAM上にコンフィギュレーションをダウンロード
    #copy tftp: running-config
  • TFTPサーバにバックアップ済みのIOSをルータへ格納
    #copy tftp: flash:
  • Cisco IOSソフトウェアを保存するためにメモリの容量を調べる
    #show version
    #show flash:
  • フラッシュメモリの内容を表示
    #show flash
  • 拡張pingの実行
    #ping
  • ARPテーブルの表示
    #show arp
  • 特定のARPテーブルの表示
    #show ip arp 10.1.1.1
  • ルータに関する情報の表示(実行中のIOS、メモリサイズ、搭載しているインターフェイスの種類と数の表示)
    #show version
  • ルータ(10.1.1.1)へのtelnetの実行
    #telnet 10.1.1.1
  • telnet接続の終了
    #exit
  • ルータに対する接続状態(ライン接続)の表示
    #show users
  • telnetセッションの中断
    [ctrl]+[shift]+[6]キーを押した後、[x]キー
  • 中断したTelnetセッションの表示
    #show sessions
  • 事前に使用していた中断中のTelenetセッションの再開
    #resume(または[Enter]キー押下)
  • 中断中のTelnetセッションの再開(セッション 2)
    #resume 2
  • 直前に使用していた中断中のTelnetのセッションの終了
    #disconnect
  • デバッグメッセージにタイムスタンプ(ミリ秒単位)を追加
    (config)#service timestamps debug datatime msec
  • デバッグを実行する前に現在のCPU使用率の表示
    #show process
  • 実行中のデバッグを表示
    #show debugging
  • VTYセッション(Telnet接続)上でのデバッグに関する出力の表示
    #terminal monitor
  • すべてのデバッグの停止
    #undebug all(# no debug all)
  • パケットが宛先につくまでの確認
    #traceroute
  • copy以外で現在の設定をNVRAMへ保存
    #write memory
  • ルータのコンフィギュレーションレジスタをデフォルトに戻す
    (config)#config-register 0x2102
  • パスワードリセットのためのコンフィギュレーションレジスタの変更
    (config)#config-register 0x2142
  • TFTPサーバ(10.1.1.100)にあるIOSソフトウェアを使用したルータの起動
    (config)boot system tftp ~~~
  • NVRAMのコンフィギュレーションの消去
    #erace startup-config
  • ルータの再起動
    #reload
  • ルータの初期化
    #erace startup-config
    #reload
  • SSHでのみリモートログインの許可
    (config)#line vty 0 4
    (config-line)#tranceport input ssh
  • SSHサーバに対する接続のステータスの表示
    # show ssh
  • SSHのバージョンとコンフィギュレーション情報の表示
    #show ip ssh
  • CDPのグローバルな情報の表示
    #show cdp
  • 直接接続されたCiscoデバイスの要約情報の表示
    #show cdp neighbors
  • 直接接続された全Ciscoデバイスの詳細情報の表示
    #show cdp neighbors detail
  • 直接接続された特性のCiscoデバイスの詳細情報
    #show cdp entry デバイスID
  • CDPパケットの詳細情報
    #show cdp traffic
  • インターフェイスおよびCDPタイマー情報の表示
    #show cdp interface
  • CDPをデバイス全体で無効化
    (config)#no cdp run
  • インターフェイスでCDPを無効化
    (config-if)#no cdp enable
  • CDPv2のアドバタイズを無効化
    (config)#no cdp advertiese-v2

アドレスクラス

【クラスA】

  • 第一オクテットの先頭1ビットが「0」に固定
  • 第一オクテット:00000001~01111110(1~126)

【クラスB】

  • 第一オクテットの先頭2ビットが「10」に固定
  • 第一オクテット:10000000~10111111(128~191)

【クラスC】

  • 第一オクテットの先頭3ビットが「110」に固定
  • 第一オクテット:11100000~11101111(224~239)

予約済みアドレス

  • ネットワークアドレス:ホスト部が全て「0」
  • ブロードキャストアドレス:ホスト部が全て「1」
  • ループバックアドレス:127.x.x.x

グローバルIPアドレス(パブリックアドレス)

ISPから割り当てられる一意のアドレス

クラス範囲
A1.0.0.0 ~ 9.255.255.255
11.0.0.0 ~ 126.255.255.255
B128.0.0.0 ~ 172.15.255.255
172.32.0.0 ~ 191.255.255.255
C192.0.0.0 ~ 192.167.255.255
192.169.0.0 ~ 223.255.255.255

プライベートIPアドレス

家庭や組織で利用するためのアドレス
アドレス範囲はRFC1918で定義

クラス範囲
A0.0.0.0 ~ 10.255.255.255
B172.16.0.0 ~ 172.31.255.255
C192.168.0.0 ~ 192.168.255.255

サブネットマスク

オクテット内でサブネット化したときのサブネットマスク

1286432168421
110000000128
211000000192
311100000224
411110000240
511111000248
611111100252
711111110254
811111111255

n進数のまとめ

10進数012345678910111213141516
2進数0110111001011101111000100110101011110011011110111110000
16進数0123456789ABCDEF10

4月に引っ越しをしたあとに友人とスマブラSPのオンラインでマッチングするとエラーが発生してしまい対戦できなくなってしまった。

前提として
・引っ越し前は、友人と遊べていた。
・過去現在共にプロバイダーは違うがIpv6+

エラー内容については、以下サイトがわかりやすい

ひとまずポートを開放をしようと考え、貸し出されているルータの管理画面にアクセスをしたが何度やってもできない。
ルーターを貸してもらっているサポートセンターに電話で問合せをしたところ、そもそもルーターの管理画面にアクセス権利が私にはないようだ。
言われてみれば当たり前か......

解決方法


・管理会社にIPv4用のIPアドレスを教えてもらい、任天堂switchの設定画面でIPを手動入力すると友人とスマブラでマッチングが可能となった。
┗ ただし、Ipv6+と比べて回線速度が断然に落ちるので遊ぶ時間を選ばないとラグや遅延が発生してしまう。

※参考
任天堂スイッチ IPアドレス固定とDNSを指定する方法
https://www.akakagemaru.info/port/switch-staticip.html

・IPv6+のままで遊ぶ方法としてポート開放をするとかあるみたいだけど、サポートセンターに電話したところ、もう既にUDPのポートが全開放されているらしい。調査依頼は出したけどやや詰んでる

最近、サーバーのラック内のケーブル配線を実施する機会があった。
ラック内には、サーバーを40台ほど搭載させる。
サーバーの数だけケーブル配線が増える。
ケーブル配線は何も考えずにつなげるだけなら簡単ではあるが、今後のサーバー運用においての保守性を考えると奥が深い。

少なくともサーバーを交換するときに、サーバーをレールから外したあと、サーバーがほかのサーバーのケーブルに引っかかってケーブルが抜けたりしたら、クライアントに被害が発生する。

そのようなリスクを抑えるためにもケーブルの配線については丁寧にコンパクトにまとめられるように考えなければならない。
また、一度ケーブルを配線していけばいくほど後戻りが大変なため、念入りに計画を立てなければならない。私は実際にほぼ完成まで進めてケーブル配線も、後から保守性として駄目なことに気が付いてほぼ初めからやり直す苦い経験をした。

ケーブル配線から後の事柄を考えた行動が大切であるということを痛感した。
物事の考える量を今よりも増やすともに思考力の体力も鍛えないといけない。

ただ何かを作ることの体力とそれを作った後のことを考える体力を温存する思考を持つようにしてもいいいのかもしれない

vlanについてわかったことについて記載する

まずはブリッチについて

ブリッチはMACアドレスとポートをテーブルにしたもの。
ブリッジはMACアドレスを参照して、送信元のテーブルから送信先のテーブルへ転送する。
いわゆるフォワーディングができる。

たとえば、以下の場合、①からの②を送る場合、①のフレームに記載されている宛先MACアドレスをスイッチが確認して②へフレームを送信する。
①サーバー 192.168.10.1 送信元
②サーバー 192.168.10.2 送信先
③サーバー 192.168.10.3
④サーバー 192.168.10.4

一つのスイッチを論理的に複数に分けることができる。

例えば、先ほどの①から④までのサーバーを
①,②をvlan10  ③,④をvlan20に分けるとする。

vlan10
①サーバー 192.168.10.1 
②サーバー 192.168.10.2 

vlan20
③サーバー 192.168.10.3
④サーバー 192.168.10.4

その場合、vlan10からvlan20へフレームを送信することができない。
①から④までは同じスイッチ内ではあるが、スイッチが論理的に分割されたため、
①から③へフレームを転送ができなくなった。

プライベートな情報があるサーバーを見られたくない場合、
vlanを活用することでアクセスを制限することができる。

vpsからデータベースに接続する度に、
mysql -u user -ppasswd

とコマンドを入力をするのが面倒だった。
mysql と入力するだけでログインできることを知っていたけど、
方法がわからなかったので調べてみたらヒットしました。

https://ja.linux-console.net/?p=566

以下引用

設定ファイル〜/ .my.cnf を作成し、その下に設定を追加します( mysqluser  mysqlpasswd を自分の値に置き換えてください)。 。

[mysql]
user=user
password=password


だそうなので、上記に従って、
/root以下に.my.cnfを作成

vim .my.cnf

[mysql]以下を記入して保存
権限を600に変更

chmod 600 .my.cnf


その後、mysql とコマンドを入力するだけで実際にログインできた。
はい、幸せ。

シェルスクリプトでIPを引数にしたいとき、nslookupやdigを使用する時がある。
その結果からIPだけの文字列に整形をするのだが、IP以外にも切り取られてしまうことがある。

例えば、以下のコマンドの場合、digコマンドからIPを表示されない場合がある。

dig -4 $i | grep "IN" | grep -v ';' | awk '{print $5}'

どうにかならないか考えたところ、以下サイトが参考になった。


個人的にありがたかったのが、grepのオプション -o で、grepが一致した箇所だけを表示する。
それを踏まえて、dig のオプション -4でIPV4にしぼり、正規表現で3ケタの0-9までの文字列にしぼる。

dig -4 $i | grep "IN" | grep -Eo '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}'


上記のコマンドで現在は安定してIPを取得できている

Zabbixでホストを大量に抱えていると一気にアラート発生したときに確認に苦労する。
例えば、「aaa.comでアラートが発生しました」とアラートが発生したら、
まず、踏み台サーバーのコンソールにログインし、aaa.comのIPをnslookupで取得する。
次に取得したIPでssh接続。原因を調べて解決。のような流れ。

今回は、nslookupでドメインからIPを取得する流れが面倒だったため、/etc/hostsファイルに追記することで、
ドメインでssh接続できるシェルスクリプトを考えてみた。

mkhosts.sh

#!/bin/bash
header='Content-Type:application/json-rpc'
apiurl='http://000.000.000/zabbix/api_jsonrpc.php'
json='{"jsonrpc": "2.0","method": "user.login","params": {"user": "zabbixのユーザー名","password": "Zabbixのパスワード"},"id": 1,"auth": null}'

zbxauth=$(curl -sS -X POST -H "${header}" -d "${json}" ${apiurl} | jq -r ".result")
echo $zbxauth

json='{"jsonrpc": "2.0","method": "host.get","params": {"output": ["hostid","host"]},"id": 2,"auth": "'$zbxauth'"}'
echo $json | jq

hostlist=`curl -sS -X POST -H "${header}" -d "${json}" ${apiurl} | jq | grep "host"| grep -v "hostid" | awk -F: '{print $2}' | sed "s/\"/""/g" `

for i in $hostlist 
do

#任意でnslookupの結果をIPのみに整形する
iplist=`nslookup $i | grep "Address" | grep -v "\#53" |  awk -F: '{print $2}'` 
echo "$iplist $i"| sed 's/^[ \t]*//' >> /etc/hosts 
done

全体の流れとして、ZabbixのAPIからホスト名を取得し整形する。
次に取得したホスト名を引数にしてfor文でnslookupをかけてIPを取得する変数をつくる
最後に、echoで「IP ホスト名」の形にしたものを、/etc/hosts ファイルの最終行に追記する。
mkhosts.sh 実行後、/etc/hostsファイルを確認すると、
IP ホスト名
となっているはず。
その後、

ssh ホスト名

で対象のホストに接続できると思うので確認してみてほしい。

参考
https://www.zabbix.com/documentation/4.4/en/manual/api
https://tech-mmmm.blogspot.com/2019/02/zabbix-api.html
https://orebibou.com/ja/home/201607/20160712_003/
https://ex1.m-yabe.com/archives/3306

SPFレコードについて書くのが苦手だったけど、
今回で仕事で必要な知識だったので知ったことをまとめてみる。

まず前提として、SPFレコードは、本人確認に利用されている。
具体的には、受信サーバーが、送信サーバー元のDNSに問い合わせて、
送信者のIPとDNSに記載されているSPFレコードのIPが一致していたら認証成功。

そして本題の書き方の例

v=spf1  +ip4:192.168.10.1  –all

v=spf1 はspfを書く際のおまじないのようなもの。
+ip4:192.168.10.1 の +(プラス)については認証許可を意味する。
なので、 192.168.10.1 のメール送信を許可する
–all の-(マイナス)については、拒否を意味する。
なので、全てのIPを拒否するということ。

つまり今回は、 192.168.10.1 以外からのIPを拒否すると考える。

余談。
+include:_spf.google.com とincludeとあった場合、
google.comのSPFレコードを参照するという意味が加わる。

参考
https://baremail.jp/blog/2020/02/28/579/

恥ずかしい話、gitlabを今まで利用していたものの、よくわからなかったので、
ファイルをコピーして、CUI上でペーストしてそのスクリプトを使うって方法で運用していました。

最近はチームでgitlabを通して開発することでgitコマンドを用いて
gitlabを利用しているので忘れないうちにメモをします。

※前提として、既にgitlabにリポジトリがあるものを利用する場合です。

gitlabに公開鍵を登録する

gitlabにログイン後、プロフィールにアクセス。
メニューの項目からSSH鍵を選択。

上記にページにたどり着いたら、キーの箇所に自分が利用する端末の公開鍵を貼り付けます。
タイトルは自動で表示されます。Expiration dateは有効期限なので空白で構いません。

git cloneでリポジトリを入手する

自分が利用したいリポジトリを選択し、ページ右上の「クローン」を選択します。

先ほど公開鍵を登録したので、SSHでクローン以下のアドレスをコピーします。

そのあと、自分のCUI上で以下を入力するとリポジトリを入手できます。

git clone ”コピーしたアドレス”

git pushでリポジトリを更新

git pushはgitlab上のリポジトリを更新できるコマンドですが、
pushをするまでにいくつか段階を踏みます。

git addでCUI上のファイルを追加

git add "対象のコマンド"

git commitでリポジトリに反映

git commit -m"コメントを残せる"

git pushでgit labに反映

git push

この後、gitlabへアクセスすると、リポジトリが更新されたかと思います。

リポジトリを更新したい場合は下記コマンドを使います

git pull