ちゃんおぎのメモ置き場

ネットワークに強くなるために少しづつ頑張るブログです.

Ciscoルータ内で動作しているDHCP Serverが意図しないNAKを返す

1. はじめに

 Ciscoルータ内で動作しているDHCP Serverが意図しないNAKを返していたため,それを解決した時に調査した内容のメモ.

2. ネットワークの概要

 某所のネットワークをCisco1941を使用して管理していました.管理を行なっていたネットワーク図(今回の問題に関係する部分だけを示している)は図1のようなものになっています.インターネットにはNAPT変換を使用しており,私たちが所属する建物を管理する管理者のネットワークを介して接続されています.またIPアドレスDHCPで取得し,Cisco1941上でローカル向けにDHCPサーバが動作しています. f:id:tyanogi:20180717155533p:plain

図1:管理してるネットワーク図

3. インターネットに接続できなくなった

 ある日インターネット側のIPアドレスが割り当てられなくなり,インターネットに接続することができなくなりました.建物の管理者に問い合わせたところ管理していないDHCPサーバが送信元のパケットを検知したため,IPアドレスの割り振りを遮断したとのことでした(通知をしないまま遮断するのはやめて…).

4. 再現性を確保する

 建物の管理者と連絡を取りながら問題を解決するのは時間がかかるため,なんとか私が管理できるネットワーク内でこの問題を再現できるようにします. 

4.1 原因の特定

 建物の管理者の連絡から問題の原因を推測すると以下のようなことが考えられました.

  • Gi0/0から入ってきたDHCP要求に対してGi0/0にDHCP OfferメッセージまたはNACKメッセージを送信している可能性がある.
  • Gi0/1から入ってきたDHCP要求に対してGi0/0にDHCP OfferメッセージまたはNACKメッセージを送信している可能性がある.

 建物の管理者からの連絡は情報量が少なくなく,DHCPサーバがどうようなパケットを送信していたのかがわからなかったため再問い合わせしました.するとpcapファイルをいただくことができました!!(原因の特定をするのがめんどくさかったのでは…)
 実際にpcapファイルを調査したところ,どうやらCisco1941内で動作しているDHCPサーバからNAKを返しているようでした.

4.1 実験

 原因を特定できたので実際にDHCP Requestメッセージを送信した際にDHCPサーバがNAKを返すか実験してみます.今回はDHCP Discoverメッセージも反応するか確認するため送信しています.
 結果,DHCP Requestメッセージを作成してGi0/0に送信してみたところNAKが返ってきました! 図2はその時にパケットキャプチャしたものです.パケットキャプチャはDHCP Requestメッセージを送信した端末でおこないました.Gi0/0のIPアドレスは一時的に172.16.0.254/16を割り当ててあります.

f:id:tyanogi:20180717151807p:plain

図2:パケットキャプチャした図

 しかし,なぜDHCP Requestメッセージには反応してDiscoverメッセージには反応しないのか調べてもよくわかりませんでした.IOSの仕様?分かる方がいましたら教えていただけると幸いです.
 

5. 問題の解決

 さてこの問題の解決方法なのですが,私の場合拡張ACLを使用して解決をしました.NAKを返す原因を特定してからまず初めに思い浮かんだのがこの解決方法だったのですが,他の方法もあるのではないかと思い調査していました(2週間くらい探してた…).
 結果,私の調査した範囲では拡張ACLを使用する方法 [1]しか見つかりませんでした.以下がCisco1941に適応させた拡張ACLの設定になります.

ip access-list extended Deny_DHCP_Client
 deny   udp any any eq bootps
 permit ip any any

int gi0/0
ip access-group Deny_DHCP_Client in

参考

[1] WAN interface sending DHCP NAK,https://supportforums.cisco.com/t5/lan-switching-and-routing/wan-interface-sending-dhcp-nak/m-p/2615904

Ubuntu18.04 LTSでネットワークの設定方法

1. はじめに

Ubuntu16.04から18.04に移行した際に固定IPアドレスの設定で詰まったので,そのときに調査した内容のメモ.

2. ネットワークの設定方法が変わった

Ubuntu17.10からネットワークの設定を「Netplan」で行う方法に変更されたらしい[1].そのため設定ファイルやディレクトリ構造も変化した.またUbuntu16.04で使用していた「/etc/network/interfaces」はデフォルトの設定ファイルではなくなった.

2.1 Netplan

2.2 設定ファイル [2]

設定ファイルは「/etc/netplan/」下に配置されている.私の環境(Ubuntu18.04 LTS Desktop)での設定ファイル名は「01-network-manager-all.yaml」であった.初期の設定ファイルの内容は以下のようになっている.

# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager

上記の設定ファイルでは「NetworkManager」がシステム上で唯一のネットワーク設定レンダラであることを意味している.また「NetworkManager」がデフォルトですべてのネットワークデバイスを管理することを意味する.

NetplanはOS起動時に上記の設定ファイルを読み込み,「/run/NetworkManger/conf.d/10-globally-managed-devices.conf」ファイルを生成する.

3. IPアドレスを固定する

「/etc/netplan/01-network-manager-all.yaml」に下記の設定を記述する.

# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager

  ethernets:
    enp3s0:
        dhcp4: n
        addresses: [192.168.11.100/24]
        gateway4: 192.168.11.1
        nameservers:
            addresses: [192.168.11.1]
        dhcp6: n

下記を実行して設定を反映する.

$ sudo netplan apply

おまけ. IPアドレスを動的に取得する(DHCP Client)

「/etc/netplan/01-network-manager-all.yaml」に下記の設定を記述する.

# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager

  ethernets:
    enp3s0:
        dhcp4: y
        dhcp6: n

下記を実行して設定を反映する.

$ sudo netplan apply

参考

[1] Ubuntu 17.10 その23 - ネットワークの設定方法がNetplanに変わる,https://kledgeb.blogspot.com/2017/06/ubuntu-1710-23-netplan.html
[2] Quick and easy network configuration with Netplan, https://blog.ubuntu.com/2017/07/05/quick-and-easy-network-configuration-with-netplan

RM mini3:初期設定に苦戦したお話

はじめに

自宅の家電製品のリモコンが多くいちいち操作するのが面倒だと思ったので,最近流行りのスマートスピーカー(Google Home)と学習リモコンで家電を操作しようと考えました.学習リモコンは"Broadlink RM mini3"を購入しました.今回はRasbperry Piを使用せずにGoogle HomeからRM mini3を中継して家電を操作する方法を試して見ました.

f:id:tyanogi:20180424135807j:plain

初期設定

初期設定は以下のサイトを参考に行いました.

私の場合はアプリとRM mini3のペアリングがうまくいきませんでした.ペアリングが成功するまでに結構時間がかかった… そのため本記事は私が行なった設定を書いてます.

1. IHC(Inteligent home center)アプリのインストール

私はIHCアプリをAndroid端末でインストールしました. IHCアプリはGoogle play上ではインストールできないため,Apkファイルをダウンロードサイトからダウンロードしてアプリをインストールします.

Apkファイルのダウンロードサイトは以下に示します. https://www.apkmonk.com/app/cn.com.broadlink.econtrol.plus/

参考にしたサイトではアプリケーションのバージョンをおとしてペアリングが成功したと記されていますが,私の場合は2018年4月24日時点で最新の"Ver.1.9.7.4325"で成功しました.

次にIHCアプリをインストールしたAndroid端末の設定言語を英語に変更します.
設定言語を英語に変更しなければIHCアプリ側でRM mini3の設定を行うことができません.

2. IHCアプリとRM mini3のペアリング

インストールしたIHCアプリを起動します.

起動するとログイン画面が出てくるのでログインします.
次にバーコードを読み込む画面が出てきます.
パッケージのバーコード(QRコードではない方)を読み込むとすぐに設定画面に移動できます.しかし今回は手動で設定していきます.
"Add Device by category"をタップしデバイスを選択していきます.

f:id:tyanogi:20180424133721j:plain]

RM mini3は"Universal Remotes"の中にあります.Android端末の設定言語を日本語に設定していた場合,"Universal Remotes"が表示されないので注意してください. 左が日本語設定の場合,右が英語設定の場合です.

日本語英語

IHCアプリでRM mini3を選択するとRM mini3側のリセットボタンを2〜3秒ほど長押ししてペアリングモードにしろと言われるので,リセットボタンを長押しします.
その後Wifiの設定を行うとペアリングが始まります.

f:id:tyanogi:20180424134826j:plain

ペアリングが100%になると結果が出力されます.私の場合,"Cannot find the device to be add"と言われペアリングに失敗しました.
失敗した場合,Try other methodsをタップします.画面を進めていくと右側の画面にたどり着きます.WifiをBroadlinkProvに接続しろと言われるので接続します.

BloadlinkProvに接続したあとに再度ペアリングを行うと,ペアリングが成功しました.

3. リモコンを学習させる&GoogleHomeと連携するためにシーンを追加する

これは上記に示した参考サイトがわかりやすく説明されていたので説明は省略します.

まとめ

RM mini3を使用して家電操作をGoogle Homeから行えるようにしたわけですが,私が行いたいと考えているシーンの追加ができなかったりと少し不便な所がありました.またログを取得したいと考えているので,最終的にはRaspberry Pi経由で家電を操作することになりそうです.
基本的な家電操作のみを行いたい人であればこの記事で記した方法で十分だと思います!
RM mini3をいろいろいじったらまた記事を書きたいと思います.

Cisco841m:バックアップと初期化

はじめに

1年前からCisco841mを購入して色々といじっていたのですが,勉強も兼ねて設定を初期化しようと思います. 以下の設定は購入した時の状態から始めています.

Cisco841とは

f:id:tyanogi:20180422164917j:plain

設定

Cisco841mは初期起動の時点で設定が書き込まれています.私は設定されていない状態から設定を行いたかったため,工場出荷の状態に戻します.工場出荷の状態に戻す前に書き込まれている設定のバックアップを取っておきます.今回はTFTP Serverにバックアップを取ります.

TFTP以外のバックアップの取り方やバックアップを取り忘れてしまって購入した時の状態に戻せない場合などは"C841M リカバリ&初期化ガイド"というものがあるのでこちらで対処します.

設定はMacでコンソールケーブルを使用して行います.

Macからルータに接続

screen /dev/tty.usbserial-**** 9600

初期アカウントはUsername:cisco,Password:ciscoになります. このアカウントは1回目のログイン後,無効になってしまうため注意が必要です.設定を保存する前にACアダプタを抜いてから差し込み直す(Cisco841mは電源スイッチがありません)と初期アカウントで再度ログイン可能になります.

私は1年前にこの設定があることに気づかず,設定を保存してしまったため再度ログインできなくなったことがあります.その場合は上記に示したサイトを見ながら再設定を行います.

バックアップと初期化

yourname#enable
# バックアップ
yourname# copy running-config tftp://<ipaddress>/customer-config.txt
# 工場出荷の状態に戻す
yourname#erase startup-config
# 再起動
yourname#reload

以上で初期化は完了です.